[PATCH] D71613: [cmake] Use 'llvm-config --components' to determine components

Michał Górny via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 17 08:53:10 PST 2019


mgorny created this revision.
mgorny added reviewers: dberris, justinkb.
Herald added projects: LLVM, Sanitizers.
Herald added subscribers: llvm-commits, Sanitizers.

Use 'llvm-config --components' to determine available components rather
than relying on '--libs' to fail for non-available.  This should fix
false positives when dylib is used.

Technically, it's a bug in llvm-config for '--libs' to return the dylib
for libraries that are not included in it.  However, fixing this
triggers further bugs and it does not make much sense to put more effort
into this deprecated tool.


Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D71613

Files:
  compiler-rt/cmake/Modules/CompilerRTUtils.cmake


Index: compiler-rt/cmake/Modules/CompilerRTUtils.cmake
===================================================================
--- compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -236,41 +236,59 @@
 
     # Detect if we have the LLVMXRay and TestingSupport library installed and
     # available from llvm-config.
-    execute_process(
-      COMMAND ${LLVM_CONFIG_PATH} "--ldflags" "--libs" "xray"
-      RESULT_VARIABLE HAD_ERROR
-      OUTPUT_VARIABLE CONFIG_OUTPUT
-      ERROR_QUIET)
-    if (HAD_ERROR)
-      message(WARNING "llvm-config finding xray failed with status ${HAD_ERROR}")
-      set(COMPILER_RT_HAS_LLVMXRAY FALSE)
-    else()
-      string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
-      list(GET CONFIG_OUTPUT 0 LDFLAGS)
-      list(GET CONFIG_OUTPUT 1 LIBLIST)
-      set(LLVM_XRAY_LDFLAGS ${LDFLAGS} CACHE STRING "Linker flags for LLVMXRay library")
-      set(LLVM_XRAY_LIBLIST ${LIBLIST} CACHE STRING "Library list for LLVMXRay")
-      set(COMPILER_RT_HAS_LLVMXRAY TRUE)
-    endif()
-
+    set(COMPILER_RT_HAS_LLVMXRAY FALSE)
     set(COMPILER_RT_HAS_LLVMTESTINGSUPPORT FALSE)
+
     execute_process(
-      COMMAND ${LLVM_CONFIG_PATH} "--ldflags" "--libs" "testingsupport"
+      COMMAND ${LLVM_CONFIG_PATH} "--components"
       RESULT_VARIABLE HAD_ERROR
       OUTPUT_VARIABLE CONFIG_OUTPUT
       ERROR_QUIET)
     if (HAD_ERROR)
-      message(WARNING "llvm-config finding testingsupport failed with status ${HAD_ERROR}")
+      message(WARNING "llvm-config querying components failed with status ${HAD_ERROR}")
     else()
-      string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
-      list(GET CONFIG_OUTPUT 0 LDFLAGS)
-      list(GET CONFIG_OUTPUT 1 LIBLIST)
-      if (LIBLIST STREQUAL "")
-        message(WARNING "testingsupport library not installed, some tests will be skipped")
-      else()
-        set(LLVM_TESTINGSUPPORT_LDFLAGS ${LDFLAGS} CACHE STRING "Linker flags for LLVMTestingSupport library")
-        set(LLVM_TESTINGSUPPORT_LIBLIST ${LIBLIST} CACHE STRING "Library list for LLVMTestingSupport")
-        set(COMPILER_RT_HAS_LLVMTESTINGSUPPORT TRUE)
+      string(REGEX REPLACE "[ \r\n\t]+" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
+
+      list(FIND CONFIG_OUTPUT xray FOUND_XRAY)
+      if (NOT FOUND_XRAY EQUAL -1)
+        execute_process(
+          COMMAND ${LLVM_CONFIG_PATH} "--ldflags" "--libs" "xray"
+          RESULT_VARIABLE HAD_ERROR
+          OUTPUT_VARIABLE CONFIG_OUTPUT
+          ERROR_QUIET)
+        if (HAD_ERROR)
+          message(FATAL_ERROR "llvm-config finding xray failed with status ${HAD_ERROR}")
+        else()
+          string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
+          list(GET CONFIG_OUTPUT 0 LDFLAGS)
+          list(GET CONFIG_OUTPUT 1 LIBLIST)
+          set(LLVM_XRAY_LDFLAGS ${LDFLAGS} CACHE STRING "Linker flags for LLVMXRay library")
+          set(LLVM_XRAY_LIBLIST ${LIBLIST} CACHE STRING "Library list for LLVMXRay")
+          set(COMPILER_RT_HAS_LLVMXRAY TRUE)
+        endif()
+      endif()
+
+      list(FIND CONFIG_OUTPUT testingsupport FOUND_TESTINGSUPPORT)
+      if (NOT FOUND_TESTINGSUPPORT EQUAL -1)
+        execute_process(
+          COMMAND ${LLVM_CONFIG_PATH} "--ldflags" "--libs" "testingsupport"
+          RESULT_VARIABLE HAD_ERROR
+          OUTPUT_VARIABLE CONFIG_OUTPUT
+          ERROR_QUIET)
+        if (HAD_ERROR)
+          message(WARNING "llvm-config finding testingsupport failed with status ${HAD_ERROR}")
+        else()
+          string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
+          list(GET CONFIG_OUTPUT 0 LDFLAGS)
+          list(GET CONFIG_OUTPUT 1 LIBLIST)
+          if (LIBLIST STREQUAL "")
+            message(WARNING "testingsupport library not installed, some tests will be skipped")
+          else()
+            set(LLVM_TESTINGSUPPORT_LDFLAGS ${LDFLAGS} CACHE STRING "Linker flags for LLVMTestingSupport library")
+            set(LLVM_TESTINGSUPPORT_LIBLIST ${LIBLIST} CACHE STRING "Library list for LLVMTestingSupport")
+            set(COMPILER_RT_HAS_LLVMTESTINGSUPPORT TRUE)
+          endif()
+        endif()
       endif()
     endif()
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71613.234313.patch
Type: text/x-patch
Size: 4280 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191217/1606da7f/attachment.bin>


More information about the llvm-commits mailing list