From 8e28a964de8e8297e66b7ac7a37c34979bdd9be2 Mon Sep 17 00:00:00 2001 From: Ryan Krattiger Date: Thu, 4 Nov 2021 10:50:17 -0500 Subject: [PATCH] Set build options at target level. Fix tests. --- CMake/build.cmake | 64 ++++++++++----------- CMake/testing.cmake | 2 +- endpoints/CMakeLists.txt | 2 +- miniapps/kripke/CMakeLists.txt | 2 +- miniapps/mandelbrot/CMakeLists.txt | 2 +- miniapps/mandelbrot/testing/CMakeLists.txt | 16 +++--- miniapps/oscillators/CMakeLists.txt | 2 +- miniapps/oscillators/testing/CMakeLists.txt | 26 ++++----- miniapps/vortex/CMakeLists.txt | 2 +- sensei/CMakeLists.txt | 6 +- sensei/testing/CMakeLists.txt | 18 +++--- utils/ImageTester/CMakeLists.txt | 2 +- utils/pugixml/CMakeLists.txt | 2 +- 13 files changed, 70 insertions(+), 76 deletions(-) diff --git a/CMake/build.cmake b/CMake/build.cmake index 37a873836..c26e90d07 100644 --- a/CMake/build.cmake +++ b/CMake/build.cmake @@ -1,9 +1,7 @@ -include(CheckCXXCompilerFlag) - -option(BUILD_SHARED_LIBS OFF "Build shared libraries by default") option(BUILD_STATIC_EXECS OFF "Link executables statically") + if (BUILD_STATIC_EXECS) - set(BUILD_SHARED_LIBS OFF FORCE) + set(BUILD_SHARED_LIBS OFF) set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX}) set(LINK_SEARCH_START_STATIC TRUE) set(LINK_SEARCH_END_STATIC TRUE) @@ -15,46 +13,42 @@ if(NOT CMAKE_BUILD_TYPE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() -# SENSEI should always be position independent -set(CMAKE_POSITION_INDEPENDENT_CODE ON) - -# SENSEI requires minimum C++11 -if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 11) - set(CMAKE_CXX_STANDARD 11) -endif () - if (NOT MSVC) - string(APPEND CMAKE_CXX_FLAGS "-Wall -Wextra") - - # Need to explicitly set optimization level to -O3 because some systems default to -O2 - set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") - set(optimization_flags " -mtune=native; -march=native") - foreach (flag ${optimization_flags}) - check_cxx_compiler_flag(${flag} has_flag) - if(has_flag) - string(APPEND CMAKE_CXX_FLAGS_RELEASE ${flag}) - endif () - endforeach () - if (BUILD_STATIC_EXECS) string(APPEND CMAKE_CXX_FLAGS "-static -static-libgcc -static-libstdc++ -pthread -Wl,-Bstatic") endif () endif () -if (APPLE) - if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - string(APPEND CMAKE_CXX_FLAGS "-stdlib=libc++") - endif () -endif () - include_directories(${CMAKE_SOURCE_DIR}) include_directories(${CMAKE_BINARY_DIR}) -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - message(STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") -message(STATUS "CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}") message(STATUS "BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}") message(STATUS "BUILD_STATIC_EXECS=${BUILD_STATIC_EXECS}") + +function (_sensei_set_target_properties name) + target_compile_features(${name} PUBLIC cxx_std_11) + target_compile_options(${name} PUBLIC + -Wall -Wextra + # Need to explicitly set optimization level to -O3 because some systems default to -O2 + $<$,"Release">:"-03"> + $<$,"AppleClang">:"-stdlib=libc++">) + set_target_properties(${name} PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + CXX_STANDARD 11 + CXX_EXTENSIONS OFF) +endfunction (_sensei_set_target_properties) + +function (sensei_add_executable name) + add_executable(${name} ${ARGN}) + _sensei_set_target_properties(${name}) +endfunction (sensei_add_executable) + +function (sensei_add_library name) + add_library(${name} ${ARGN}) + _sensei_set_target_properties(${name}) + set_target_properties(${name} PROPERTIES + POSITION_INDEPENDENT_CODE ON) +endfunction (sensei_add_library) diff --git a/CMake/testing.cmake b/CMake/testing.cmake index 07990eac3..86fa96800 100644 --- a/CMake/testing.cmake +++ b/CMake/testing.cmake @@ -80,7 +80,7 @@ function (senseiAddTest T_NAME) if (T_EXEC_NAME) set(EXEC_NAME ${T_EXEC_NAME}) endif() - add_executable(${EXEC_NAME} ${T_SOURCES}) + sensei_add_executable(${EXEC_NAME} ${T_SOURCES}) if (T_LIBS) target_link_libraries(${EXEC_NAME} ${T_LIBS}) endif() diff --git a/endpoints/CMakeLists.txt b/endpoints/CMakeLists.txt index ee18ddfbf..ecf241912 100644 --- a/endpoints/CMakeLists.txt +++ b/endpoints/CMakeLists.txt @@ -12,6 +12,6 @@ if(ENABLE_HDF5) list(APPEND endPointLibs sHDF5) endif() -add_executable(SENSEIEndPoint SENSEIEndPoint.cpp) +sensei_add_executable(SENSEIEndPoint SENSEIEndPoint.cpp) target_link_libraries(SENSEIEndPoint PRIVATE ${endPointLibs}) install(TARGETS SENSEIEndPoint RUNTIME DESTINATION bin) diff --git a/miniapps/kripke/CMakeLists.txt b/miniapps/kripke/CMakeLists.txt index 29c4212e3..0001a894b 100644 --- a/miniapps/kripke/CMakeLists.txt +++ b/miniapps/kripke/CMakeLists.txt @@ -43,7 +43,7 @@ if(ENABLE_OPENMP) list(APPEND libs openmp) endif() -add_executable(kripke_p ${KRIPKE_SOURCES}) +sensei_add_executable(kripke_p ${KRIPKE_SOURCES}) target_link_libraries(kripke_p ${libs}) diff --git a/miniapps/mandelbrot/CMakeLists.txt b/miniapps/mandelbrot/CMakeLists.txt index d3fa08927..ec0506187 100644 --- a/miniapps/mandelbrot/CMakeLists.txt +++ b/miniapps/mandelbrot/CMakeLists.txt @@ -6,7 +6,7 @@ if (ENABLE_SENSEI) list(APPEND libs sensei) endif() -add_executable(mandelbrot ${sources}) +sensei_add_executable(mandelbrot ${sources}) target_link_libraries(mandelbrot PRIVATE ${libs}) add_subdirectory(testing) diff --git a/miniapps/mandelbrot/testing/CMakeLists.txt b/miniapps/mandelbrot/testing/CMakeLists.txt index 35c966373..be1d092af 100644 --- a/miniapps/mandelbrot/testing/CMakeLists.txt +++ b/miniapps/mandelbrot/testing/CMakeLists.txt @@ -1,22 +1,22 @@ if (BUILD_TESTING) senseiAddTest(testMandelbrotHistogram - COMMAND mandelbrot -i 2 -l 2 + COMMAND $ -i 2 -l 2 -f ${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_histogram.xml) senseiAddTest(testMandelbrotHistogramPar PARALLEL ${TEST_NP} - COMMAND mandelbrot -i 2 -l 2 + COMMAND $ -i 2 -l 2 -f ${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_histogram.xml) senseiAddTest(testMandelbrotVTKWriter - COMMAND mandelbrot -i 2 -l 2 + COMMAND $ -i 2 -l 2 -f ${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_vtkwriter.xml FEATURES VTK_IO VTK_MPI) senseiAddTest(testMandelbrotVTKWriterPar PARALLEL ${TEST_NP} - COMMAND mandelbrot -i 2 -l 2 + COMMAND $ -i 2 -l 2 -f ${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_vtkwriter.xml FEATURES VTK_IO VTK_MPI) @@ -27,13 +27,13 @@ if (BUILD_TESTING) senseiAddTest(testMandelbrotCatalyst COMMAND - mandelbrot -i 2 -l 2 + $ -i 2 -l 2 -f ${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_catalyst.xml FEATURES CATALYST) senseiAddTest(testMandelbrotCatalystPar PARALLEL ${TEST_NP} - COMMAND mandelbrot -i 2 -l 2 + COMMAND $ -i 2 -l 2 -f ${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_catalyst.xml FEATURES CATALYST) @@ -43,13 +43,13 @@ if (BUILD_TESTING) endif() senseiAddTest(testMandelbrotLibsim - COMMAND mandelbrot -i 2 -l 2 + COMMAND $ -i 2 -l 2 -f ${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_libsim.xml FEATURES LIBSIM) senseiAddTest(testMandelbrotLibsimPar PARALLEL ${TEST_NP} - COMMAND mandelbrot -i 2 -l 2 + COMMAND $ -i 2 -l 2 -f ${CMAKE_CURRENT_SOURCE_DIR}/mandelbrot_libsim.xml FEATURES LIBSIM) diff --git a/miniapps/oscillators/CMakeLists.txt b/miniapps/oscillators/CMakeLists.txt index 976ea980d..2dc51e4c3 100644 --- a/miniapps/oscillators/CMakeLists.txt +++ b/miniapps/oscillators/CMakeLists.txt @@ -7,7 +7,7 @@ if(ENABLE_SENSEI) list(APPEND libs sensei) endif() -add_executable(oscillator ${sources}) +sensei_add_executable(oscillator ${sources}) target_link_libraries(oscillator ${libs}) target_include_directories(oscillator SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/miniapps/oscillators/testing/CMakeLists.txt b/miniapps/oscillators/testing/CMakeLists.txt index 5b3eaa56c..bf43720f1 100644 --- a/miniapps/oscillators/testing/CMakeLists.txt +++ b/miniapps/oscillators/testing/CMakeLists.txt @@ -1,36 +1,36 @@ if (BUILD_TESTING) senseiAddTest(testOscillatorHistogram - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_histogram.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc) senseiAddTest(testOscillatorHistogramPar PARALLEL ${TEST_NP} - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_histogram.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc) senseiAddTest(testOscillatorAutocorrelation - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_autocorrelation.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc) senseiAddTest(testOscillatorAutocorrelationPar PARALLEL ${TEST_NP} - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_autocorrelation.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc) senseiAddTest(testOscillatorVTKWriter - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_vtkwriter.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc FEATURES VTK_IO) senseiAddTest(testOscillatorVTKWriterPar PARALLEL ${TEST_NP} - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_vtkwriter.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc FEATURES VTK_IO) @@ -41,14 +41,14 @@ if (BUILD_TESTING) endif() senseiAddTest(testOscillatorCatalyst - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_catalyst.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc FEATURES CATALYST) senseiAddTest(testOscillatorCatalystPar PARALLEL ${TEST_NP} - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_catalyst.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc FEATURES CATALYST) @@ -59,14 +59,14 @@ if (BUILD_TESTING) endif() senseiAddTest(testOscillatorLibsim - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_libsim.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc FEATURES LIBSIM) senseiAddTest(testOscillatorLibsimPar PARALLEL ${TEST_NP} - COMMAND oscillator -t 1 -b ${TEST_NP} -g 1 + COMMAND $ -t 1 -b ${TEST_NP} -g 1 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_libsim.xml ${CMAKE_CURRENT_SOURCE_DIR}/simple.osc FEATURES LIBSIM) @@ -77,14 +77,14 @@ if (BUILD_TESTING) endif() senseiAddTest(testOscillatorAscent - COMMAND oscillator -t 2 -b ${TEST_NP} -g 0 + COMMAND $ -t 2 -b ${TEST_NP} -g 0 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_ascent.xml ${CMAKE_CURRENT_SOURCE_DIR}/random_2d_64.osc FEATURES ASCENT) senseiAddTest(testOscillatorAscentPar PARALLEL ${TEST_NP} - COMMAND oscillator -t 2 -b ${TEST_NP} -g 0 + COMMAND $ -t 2 -b ${TEST_NP} -g 0 -f ${CMAKE_CURRENT_SOURCE_DIR}/oscillator_ascent.xml ${CMAKE_CURRENT_SOURCE_DIR}/random_2d_64.osc FEATURES ASCENT) @@ -93,7 +93,7 @@ if (BUILD_TESTING) #if (ENABLE_CATALYST) # add_test(NAME testCatalystSlice # COMMAND ${CMAKE_COMMAND} - # -DCATALYST_TEST_DRIVER:FILEPATH=$ + # -DCATALYST_TEST_DRIVER:FILEPATH=$> # -DIMAGE_TESTER:FILEPATH=$ # -DCATALYST_TEST_DIR:PATH=${CMAKE_BINARY_DIR}/Testing # -DCATALYST_TEST_DATA=${CMAKE_CURRENT_SOURCE_DIR} diff --git a/miniapps/vortex/CMakeLists.txt b/miniapps/vortex/CMakeLists.txt index 2efc588b8..08e3ef495 100644 --- a/miniapps/vortex/CMakeLists.txt +++ b/miniapps/vortex/CMakeLists.txt @@ -6,5 +6,5 @@ if (ENABLE_SENSEI) list(APPEND libs sensei) endif() -add_executable(vortex ${sources}) +sensei_add_executable(vortex ${sources}) target_link_libraries(vortex PRIVATE ${libs}) diff --git a/sensei/CMakeLists.txt b/sensei/CMakeLists.txt index 194d7f7be..4c194791d 100644 --- a/sensei/CMakeLists.txt +++ b/sensei/CMakeLists.txt @@ -73,7 +73,7 @@ if (ENABLE_ADIOS2) endif() endif() - add_library(senseiCore ${senseiCore_sources}) + sensei_add_library(senseiCore ${senseiCore_sources}) target_include_directories(senseiCore PUBLIC $ @@ -102,7 +102,7 @@ if (ENABLE_ADIOS2) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/python) - add_library(_PythonAnalysis SHARED + sensei_add_library(_PythonAnalysis SHARED ${CMAKE_CURRENT_BINARY_DIR}/_PythonAnalysis.cxx) # include the directory containing _PythonAnalysis in the rpath @@ -149,7 +149,7 @@ if (ENABLE_ADIOS2) # sensei # world facing library that users will link to # contains senseiCore classes, PythonAnalysis, and ConfigurableAnalysis - add_library(sensei ${sensei_sources}) + sensei_add_library(sensei ${sensei_sources}) target_include_directories(sensei PUBLIC $ diff --git a/sensei/testing/CMakeLists.txt b/sensei/testing/CMakeLists.txt index a1a068a7a..4da4fc32f 100644 --- a/sensei/testing/CMakeLists.txt +++ b/sensei/testing/CMakeLists.txt @@ -3,12 +3,12 @@ if (BUILD_TESTING) ############################################################################## senseiAddTest(testHistogramSerial SOURCES testHistogram.cpp LIBS sensei EXEC_NAME testHistogram - COMMAND $ + COMMAND $ LABELS HISTO) senseiAddTest(testHistogramParallel PARALLEL ${TEST_NP} - COMMAND $ + COMMAND $ PROPERTIES LABELS HISTO) @@ -16,12 +16,12 @@ if (BUILD_TESTING) senseiAddTest(testHDF5Write SOURCES testHDF5.cpp LIBS sensei EXEC_NAME testHDF5 PARALLEL ${TEST_NP} - COMMAND $ w 4 n h5test + COMMAND $ w 4 n h5test FEATURES HDF5) senseiAddTest(testHDF5Read PARALLEL ${TEST_NP} - COMMAND $ r h5test.n${TEST_NP} + COMMAND $ r h5test.n${TEST_NP} FEATURES HDF5 PROPERTIES DEPENDS testHDF5Write) @@ -29,14 +29,14 @@ if (BUILD_TESTING) ############################################################################## senseiAddTest(testHDF5WriteStreaming PARALLEL ${TEST_NP} - COMMAND $ w 4 s h5stream + COMMAND $ w 4 s h5stream FEATURES HDF5 PROPERTIES LABELS STREAMING) senseiAddTest(testHDF5ReadStreaming PARALLEL ${TEST_NP} - COMMAND $ r h5stream.n${TEST_NP} s + COMMAND $ r h5stream.n${TEST_NP} s FEATURES HDF5 PROPERTIES DEPENDS testHDF5WriteStreaming @@ -45,7 +45,7 @@ if (BUILD_TESTING) ############################################################################## senseiAddTest(testProgrammableDataAdaptor PARALLEL 1 - COMMAND $ + COMMAND $ SOURCES testProgrammableDataAdaptor.cpp LIBS sensei) @@ -59,13 +59,13 @@ if (BUILD_TESTING) senseiAddTest(testPythonAnalysis SOURCES testPythonAnalysis.cpp LIBS sensei EXEC_NAME testPythonAnalysis COMMAND - $ ${CMAKE_CURRENT_SOURCE_DIR}/testPythonAnalysis.xml + $ ${CMAKE_CURRENT_SOURCE_DIR}/testPythonAnalysis.xml FEATURES PYTHON VTK_IO) senseiAddTest(testPythonAnalysisParallel PARALLEL ${TEST_NP} COMMAND - $ ${CMAKE_CURRENT_SOURCE_DIR}/testPythonAnalysis.xml + $ ${CMAKE_CURRENT_SOURCE_DIR}/testPythonAnalysis.xml FEATURES PYTHON VTK_IO) ############################################################################## diff --git a/utils/ImageTester/CMakeLists.txt b/utils/ImageTester/CMakeLists.txt index 8499ae70f..9075ff3d6 100644 --- a/utils/ImageTester/CMakeLists.txt +++ b/utils/ImageTester/CMakeLists.txt @@ -1,4 +1,4 @@ if (BUILD_TESTING) - add_executable(CompareImages CompareImages.cxx) + sensei_add_executable(CompareImages CompareImages.cxx) target_link_libraries(CompareImages sVTK) endif() diff --git a/utils/pugixml/CMakeLists.txt b/utils/pugixml/CMakeLists.txt index ce5142e13..d5542ed6a 100644 --- a/utils/pugixml/CMakeLists.txt +++ b/utils/pugixml/CMakeLists.txt @@ -1,4 +1,4 @@ -add_library(pugixml STATIC src/pugixml.cpp) +sensei_add_library(pugixml STATIC src/pugixml.cpp) target_include_directories(pugixml INTERFACE $