[PATCH] D47834: [CMake] Passthrough additional flags to custom libcxx CMake build

Petr Hosek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 6 10:17:20 PDT 2018


phosek created this revision.
phosek added reviewers: morehouse, vitalybuka.
Herald added subscribers: Sanitizers, llvm-commits, mgorny.
Herald added a reviewer: EricWF.

This is needed when we're cross-compiling compiler-rt.


Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D47834

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


Index: compiler-rt/cmake/Modules/AddCompilerRT.cmake
===================================================================
--- compiler-rt/cmake/Modules/AddCompilerRT.cmake
+++ compiler-rt/cmake/Modules/AddCompilerRT.cmake
@@ -474,11 +474,6 @@
   endif()
 
   cmake_parse_arguments(LIBCXX "USE_TOOLCHAIN" "" "DEPS;CFLAGS;CMAKE_ARGS" ${ARGN})
-  foreach(flag ${LIBCXX_CFLAGS})
-    set(flagstr "${flagstr} ${flag}")
-  endforeach()
-  set(LIBCXX_C_FLAGS ${flagstr})
-  set(LIBCXX_CXX_FLAGS ${flagstr})
 
   if(LIBCXX_USE_TOOLCHAIN)
     set(compiler_args -DCMAKE_C_COMPILER=${COMPILER_RT_TEST_COMPILER}
@@ -492,6 +487,43 @@
                       -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER})
   endif()
 
+  set(PASSTHROUGH_VARIABLES
+    CMAKE_C_COMPILER_TARGET
+    CMAKE_CXX_COMPILER_TARGET
+    CMAKE_SHARED_LINKER_FLAGS
+    CMAKE_MODULE_LINKER_FLAGS
+    CMAKE_EXE_LINKER_FLAGS
+    CMAKE_INSTALL_PREFIX
+    CMAKE_MAKE_PROGRAM
+    CMAKE_LINKER
+    CMAKE_AR
+    CMAKE_RANLIB
+    CMAKE_NM
+    CMAKE_OBJCOPY
+    CMAKE_OBJDUMP
+    CMAKE_STRIP
+    CMAKE_SYSROOT
+    CMAKE_SYSTEM_NAME)
+  foreach(variable ${PASSTHROUGH_VARIABLES})
+    if(${variable})
+      list(APPEND CMAKE_PASSTHROUGH_VARIABLES -D${variable}=${${variable}})
+    endif()
+  endforeach()
+
+  set(PASSTHROUGH_PREFIXES CLANG_DEFAULT_)
+  get_cmake_property(variable_names VARIABLES)
+  foreach(passthrough ${PASSTHROUGH_PREFIXES})
+    foreach(variable ${variable_names})
+      if(variable MATCHES "^${passthrough}")
+        string(REPLACE ";" "|" value "${${variable}}")
+        list(APPEND CMAKE_PASSTHROUGH_VARIABLES -D${variable}=${value})
+      endif()
+    endforeach()
+  endforeach()
+
+  set(LIBCXX_C_FLAGS "${CMAKE_C_FLAGS} ${LIBCXX_CFLAGS}")
+  set(LIBCXX_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LIBCXX_CFLAGS}")
+
   set(STAMP_DIR ${prefix}-stamps/)
   set(BINARY_DIR ${prefix}-bins/)
 
@@ -514,23 +546,17 @@
   add_custom_target(${name}-clobber
     DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp)
 
-  if(CMAKE_SYSROOT)
-    set(sysroot_arg -DCMAKE_SYSROOT=${CMAKE_SYSROOT})
-  endif()
-
   ExternalProject_Add(${name}
     DEPENDS ${name}-clobber ${LIBCXX_DEPS}
     PREFIX ${prefix}
     SOURCE_DIR ${COMPILER_RT_LIBCXX_PATH}
     STAMP_DIR ${STAMP_DIR}
     BINARY_DIR ${BINARY_DIR}
-    CMAKE_ARGS -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
+    CMAKE_ARGS ${CMAKE_PASSTHROUGH_VARIABLES}
                ${compiler_args}
-               ${sysroot_arg}
-               -DCMAKE_C_FLAGS=${LIBCXX_C_FLAGS}
-               -DCMAKE_CXX_FLAGS=${LIBCXX_CXX_FLAGS}
+               -DCMAKE_C_FLAGS=${LIBCXX_C_CFLAGS}
+               -DCMAKE_CXX_FLAGS=${LIBCXX_CXX_CFLAGS}
                -DCMAKE_BUILD_TYPE=Release
-               -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
                -DLLVM_PATH=${LLVM_MAIN_SRC_DIR}
                -DLLVM_BINARY_DIR=${prefix}
                -DLLVM_LIBRARY_OUTPUT_INTDIR=${prefix}/lib
@@ -543,6 +569,7 @@
     USES_TERMINAL_BUILD 1
     USES_TERMINAL_INSTALL 1
     EXCLUDE_FROM_ALL TRUE
+    LIST_SEPARATOR |
     )
 
   if (CMAKE_GENERATOR MATCHES "Make")


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47834.150159.patch
Type: text/x-patch
Size: 3094 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180606/276d2c84/attachment.bin>


More information about the llvm-commits mailing list