Skip to content
Snippets Groups Projects
Commit c84c62c5 authored by Amy Kwan's avatar Amy Kwan
Browse files

[CMake] Fix LLVM build non-determinism on RHEL

On RHEL, the OS tooling (ar, ranlib) is not deterministic by default.
Therefore, we cannot get bit-for-bit identical builds.

The goal of this patch is that it adds the flags required to force determinism.

Differential Revision: https://reviews.llvm.org/D64817
parent 29f6f9b2
No related branches found
No related tags found
No related merge requests found
...@@ -135,6 +135,28 @@ if(APPLE) ...@@ -135,6 +135,28 @@ if(APPLE)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-flat_namespace -Wl,-undefined -Wl,suppress") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-flat_namespace -Wl,-undefined -Wl,suppress")
endif() endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
# RHEL7 has ar and ranlib being non-deterministic by default. The D flag forces determinism,
# however only GNU version of ar and ranlib (2.27) have this option.
# RHEL DTS7 is also affected by this, which uses GNU binutils 2.28
execute_process(COMMAND ${CMAKE_AR} rD t.a
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE AR_RESULT OUTPUT_VARIABLE RANLIB_OUTPUT)
if(${AR_RESULT} EQUAL 0)
execute_process(COMMAND ${CMAKE_RANLIB} -D t.a
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE RANLIB_RESULT OUTPUT_VARIABLE RANLIB_OUTPUT)
if(${RANLIB_RESULT} EQUAL 0)
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Dqc <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> Dq <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -D <TARGET>")
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Dqc <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> Dq <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -D <TARGET>")
endif()
file(REMOVE ${CMAKE_BINARY_DIR}/t.a)
endif()
endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") if(${CMAKE_SYSTEM_NAME} MATCHES "AIX")
if(NOT LLVM_BUILD_32_BITS) if(NOT LLVM_BUILD_32_BITS)
if (CMAKE_CXX_COMPILER_ID MATCHES "XL") if (CMAKE_CXX_COMPILER_ID MATCHES "XL")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment