summaryrefslogtreecommitdiffstats
path: root/clang/tools/driver
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2016-04-08 22:48:18 +0000
committerChris Bieneman <beanz@apple.com>2016-04-08 22:48:18 +0000
commit834a40b463af608684d102762e95b335ebedcfbb (patch)
tree890a423933df40bd886baa7a5d536bdbff992406 /clang/tools/driver
parent79c68d52b1731d0c58888de72eced88729105d02 (diff)
downloadbcm5719-llvm-834a40b463af608684d102762e95b335ebedcfbb.tar.gz
bcm5719-llvm-834a40b463af608684d102762e95b335ebedcfbb.zip
[Perf-Training] Reworked workflow improvements for order-file generation
This is re-landing r260742. I've reworked the conditionals so that it only hits when targeting Apple platforms with ld64. Original Summary: With this change generating clang order files using dtrace uses the following workflow: cmake <whatever options you want> ninja generate-order-file ninja clang This patch works by setting a default path to the order file (which can be overridden by the user). If the order file doesn't exist during configuration CMake will create an empty one. CMake then ties up the dependencies between the clang link job and the order file, and generate-order-file overwrites CLANG_ORDER_FILE with the new order file. llvm-svn: 265864
Diffstat (limited to 'clang/tools/driver')
-rw-r--r--clang/tools/driver/CMakeLists.txt21
1 files changed, 19 insertions, 2 deletions
diff --git a/clang/tools/driver/CMakeLists.txt b/clang/tools/driver/CMakeLists.txt
index 5f338853629..e03b3fa3951 100644
--- a/clang/tools/driver/CMakeLists.txt
+++ b/clang/tools/driver/CMakeLists.txt
@@ -87,8 +87,25 @@ if (APPLE)
set(TOOL_INFO_BUILD_VERSION)
endif()
-if(CLANG_ORDER_FILE AND EXISTS ${CLANG_ORDER_FILE})
- target_link_libraries(clang "-Wl,-order_file,${CLANG_ORDER_FILE}")
+# the linker -order_file flag is only supported by ld64
+if(LD64_EXECUTABLE AND CLANG_ORDER_FILE)
+ include(CMakePushCheckState)
+
+ function(check_linker_flag flag out_var)
+ cmake_push_check_state()
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")
+ check_cxx_compiler_flag("" ${out_var})
+ cmake_pop_check_state()
+ endfunction()
+
+ # This is a test to ensure the actual order file works with the linker.
+ check_linker_flag("-Wl,-order_file,${CLANG_ORDER_FILE}"
+ LINKER_ORDER_FILE_WORKS)
+
+ if(LINKER_ORDER_FILE_WORKS)
+ target_link_libraries(clang "-Wl,-order_file,${CLANG_ORDER_FILE}")
+ set_target_properties(clang PROPERTIES LINK_DEPENDS ${CLANG_ORDER_FILE})
+ endif()
endif()
if(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)
OpenPOWER on IntegriCloud