Skip to content

Commit 81e7370

Browse files
Revert to BUILD_TESTING; make inc fix optionally transitive
1 parent 490ce70 commit 81e7370

File tree

9 files changed

+89
-48
lines changed

9 files changed

+89
-48
lines changed

CMakeLists.txt

+20-38
Original file line numberDiff line numberDiff line change
@@ -15,57 +15,34 @@ project(Fenix C)
1515
set(FENIX_VERSION_MAJOR 1)
1616
set(FENIX_VERSION_MINOR 0)
1717

18-
option(FENIX_EXAMPLES "Builds example programs from the examples directory" OFF)
19-
option(FENIX_TESTS "Builds tests and test modes of files" OFF)
18+
option(BUILD_EXAMPLES "Builds example programs from the examples directory" OFF)
19+
option(BUILD_TESTING "Builds tests and test modes of files" ON)
20+
2021

2122
#Solves an issue with some system environments putting their MPI headers before
2223
#the headers CMake includes. Forces non-system MPI headers when incorrect headers
2324
#detected in include path.
24-
option(FENIX_SYSTEM_INC_FIX "Attempts to force overriding any system MPI headers" ON)
25-
25+
option(FENIX_SYSTEM_INC_FIX "Attempts to force overriding any system MPI headers" ON)
26+
option(FENIX_PROPAGATE_INC_FIX "Attempt overriding system MPI headers in linking projects" ON)
2627

2728
find_package(MPI REQUIRED)
2829

29-
#If we're using mpicc, we don't need to worry about the includes.
30-
if("${CMAKE_C_COMPILER}" MATCHES ".*/?mpicc")
31-
set(FENIX_SYSTEM_INC_FIX OFF)
32-
endif()
33-
3430
if(${FENIX_SYSTEM_INC_FIX})
35-
include(CheckIncludeFile)
36-
set(CMAKE_REQUIRED_QUIET ON)
37-
check_include_file("mpi.h" MPI_HEADER_CRASH)
38-
set(CMAKE_REQUIRED_QUIET OFF)
39-
40-
if(${MPI_HEADER_CRASH})
41-
message(WARNING "Detected system MPI headers, attempting to force use of ${MPI_C_INCLUDE_DIRS}. Set SYSTEM_INC_FIX=OFF to stop this behavior.")
42-
43-
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.25")
44-
set_target_properties(MPI::MPI_C PROPERTIES SYSTEM "FALSE")
45-
else()
46-
foreach(MPI_DIR ${MPI_C_INCLUDE_DIRS})
47-
if(NOT ("${CMAKE_C_FLAGS}" MATCHES ".* -I${MPI_DIR}.*"))
48-
message(STATUS ${MPI_DIR})
49-
set(CMAKE_C_FLAGS " -I${MPI_DIR} ${CMAKE_C_FLAGS}" CACHE INTERNAL "Flags to append to build commands for C.")
50-
endif()
51-
endforeach()
52-
set_target_properties(MPI::MPI_C PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "")
53-
endif()
54-
endif()
55-
56-
endif() #SYSTEM_INC_FIX
31+
include(cmake/systemMPIOverride.cmake)
32+
endif()
5733

5834

5935
add_subdirectory(src)
6036

37+
6138
include(CTest)
6239
list(APPEND MPIEXEC_PREFLAGS "--with-ft;mpi")
6340

64-
if(FENIX_EXAMPLES)
41+
if(BUILD_EXAMPLES)
6542
add_subdirectory(examples)
6643
endif()
6744

68-
if(FENIX_TESTS)
45+
if(BUILD_TESTING)
6946
add_subdirectory(test)
7047
endif()
7148

@@ -75,17 +52,22 @@ configure_file(
7552
${CMAKE_CURRENT_SOURCE_DIR}/include/fenix-config.h.in
7653
${CMAKE_CURRENT_BINARY_DIR}/include/fenix-config.h @ONLY
7754
)
55+
configure_file(
56+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/systemMPIOverride.cmake
57+
${CMAKE_CURRENT_BINARY_DIR}/cmake/systemMPIOverride.cmake COPYONLY
58+
)
59+
7860

7961
include(CMakePackageConfigHelpers)
80-
configure_package_config_file(fenixConfig.cmake.in
81-
${CMAKE_CURRENT_BINARY_DIR}/fenixConfig.cmake
62+
configure_package_config_file(cmake/fenixConfig.cmake.in
63+
${CMAKE_CURRENT_BINARY_DIR}/cmake/fenixConfig.cmake
8264
INSTALL_DESTINATION cmake)
83-
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/fenixConfigVersion.cmake
65+
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/cmake/fenixConfigVersion.cmake
8466
VERSION "${FENIX_VERSION_MAJOR}.${FENIX_VERSION_MINOR}"
8567
COMPATIBILITY SameMajorVersion)
8668
install(
8769
FILES
88-
${CMAKE_CURRENT_BINARY_DIR}/fenixConfig.cmake
89-
${CMAKE_CURRENT_BINARY_DIR}/fenixConfigVersion.cmake
70+
${CMAKE_CURRENT_BINARY_DIR}/cmake/fenixConfig.cmake
71+
${CMAKE_CURRENT_BINARY_DIR}/cmake/systemMPIOverride.cmake
9072
DESTINATION cmake
9173
)

