From d4a3cd99925166d6cbaed8f26fd989083ddae0a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Sun, 9 May 2021 17:36:30 +0200 Subject: [PATCH] Make the static library build reproducible with supported compilers This is based on bed285af07607a9da93892f8b08d36c3fd6af98d from `v2.x` branch, but done properly for the build in v3 branch, effectively porting #2141 to devel. --- CMake/MiscFunctions.cmake | 10 ++++++++++ src/CMakeLists.txt | 2 ++ 2 files changed, 12 insertions(+) diff --git a/CMake/MiscFunctions.cmake b/CMake/MiscFunctions.cmake index 1f0ed865..5fb3c4f7 100644 --- a/CMake/MiscFunctions.cmake +++ b/CMake/MiscFunctions.cmake @@ -77,3 +77,13 @@ function(add_warnings_to_targets targets) endif() endif() endfunction() + +# Adds flags required for reproducible build to the target +# Currently only supports GCC and Clang +function(add_build_reproducibility_settings target) +# Make the build reproducible on versions of g++ and clang that supports -ffile-prefix-map + if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 8) OR + ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 10)) + target_compile_options(${target} PRIVATE "-ffile-prefix-map=${CATCH_DIR}=.") + endif() +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2f3dd4ab..3dd11578 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -240,6 +240,7 @@ add_library(Catch2 STATIC ${BENCHMARK_HEADERS} ${BENCHMARK_SOURCES} ) +add_build_reproducibility_settings(Catch2) add_library(Catch2::Catch2 ALIAS Catch2) if (ANDROID) @@ -281,6 +282,7 @@ target_include_directories(Catch2 add_library(Catch2WithMain STATIC ${SOURCES_DIR}/internal/catch_main.cpp ) +add_build_reproducibility_settings(Catch2WithMain) add_library(Catch2::Catch2WithMain ALIAS Catch2WithMain) target_link_libraries(Catch2WithMain PUBLIC Catch2) set_target_properties(Catch2WithMain