From a6286490beefa13cc796ebae4d405e2066e51159 Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Mon, 20 Aug 2018 14:39:20 +0200 Subject: [PATCH] [cmake] Add a prototype for build system triggered grid analysis --- bin/analyzegrid/analyze_grid.cc | 4 ++-- cmake/modules/DunePerftoolMacros.cmake | 17 +++++++++++++++-- cmake/modules/GeneratedSystemtests.cmake | 7 ++++++- test/sumfact/poisson/CMakeLists.txt | 1 + 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/bin/analyzegrid/analyze_grid.cc b/bin/analyzegrid/analyze_grid.cc index c4bf9eb6..61eddbf1 100644 --- a/bin/analyzegrid/analyze_grid.cc +++ b/bin/analyzegrid/analyze_grid.cc @@ -17,7 +17,7 @@ int main(int argc, char** argv){ try { - if (argc != 2){ + if (argc != 3){ std::cout << "Need ini file as command line argument." << std::endl; return 1; } @@ -39,7 +39,7 @@ int main(int argc, char** argv){ bool unstructured = initree.get("formcompiler.grid_unstructured", false); std::cout << "unstructured: " << unstructured << std::endl; - std::string filename = initree.get("analyze_grid_filename", "analyze_grid.txt"); + std::string filename = std::string(argv[2]); std::cout << "writing into: " << filename << std::endl; if (quadrilateral){ diff --git a/cmake/modules/DunePerftoolMacros.cmake b/cmake/modules/DunePerftoolMacros.cmake index ca33bfae..42446c12 100644 --- a/cmake/modules/DunePerftoolMacros.cmake +++ b/cmake/modules/DunePerftoolMacros.cmake @@ -71,7 +71,7 @@ endif() file(GLOB_RECURSE UFL2PDELAB_SOURCES ${UFL2PDELAB_GLOB_PATTERN}) function(add_generated_executable) - set(OPTIONS EXCLUDE_FROM_ALL) + set(OPTIONS EXCLUDE_FROM_ALL ANALYZE_GRID) set(SINGLE TARGET SOURCE UFLFILE INIFILE) set(MULTI FORM_COMPILER_ARGS DEPENDS) include(CMakeParseArguments) @@ -115,6 +115,18 @@ function(add_generated_executable) set(GEN_EXCLUDE_FROM_ALL "") endif() + # Process analyze grid option + set(ANALYZE_GRID_FILE) + set(ANALYZE_GRID_OPTION) + if(GEN_ANALYZE_GRID) + set(ANALYZE_GRID_FILE "${GEN_INIFILE}.csv") + set(ANALYZE_GRID_OPTION "--sumfact-grid-info=${ANALYZE_GRID_FILE}") + add_custom_command(OUTPUT ${ANALYZE_GRID_FILE} + COMMAND ${CMAKE_BINARY_DIR}/bin/analyzegrid/analyze_grid ${GEN_INIFILE} ${ANALYZE_GRID_FILE} + COMMENT "Analyzing the grid for target ${GEN_TARGET}..." + ) + endif() + # Parse a mapping of operators to build and their respective filenames dune_execute_process(COMMAND ${CMAKE_BINARY_DIR}/run-in-dune-env python ${perftool_path}/deplist.py ${GEN_INIFILE} ${GEN_TARGET} OUTPUT_VARIABLE depdata @@ -132,7 +144,8 @@ function(add_generated_executable) --ini-file ${GEN_INIFILE} --target-name ${GEN_TARGET} --operator-to-build ${op} - DEPENDS ${GEN_UFLFILE} ${UFL2PDELAB_SOURCES} ${GEN_DEPENDS} ${DUNE_PERFTOOL_ADDITIONAL_PYTHON_SOURCES} + ${ANALYZE_GRID_OPTION} + DEPENDS ${GEN_UFLFILE} ${UFL2PDELAB_SOURCES} ${GEN_DEPENDS} ${DUNE_PERFTOOL_ADDITIONAL_PYTHON_SOURCES} ${ANALYZE_GRID_FILE} COMMENT "Generating operator file ${depdata___${op}} for the target ${GEN_TARGET}" ) set(header_deps ${header_deps} ${depdata___${op}}) diff --git a/cmake/modules/GeneratedSystemtests.cmake b/cmake/modules/GeneratedSystemtests.cmake index 2b1d8772..41975df0 100644 --- a/cmake/modules/GeneratedSystemtests.cmake +++ b/cmake/modules/GeneratedSystemtests.cmake @@ -3,7 +3,7 @@ function(dune_add_formcompiler_system_test) # parse arguments - set(OPTION DEBUG NO_TESTS) + set(OPTION DEBUG NO_TESTS ANALYZE_GRID) set(SINGLE INIFILE BASENAME SCRIPT UFLFILE SOURCE) set(MULTI CREATED_TARGETS) cmake_parse_arguments(SYSTEMTEST "${OPTION}" "${SINGLE}" "${MULTI}" ${ARGN}) @@ -21,6 +21,10 @@ function(dune_add_formcompiler_system_test) if(SYSTEMTEST_SOURCE) set(SOURCE SOURCE ${SYSTEMTEST_SOURCE}) endif() + set(ANALYZE_GRID_STR "") + if(SYSTEMTEST_ANALYZE_GRID) + set(ANALYZE_GRID_STR "ANALYZE_GRID") + endif() # set a default for the script. call_executable.py just calls the executable. # There, it is also possible to hook in things depending on the inifile @@ -57,6 +61,7 @@ function(dune_add_formcompiler_system_test) DEPENDS ${SYSTEMTEST_INIFILE} EXCLUDE_FROM_ALL ${SOURCE} + ${ANALYZE_GRID_STR} ) # Enrich the target with preprocessor variables from the __static section diff --git a/test/sumfact/poisson/CMakeLists.txt b/test/sumfact/poisson/CMakeLists.txt index bf99ee3c..9dda49d7 100644 --- a/test/sumfact/poisson/CMakeLists.txt +++ b/test/sumfact/poisson/CMakeLists.txt @@ -53,6 +53,7 @@ dune_add_formcompiler_system_test(UFLFILE poisson_3d.ufl dune_add_formcompiler_system_test(UFLFILE poisson_dg_2d.ufl BASENAME sumfact_poisson_dg_2d_unstructured INIFILE poisson_dg_2d_unstructured.mini + ANALYZE_GRID ) # dune_add_formcompiler_system_test(UFLFILE poisson_dg_3d.ufl # BASENAME sumfact_poisson_dg_3d_unstructured -- GitLab