Skip to content

Commit 72c7958

Browse files
committed
Make build reproducible on macOS & modernize CMake
- Use target properties - More robust/easier/transitive usage - More robust/easier CMake config files for use with `find_package(OPENCOARRAYS)` - Make builds reproducible when: - `ZERO_AR_DATE=1` - `SOURCE_DATE_EPOCH=<unix time of last commit>` - Modules not checked/verified, these may also be needed: - Source/build directory: - `/Users/ibeekman/Sandbox/OpenCoarrays{,/build}` - `LC_ALL=C` - `TZ=UTC`
1 parent 9f21ff1 commit 72c7958

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

CMakeLists.txt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
cmake_minimum_required(VERSION 3.10)
22

3-
cmake_policy(VERSION 3.10...3.12)
4-
3+
cmake_policy(VERSION 3.10...3.14)
4+
5+
set(CMAKE_SKIP_RPATH ON
6+
CACHE BOOL "Don't add a build-dir rpath")
7+
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON
8+
CACHE BOOL "Build using the install rpath")
9+
set(CMAKE_BUILD_RPATH_USE_ORIGIN ON
10+
CACHE BOOL "Use relative rpaths")
511
# Set the type/configuration of build to perform
612
set ( CMAKE_CONFIGURATION_TYPES "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "CodeCoverage" )
713
set ( CMAKE_BUILD_TYPE "Release"
@@ -88,6 +94,11 @@ string(REGEX REPLACE "-rc[0-9]+$"
8894

8995
project(opencoarrays VERSION "${OPENCOARRAYS_CMAKE_PROJECT_VERSION}" LANGUAGES C Fortran)
9096

97+
if(DEFINED CMAKE_BUILD_TYPE AND "${CMAKE_BUILD_TYPE}" MATCHES "[Rr][Ee][Ll]")
98+
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fno-working-directory")
99+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-working-directory")
100+
endif()
101+
91102
message( STATUS "Building OpenCoarrays version: ${full_git_describe}" )
92103
set(OpenCoarrays_dist_string "OpenCoarrays-${full_git_describe}")
93104
message( STATUS "Building for target architecture: ${CMAKE_SYSTEM_PROCESSOR}" )
@@ -483,7 +494,6 @@ set(CMAKE_C_COMPILE_FLAGS "${CMAKE_C_COMPILE_FLAGS} ${MPI_C_COMPILE_FLAGS}")
483494
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} ${MPI_C_LINK_FLAGS}")
484495
set(CMAKE_Fortran_COMPILE_FLAGS "${CMAKE_Fortran_COMPILE_FLAGS} ${MPI_Fortran_COMPILE_FLAGS}")
485496
set(CMAKE_Fortran_LINK_FLAGS "${CMAKE_Fortran_LINK_FLAGS} ${MPI_Fortran_LINK_FLAGS}")
486-
include_directories(BEFORE ${MPI_C_INCLUDE_PATH} ${MPI_Fortran_INCLUDE_PATH})
487497

488498
#---------------------------------------------------
489499
# Use standardized GNU install directory conventions
@@ -591,8 +601,6 @@ define_property(TARGET
591601
#-------------------------------
592602
# Recurse into the src directory
593603
#-------------------------------
594-
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/src)
595-
596604
add_subdirectory(src)
597605

598606
#-----------------------------------------------------

src/mpi/CMakeLists.txt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ target_compile_options(opencoarrays_mod
2626
target_link_libraries(opencoarrays_mod
2727
PUBLIC ${MPI_Fortran_LINK_FLAGS}
2828
PUBLIC ${MPI_Fortran_LIBRARIES})
29-
target_include_directories(opencoarrays_mod
30-
PRIVATE $<$<COMPILE_LANGUAGE:Fortran>:${MPI_Fortran_INCLUDE_PATH}>)
29+
target_include_directories(opencoarrays_mod PUBLIC
30+
$<$<COMPILE_LANGUAGE:Fortran>:${MPI_Fortran_INCLUDE_PATH}>
31+
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_INCLUDEDIR}/${mod_dir_tail}>
32+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${mod_dir_tail}>)
3133

3234
add_library(caf_mpi SHARED mpi_caf.c ../common/caf_auxiliary.c)
3335
add_library(caf_mpi_static STATIC mpi_caf.c ../common/caf_auxiliary.c)
@@ -42,10 +44,14 @@ target_link_libraries(caf_mpi_static
4244
set_target_properties(caf_mpi_static
4345
PROPERTIES
4446
POSITION_INDEPENDENT_CODE TRUE)
45-
target_include_directories(caf_mpi
46-
PUBLIC $<$<COMPILE_LANGUAGE:C>:${MPI_C_INCLUDE_PATH}>)
47-
target_include_directories(caf_mpi_static
48-
PUBLIC $<$<COMPILE_LANGUAGE:C>:${MPI_C_INCLUDE_PATH}>)
47+
target_include_directories(caf_mpi PUBLIC
48+
$<$<COMPILE_LANGUAGE:C>:${MPI_C_INCLUDE_PATH}>
49+
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>
50+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
51+
target_include_directories(caf_mpi_static PUBLIC
52+
$<$<COMPILE_LANGUAGE:C>:${MPI_C_INCLUDE_PATH}>
53+
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src>
54+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
4955
target_compile_options(caf_mpi
5056
PUBLIC $<$<COMPILE_LANGUAGE:C>:${MPI_C_COMPILE_FLAGS}>)
5157
target_compile_options(caf_mpi_static

0 commit comments

Comments
 (0)