From ff0b2e5de44649c9dfb147f19cab7375dfc2833d Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Tue, 13 Mar 2018 15:06:46 +0100 Subject: [PATCH] Remove CMake generated main function file --- cmake/modules/CMakeLists.txt | 5 ++- cmake/modules/DunePerftoolMacros.cmake | 13 +++---- cmake/modules/StandardMain.cmake | 34 ------------------- python/dune/perftool/generation/cpp.py | 2 +- .../dune/perftool/pdelab/driver/__init__.py | 10 ++++-- 5 files changed, 17 insertions(+), 47 deletions(-) delete mode 100644 cmake/modules/StandardMain.cmake diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt index 415cd9c6..85e38089 100644 --- a/cmake/modules/CMakeLists.txt +++ b/cmake/modules/CMakeLists.txt @@ -1,2 +1,5 @@ -install(FILES DunePerftoolMacros.cmake +install(FILES deplist.py + DunePerftoolMacros.cmake + GeneratedSystemtest.cmake + perftool_sourcepath.py DESTINATION ${DUNE_INSTALL_MODULEDIR}) diff --git a/cmake/modules/DunePerftoolMacros.cmake b/cmake/modules/DunePerftoolMacros.cmake index 8c8aa346..ca33bfae 100644 --- a/cmake/modules/DunePerftoolMacros.cmake +++ b/cmake/modules/DunePerftoolMacros.cmake @@ -96,23 +96,18 @@ function(add_generated_executable) endif() if(NOT GEN_SOURCE) # Generate a driver file - set(GEN_DRIVER ${GEN_TARGET}_driver.hh) - add_custom_command(OUTPUT ${GEN_DRIVER} + set(GEN_SOURCE ${GEN_TARGET}_driver.cc) + add_custom_command(OUTPUT ${GEN_SOURCE} COMMAND ${CMAKE_BINARY_DIR}/run-in-dune-env generate_driver --uflfile ${GEN_UFLFILE} --ini-file ${GEN_INIFILE} --target-name ${GEN_TARGET} - --driver-file ${GEN_DRIVER} + --driver-file ${GEN_SOURCE} --project-basedir ${CMAKE_BINARY_DIR} ${GEN_FORM_COMPILER_ARGS} DEPENDS ${GEN_UFLFILE} ${UFL2PDELAB_SOURCES} ${GEN_DEPENDS} ${DUNE_PERFTOOL_ADDITIONAL_PYTHON_SOURCES} COMMENT "Generating driver for the target ${GEN_TARGET}" ) - set(GEN_SOURCE ${GEN_TARGET}_main.cc) - dune_module_path(MODULE dune-perftool - RESULT perftool_path - CMAKE_MODULES) - configure_file(${perftool_path}/StandardMain.cmake ${GEN_SOURCE}) endif() if(GEN_EXCLUDE_FROM_ALL) set(GEN_EXCLUDE_FROM_ALL "EXCLUDE_FROM_ALL") @@ -143,7 +138,7 @@ function(add_generated_executable) set(header_deps ${header_deps} ${depdata___${op}}) endforeach() - add_executable(${GEN_TARGET} ${GEN_EXCLUDE_FROM_ALL} ${GEN_SOURCE} ${GEN_DRIVER} ${header_deps}) + add_executable(${GEN_TARGET} ${GEN_EXCLUDE_FROM_ALL} ${GEN_SOURCE} ${header_deps}) target_include_directories(${GEN_TARGET} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) add_dependencies(generation ${GEN_TARGET}) endfunction() diff --git a/cmake/modules/StandardMain.cmake b/cmake/modules/StandardMain.cmake deleted file mode 100644 index 028c2efc..00000000 --- a/cmake/modules/StandardMain.cmake +++ /dev/null @@ -1,34 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <dune/common/parallel/mpihelper.hh> -#include <dune/common/exceptions.hh> - -#include"@GEN_DRIVER@" - -int main(int argc, char** argv) -{ - try{ - //Maybe initialize Mpi - Dune::MPIHelper& helper = Dune::MPIHelper::instance(argc, argv); - if(Dune::MPIHelper::isFake) - std::cout<< "This is a sequential program." << std::endl; - else - std::cout<<"I am rank "<<helper.rank()<<" of "<<helper.size() - <<" processes!"<<std::endl; - - if (driver(argc, argv)) - return 1; - else - return 0; - } - catch (Dune::Exception &e){ - std::cerr << "Dune reported error: " << e << std::endl; - return 1; - } - catch (...){ - std::cerr << "Unknown exception thrown!" << std::endl; - return 1; - } -} diff --git a/python/dune/perftool/generation/cpp.py b/python/dune/perftool/generation/cpp.py index 0f44b695..858dc1fc 100644 --- a/python/dune/perftool/generation/cpp.py +++ b/python/dune/perftool/generation/cpp.py @@ -18,7 +18,7 @@ template_parameter = generator_factory(item_tags=("template_param",), context_ta class_basename = generator_factory(item_tags=("basename",), context_tags=("classtag",)) -@generator_factory(item_tags=("file", "include"), context_tags=("filetag",)) +@generator_factory(item_tags=("file", "include"), context_tags=("filetag",), counted=True) def include_file(include, system=False): return cgen.Include(include, system=system) diff --git a/python/dune/perftool/pdelab/driver/__init__.py b/python/dune/perftool/pdelab/driver/__init__.py index 5b768b14..c859c99d 100644 --- a/python/dune/perftool/pdelab/driver/__init__.py +++ b/python/dune/perftool/pdelab/driver/__init__.py @@ -232,6 +232,12 @@ def check_parallel_execution(): def generate_driver(): + # Guarantee that config.h is the very first include in the generated file + include_file("config.h", filetag="driver") + + # Make sure that the MPI helper is instantiated + name_mpihelper() + # Add check to c++ file if this program should only be used in parallel mode if get_option("parallel"): check_parallel_execution() @@ -273,7 +279,7 @@ def generate_driver(): from dune.perftool.generation import retrieve_cache_items from cgen import FunctionDeclaration, FunctionBody, Block, Value, LineComment, Line - driver_signature = FunctionDeclaration(Value('bool', 'driver'), [Value('int', 'argc'), Value('char**', 'argv')]) + driver_signature = FunctionDeclaration(Value('int', 'main'), [Value('int', 'argc'), Value('char**', 'argv')]) contents = [] @@ -327,7 +333,7 @@ def generate_driver(): filename = get_option("driver_file") from dune.perftool.file import generate_file - generate_file(filename, "driver", [driver]) + generate_file(filename, "driver", [driver], headerguard=False) # Reset the caching data structure from dune.perftool.generation import delete_cache_items -- GitLab