diff --git a/.circleci/scripts/binary_populate_env.sh b/.circleci/scripts/binary_populate_env.sh index c574adbc8c5..007d89a7a21 100755 --- a/.circleci/scripts/binary_populate_env.sh +++ b/.circleci/scripts/binary_populate_env.sh @@ -168,6 +168,8 @@ export CIRCLE_SHA1="$CIRCLE_SHA1" export CIRCLE_PR_NUMBER="${CIRCLE_PR_NUMBER:-}" export CIRCLE_BRANCH="$CIRCLE_BRANCH" export CIRCLE_WORKFLOW_ID="$CIRCLE_WORKFLOW_ID" + +export USE_GOLD_LINKER=1 # =================== The above code will be executed inside Docker container =================== EOL diff --git a/CMakeLists.txt b/CMakeLists.txt index 46b5dd0b69e..cc9be90f2c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -343,6 +343,7 @@ option(USE_SYSTEM_FXDIV "Use system-provided fxdiv." OFF) option(USE_SYSTEM_BENCHMARK "Use system-provided google benchmark." OFF) option(USE_SYSTEM_ONNX "Use system-provided onnx." OFF) option(USE_SYSTEM_XNNPACK "Use system-provided xnnpack." OFF) +option(USE_GOLD_LINKER "Use ld.gold to link" OFF) if(USE_SYSTEM_LIBS) set(USE_SYSTEM_CPUINFO ON) set(USE_SYSTEM_SLEEF ON) @@ -684,6 +685,31 @@ if(NOT MSVC) # Suppress "The ABI for passing parameters with 64-byte alignment has changed in GCC 4.6" string(APPEND CMAKE_CXX_FLAGS " -Wno-psabi") endif() + + # Use ld.gold if available, fall back to ld.bfd (the default ld) if not + if(USE_GOLD_LINKER) + if(USE_DISTRIBUTED AND USE_MPI) + # Same issue as here with default MPI on Ubuntu + # https://bugs.launchpad.net/ubuntu/+source/deal.ii/+bug/1841577 + message(WARNING "Refusing to use gold when USE_MPI=1") + else() + execute_process( + COMMAND + "${CMAKE_C_COMPILER}" -fuse-ld=gold -Wl,--version + ERROR_QUIET + OUTPUT_VARIABLE LD_VERSION) + if(NOT "${LD_VERSION}" MATCHES "GNU gold") + message(WARNING "USE_GOLD_LINKER was set but ld.gold isn't available, turning it off") + set(USE_GOLD_LINKER OFF) + else() + message(STATUS "ld.gold is available, using it to link") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=gold") + endif() + endif() + endif() + string(APPEND CMAKE_CXX_FLAGS " -Wno-error=pedantic") string(APPEND CMAKE_CXX_FLAGS " -Wno-error=redundant-decls") string(APPEND CMAKE_CXX_FLAGS " -Wno-error=old-style-cast") diff --git a/cmake/Summary.cmake b/cmake/Summary.cmake index 3c9d4fb9318..4c402894a7a 100644 --- a/cmake/Summary.cmake +++ b/cmake/Summary.cmake @@ -19,6 +19,7 @@ function(caffe2_print_configuration_summary) message(STATUS " Compile definitions : ${tmp}") message(STATUS " CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}") message(STATUS " CMAKE_INSTALL_PREFIX : ${CMAKE_INSTALL_PREFIX}") + message(STATUS " USE_GOLD_LINKER : ${USE_GOLD_LINKER}") message(STATUS "") message(STATUS " TORCH_VERSION : ${TORCH_VERSION}")