<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>Ugh... That is most scary. Do you happen to know if this occurred with Gold, GNU ld or both? I had tested this patch on Darwin, FreeBSD and Linux with GNU ld. For that error to happen it means that the linker isn't handling -order_file as an invalid argument instead it is treating it as a "-o" argument.</div><div id="AppleMailSignature"><br></div><div id="AppleMailSignature">My gut reaction to fix this is probably to do a check for what linker you're using, and only enable this on linkers that are known to support the -order_file flag. It is really unfortunate that the capabilities check is passing even though the flag is being mis-interpreted.</div><div id="AppleMailSignature"><br>-Chris</div><div><br>On Feb 16, 2016, at 6:24 PM, Chandler Carruth <<a href="mailto:chandlerc@google.com">chandlerc@google.com</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">FYI, I had to revert this in r261054 because it caused Linux links to write the output to 'rder_file' in all cases. See that commit for some details, and I think several build bots hit this as well. Happy to chat to help figure out what to do long term.<div><br></div><div>-Chandler</div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Feb 12, 2016 at 1:41 PM Chris Bieneman via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: cbieneman<br>
Date: Fri Feb 12 15:36:55 2016<br>
New Revision: 260742<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=260742&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=260742&view=rev</a><br>
Log:<br>
[CMake] Improve the clang order-file generation workflow<br>
<br>
Summary:<br>
This commit re-lands r259862. The underlying cause of the build breakage was an incorrectly written capabilities test. In tools/Driver/CMakeLists.txt I was attempting to check if a linker flag worked, the test was passing it to the compiler, not the linker. CMake doesn't have a linker test, so we have a hand-rolled one.<br>
<br>
Original Patch Review: <a href="http://reviews.llvm.org/D16896" rel="noreferrer" target="_blank">http://reviews.llvm.org/D16896</a><br>
<br>
Original Summary:<br>
With this change generating clang order files using dtrace uses the following workflow:<br>
<br>
cmake <whatever options you want><br>
<br>
ninja generate-order-file<br>
<br>
ninja clang<br>
<br>
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.<br>
<br>
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.<br>
<br>
Reviewers: bogner<br>
<br>
Subscribers: cfe-commits<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D16999" rel="noreferrer" target="_blank">http://reviews.llvm.org/D16999</a><br>
<br>
Modified:<br>
    cfe/trunk/CMakeLists.txt<br>
    cfe/trunk/tools/driver/CMakeLists.txt<br>
    cfe/trunk/utils/perf-training/CMakeLists.txt<br>
<br>
Modified: cfe/trunk/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/CMakeLists.txt?rev=260742&r1=260741&r2=260742&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/CMakeLists.txt?rev=260742&r1=260741&r2=260742&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/CMakeLists.txt (original)<br>
+++ cfe/trunk/CMakeLists.txt Fri Feb 12 15:36:55 2016<br>
@@ -595,18 +595,24 @@ if( CLANG_INCLUDE_DOCS )<br>
   add_subdirectory(docs)<br>
 endif()<br>
<br>
-if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/clang.order")<br>
-  file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/clang.order")<br>
-endif()<br>
-<br>
-if(CLANG_ORDER_FILE STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/clang.order")<br>
+# this line is needed as a cleanup to ensure that any CMakeCaches with the old<br>
+# default value get updated to the new default.<br>
+if(CLANG_ORDER_FILE STREQUAL "")<br>
   unset(CLANG_ORDER_FILE CACHE)<br>
-  unset(CLANG_ORDER_FILE)<br>
 endif()<br>
<br>
-set(CLANG_ORDER_FILE "" CACHE FILEPATH<br>
+set(CLANG_ORDER_FILE ${CMAKE_CURRENT_BINARY_DIR}/clang.order CACHE FILEPATH<br>
   "Order file to use when compiling clang in order to improve startup time.")<br>
<br>
+if(CLANG_ORDER_FILE AND NOT EXISTS ${CLANG_ORDER_FILE})<br>
+  string(FIND CLANG_ORDER_FILE "${CMAKE_CURRENT_BINARY_DIR}" PATH_START)<br>
+  if(PATH_START EQUAL 0)<br>
+    file(WRITE ${CLANG_ORDER_FILE} "\n")<br>
+  else()<br>
+    message(FATAL_ERROR "Specified order file '${CLANG_ORDER_FILE}' does not exist.")<br>
+  endif()<br>
+endif()<br>
+<br>
 if (CLANG_BUILT_STANDALONE OR CMAKE_VERSION VERSION_EQUAL 3 OR<br>
     CMAKE_VERSION VERSION_GREATER 3)<br>
   # Generate a list of CMake library targets so that other CMake projects can<br>
<br>
Modified: cfe/trunk/tools/driver/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/CMakeLists.txt?rev=260742&r1=260741&r2=260742&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/CMakeLists.txt?rev=260742&r1=260741&r2=260742&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/tools/driver/CMakeLists.txt (original)<br>
+++ cfe/trunk/tools/driver/CMakeLists.txt Fri Feb 12 15:36:55 2016<br>
@@ -87,8 +87,24 @@ if (APPLE)<br>
   set(TOOL_INFO_BUILD_VERSION)<br>
 endif()<br>
<br>
-if(CLANG_ORDER_FILE AND EXISTS CLANG_ORDER_FILE)<br>
-  target_link_libraries(clang "-Wl,-order_file,${CLANG_ORDER_FILE}")<br>
+if(CLANG_ORDER_FILE)<br>
+  include(CMakePushCheckState)<br>
+<br>
+  function(check_linker_flag flag out_var)<br>
+    cmake_push_check_state()<br>
+    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")<br>
+    check_cxx_compiler_flag("" ${out_var})<br>
+    cmake_pop_check_state()<br>
+  endfunction()<br>
+<br>
+  # This is a test to ensure the actual order file works with the linker.<br>
+  check_linker_flag("-Wl,-order_file,${CLANG_ORDER_FILE}"<br>
+    LINKER_ORDER_FILE_WORKS)<br>
+<br>
+  if(LINKER_ORDER_FILE_WORKS)<br>
+    target_link_libraries(clang "-Wl,-order_file,${CLANG_ORDER_FILE}")<br>
+    set_target_properties(clang PROPERTIES LINK_DEPENDS ${CLANG_ORDER_FILE})<br>
+  endif()<br>
 endif()<br>
<br>
 if(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)<br>
<br>
Modified: cfe/trunk/utils/perf-training/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/perf-training/CMakeLists.txt?rev=260742&r1=260741&r2=260742&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/perf-training/CMakeLists.txt?rev=260742&r1=260741&r2=260742&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/utils/perf-training/CMakeLists.txt (original)<br>
+++ cfe/trunk/utils/perf-training/CMakeLists.txt Fri Feb 12 15:36:55 2016<br>
@@ -55,9 +55,8 @@ if(DTRACE)<br>
     COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py clean ${CMAKE_CURRENT_BINARY_DIR} dtrace<br>
     COMMENT "Clearing old dtrace data")<br>
<br>
-<br>
   add_custom_target(generate-order-file<br>
-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py gen-order-file --binary $<TARGET_FILE:clang> --output ${CMAKE_CURRENT_BINARY_DIR}/clang.order ${CMAKE_CURRENT_BINARY_DIR}<br>
+    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py gen-order-file --binary $<TARGET_FILE:clang> --output ${CLANG_ORDER_FILE} ${CMAKE_CURRENT_BINARY_DIR}<br>
     COMMENT "Generating order file"<br>
     DEPENDS generate-dtrace-logs)<br>
 endif()<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>
</div></blockquote></body></html>