cmake/fenixConfig.cmake.in

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
@PACKAGE_INIT@
2+
3+
include(CMakeFindDependencyMacro)
4+
5+
include("${CMAKE_CURRENT_LIST_DIR}/fenixTargets.cmake")
6+
7+
set(FENIX_SYSTEM_INC_FIX @FENIX_SYSTEM_INC_FIX@)
8+
if(${FENIX_SYSTEM_INC_FIX})
9+
option(FENIX_PROPAGATE_INC_FIX "Attempt overriding system MPI headers in linking projects" @FENIX_PROPAGATE_INC_FIX@)
10+
if(${FENIX_PROPAGATE_INC_FIX})
11+
include("${CMAKE_CURRENT_LIST_DIR}/systemMPIOverride.cmake")
12+
endif()
13+
endif()

cmake/systemMPIOverride.cmake

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#If we're using mpicc, we don't need to worry about the includes.
2+
if("${CMAKE_C_COMPILER}" MATCHES ".*/?mpic")
3+
return()
4+
endif()
5+
6+
include(CheckIncludeFile)
7+
set(CMAKE_REQUIRED_QUIET ON)
8+
check_include_file("mpi.h" MPI_HEADER_CLASH)
9+
set(CMAKE_REQUIRED_QUIET OFF)
10+
11+
if(${MPI_HEADER_CLASH})
12+
if(TARGET fenix)
13+
message(WARNING "Fenix detected system MPI headers, attempting to force use of ${MPI_C_INCLUDE_DIRS}. Disable FENIX_PROPAGATE_INC_FIX to stop this behavior.")
14+
else()
15+
message(WARNING "Detected system MPI headers, attempting to force use of ${MPI_C_INCLUDE_DIRS}. Disable FENIX_SYSTEM_INC_FIX to stop this behavior.")
16+
endif()
17+
18+
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.25")
19+
20+
if(TARGET MPI::MPI_C)
21+
set_target_properties(MPI::MPI_C PROPERTIES SYSTEM "FALSE")
22+
endif()
23+
if(TARGET MPI::MPI_CXX)
24+
set_target_properties(MPI::MPI_CXX PROPERTIES SYSTEM "FALSE")
25+
endif()
26+
27+
else()
28+
29+
if(TARGET MPI::MPI_C)
30+
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY INCLUDE_DIRECTORIES "${MPI_C_INCLUDE_DIRS}")
31+
endif()
32+
if(TARGET MPI::MPI_CXX)
33+
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY INCLUDE_DIRECTORIES "${MPI_CXX_INCLUDE_DIRS}")
34+
endif()
35+
36+
if(TARGET fenix)
37+
get_target_property(FENIX_INCLUDES fenix INTERFACE_INCLUDE_DIRECTORIES)
38+
list(REMOVE_ITEM FENIX_INCLUDES ${MPI_C_INCLUDE_DIRS})
39+
list(REMOVE_ITEM FENIX_INCLUDES ${MPI_CXX_INCLUDE_DIRS})
40+
set_target_properties(fenix PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FENIX_INCLUDES}")
41+
endif()
42+
43+
if(TARGET MPI::MPI_C)
44+
set_target_properties(MPI::MPI_C PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "")
45+
endif()
46+
if(TARGET MPI::MPI_CXX)
47+
set_target_properties(MPI::MPI_CXX PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "")
48+
endif()
49+
50+
endif()
51+
endif()

examples/01_hello_world/fenix/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
add_executable(fenix_hello_world fenix_hello_world.c)
1212
target_link_libraries(fenix_hello_world fenix ${MPI_C_LIBRARIES})
1313

14-
if(FENIX_TESTS)
14+
if(BUILD_TESTING)
1515
add_test(NAME hello_world
1616
COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 3 ${MPIEXEC_PREFLAGS} fenix_hello_world ${MPIEXEC_POSTFLAGS} "1")
1717
endif()

examples/02_send_recv/fenix/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
add_executable(fenix_ring fenix_ring.c)
1212
target_link_libraries(fenix_ring fenix ${MPI_C_LIBRARIES} m )
1313

14-
if(FENIX_TESTS)
14+
if(BUILD_TESTING)
1515
add_test(NAME ring
1616
COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 5 ${MPIEXEC_PREFLAGS} fenix_ring ${MPIEXEC_POSTFLAGS} 1 2)
1717
set_tests_properties(ring PROPERTIES

examples/05_subset_create/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
add_executable(subset_create subset_create.c)
1212
target_link_libraries(subset_create fenix ${MPI_C_LIBRARIES})
1313

14-
if(FENIX_TESTS)
14+
if(BUILD_TESTING)
1515
add_test(NAME subset_create
1616
COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 5 ${MPIEXEC_PREFLAGS} subset_create ${MPIEXEC_POSTFLAGS} 1)
1717
set_tests_properties(subset_create PROPERTIES

examples/06_subset_createv/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
add_executable(subset_createv subset_createv.c)
1212
target_link_libraries(subset_createv fenix ${MPI_C_LIBRARIES})
1313

14-
if(FENIX_TESTS)
14+
if(BUILD_TESTING)
1515
add_test(NAME subset_createv
1616
COMMAND ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} 5 ${MPIEXEC_PREFLAGS} subset_createv ${MPIEXEC_POSTFLAGS} 1)
1717
set_tests_properties(subset_createv PROPERTIES

fenixConfig.cmake.in

-5
This file was deleted.

src/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ globals.c
3333

3434
add_library( fenix STATIC ${Fenix_SOURCES})
3535

36-
target_link_libraries(fenix MPI::MPI_C)
36+
target_link_libraries(fenix PUBLIC MPI::MPI_C)
3737

3838
target_include_directories(fenix
3939
PUBLIC

0 commit comments

Comments
 (0)