зеркало из https://github.com/mozilla/gecko-dev.git
116 строки
4.3 KiB
Diff
116 строки
4.3 KiB
Diff
[cmake] Changes to get Windows self-host working with PGO
|
|
|
|
Fixes quoting of profile arguments to work on Windows
|
|
Suppresses adding profile arguments to linker flags when using lld-link
|
|
Avoids -fprofile-instr-use being added to rc.exe flags
|
|
Removes duplicated adding of -fprofile-instr-use to linker flags (since
|
|
r355541)
|
|
Move handling LLVM_PROFDATA_FILE to HandleLLVMOptions.cmake
|
|
|
|
Differential Revision: https://reviews.llvm.org/D62063
|
|
|
|
llvm-svn: 372209
|
|
|
|
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
|
|
index b9a10685b99..73f8664cdcf 100644
|
|
--- a/llvm/CMakeLists.txt
|
|
+++ b/llvm/CMakeLists.txt
|
|
@@ -612,6 +612,9 @@ mark_as_advanced(LLVM_TARGET_TRIPLE_ENV)
|
|
set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR OFF CACHE BOOL
|
|
"Enable per-target runtimes directory")
|
|
|
|
+set(LLVM_PROFDATA_FILE "" CACHE FILEPATH
|
|
+ "Profiling data file to use when compiling in order to improve runtime performance.")
|
|
+
|
|
# All options referred to from HandleLLVMOptions have to be specified
|
|
# BEFORE this include, otherwise options will not be correctly set on
|
|
# first cmake run
|
|
@@ -873,17 +876,6 @@ endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
|
|
# use export_executable_symbols(target).
|
|
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
|
|
|
|
-set(LLVM_PROFDATA_FILE "" CACHE FILEPATH
|
|
- "Profiling data file to use when compiling in order to improve runtime performance.")
|
|
-
|
|
-if(LLVM_PROFDATA_FILE AND EXISTS ${LLVM_PROFDATA_FILE})
|
|
- if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
|
|
- add_definitions("-fprofile-instr-use=${LLVM_PROFDATA_FILE}")
|
|
- else()
|
|
- message(FATAL_ERROR "LLVM_PROFDATA_FILE can only be specified when compiling with clang")
|
|
- endif()
|
|
-endif()
|
|
-
|
|
include(AddLLVM)
|
|
include(TableGen)
|
|
|
|
diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake
|
|
index 4425eb91a5f..2e780d56254 100644
|
|
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
|
|
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
|
|
@@ -846,32 +846,48 @@ string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" uppercase_LLVM_BUILD_INSTRUMENTED)
|
|
|
|
if (LLVM_BUILD_INSTRUMENTED)
|
|
if (LLVM_ENABLE_IR_PGO OR uppercase_LLVM_BUILD_INSTRUMENTED STREQUAL "IR")
|
|
- append("-fprofile-generate='${LLVM_PROFILE_DATA_DIR}'"
|
|
+ append("-fprofile-generate=\"${LLVM_PROFILE_DATA_DIR}\""
|
|
CMAKE_CXX_FLAGS
|
|
- CMAKE_C_FLAGS
|
|
- CMAKE_EXE_LINKER_FLAGS
|
|
- CMAKE_SHARED_LINKER_FLAGS)
|
|
+ CMAKE_C_FLAGS)
|
|
+ if(NOT LINKER_IS_LLD_LINK)
|
|
+ append("-fprofile-generate=\"${LLVM_PROFILE_DATA_DIR}\""
|
|
+ CMAKE_EXE_LINKER_FLAGS
|
|
+ CMAKE_SHARED_LINKER_FLAGS)
|
|
+ endif()
|
|
elseif(uppercase_LLVM_BUILD_INSTRUMENTED STREQUAL "CSIR")
|
|
- append("-fcs-profile-generate='${LLVM_CSPROFILE_DATA_DIR}'"
|
|
+ append("-fcs-profile-generate=\"${LLVM_CSPROFILE_DATA_DIR}\""
|
|
CMAKE_CXX_FLAGS
|
|
- CMAKE_C_FLAGS
|
|
- CMAKE_EXE_LINKER_FLAGS
|
|
- CMAKE_SHARED_LINKER_FLAGS)
|
|
+ CMAKE_C_FLAGS)
|
|
+ if(NOT LINKER_IS_LLD_LINK)
|
|
+ append("-fcs-profile-generate=\"${LLVM_CSPROFILE_DATA_DIR}\""
|
|
+ CMAKE_EXE_LINKER_FLAGS
|
|
+ CMAKE_SHARED_LINKER_FLAGS)
|
|
+ endif()
|
|
else()
|
|
- append("-fprofile-instr-generate='${LLVM_PROFILE_FILE_PATTERN}'"
|
|
+ append("-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\""
|
|
CMAKE_CXX_FLAGS
|
|
- CMAKE_C_FLAGS
|
|
- CMAKE_EXE_LINKER_FLAGS
|
|
- CMAKE_SHARED_LINKER_FLAGS)
|
|
+ CMAKE_C_FLAGS)
|
|
+ if(NOT LINKER_IS_LLD_LINK)
|
|
+ append("-fprofile-instr-generate=\"${LLVM_PROFILE_FILE_PATTERN}\""
|
|
+ CMAKE_EXE_LINKER_FLAGS
|
|
+ CMAKE_SHARED_LINKER_FLAGS)
|
|
+ endif()
|
|
endif()
|
|
endif()
|
|
|
|
-# Need to pass -fprofile-instr-use to linker for context-sensitive PGO
|
|
-# compilation.
|
|
if(LLVM_PROFDATA_FILE AND EXISTS ${LLVM_PROFDATA_FILE})
|
|
- append("-fprofile-instr-use='${LLVM_PROFDATA_FILE}'"
|
|
- CMAKE_EXE_LINKER_FLAGS
|
|
- CMAKE_SHARED_LINKER_FLAGS)
|
|
+ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" )
|
|
+ append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\""
|
|
+ CMAKE_CXX_FLAGS
|
|
+ CMAKE_C_FLAGS)
|
|
+ if(NOT LINKER_IS_LLD_LINK)
|
|
+ append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\""
|
|
+ CMAKE_EXE_LINKER_FLAGS
|
|
+ CMAKE_SHARED_LINKER_FLAGS)
|
|
+ endif()
|
|
+ else()
|
|
+ message(FATAL_ERROR "LLVM_PROFDATA_FILE can only be specified when compiling with clang")
|
|
+ endif()
|
|
endif()
|
|
|
|
option(LLVM_BUILD_INSTRUMENTED_COVERAGE "Build LLVM and tools with Code Coverage instrumentation" Off)
|