[PATCH] D50548: [CMake] Don't parse target triple except for arch

Petr Hosek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 10 12:14:34 PDT 2018


phosek updated this revision to Diff 160167.
phosek marked an inline comment as done.

Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D50548

Files:
  compiler-rt/CMakeLists.txt
  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
@@ -88,6 +88,26 @@
   set(${input_list} "${replaced_list}" PARENT_SCOPE)
 endfunction()
 
+# TODO: CMake 3.12 has list(SUBLIST ...) which implements the same
+# interface, so once LLVM moves past that version as the minimum
+# requirement, this can be replaced with the builtin one.
+function(list_sublist list begin length variable)
+  set(sublist)
+  list(LENGTH ${list} list_length)
+  if(NOT ${length} EQUAL -1)
+    math(EXPR end "${begin}+${length}")
+  else()
+    math(EXPR end "${list_length}-1")
+  endif()
+  foreach(index RANGE ${begin} ${end})
+    if(index LESS list_length)
+      list(GET ${list} ${index} component)
+      list(APPEND sublist ${component})
+    endif()
+  endforeach()
+  set(${variable} "${sublist}" PARENT_SCOPE)
+endfunction()
+
 # Takes ${ARGN} and puts only supported architectures in @out_var list.
 function(filter_available_targets out_var)
   set(archs ${${out_var}})
@@ -276,11 +296,6 @@
 
   string(REPLACE "-" ";" TARGET_TRIPLE_LIST ${COMPILER_RT_DEFAULT_TARGET_TRIPLE})
   list(GET TARGET_TRIPLE_LIST 0 COMPILER_RT_DEFAULT_TARGET_ARCH)
-  list(GET TARGET_TRIPLE_LIST 1 COMPILER_RT_DEFAULT_TARGET_OS)
-  list(LENGTH TARGET_TRIPLE_LIST TARGET_TRIPLE_LIST_LENGTH)
-  if(TARGET_TRIPLE_LIST_LENGTH GREATER 2)
-    list(GET TARGET_TRIPLE_LIST 2 COMPILER_RT_DEFAULT_TARGET_ABI)
-  endif()
   # Determine if test target triple is specified explicitly, and doesn't match the
   # default.
   if(NOT COMPILER_RT_DEFAULT_TARGET_TRIPLE STREQUAL TARGET_TRIPLE)
@@ -320,13 +335,14 @@
 endfunction()
 
 function(get_compiler_rt_target arch variable)
+  string(REPLACE "-" ";" triple_list ${COMPILER_RT_DEFAULT_TARGET_TRIPLE})
+  list_sublist(triple_list 1 -1 triple_sublist)
+  string(REPLACE ";" "-" os_abi "${triple_sublist}")
+
   if(ANDROID AND ${arch} STREQUAL "i386")
-    set(target "i686${COMPILER_RT_OS_SUFFIX}-${COMPILER_RT_DEFAULT_TARGET_OS}")
+    set(target "i686${COMPILER_RT_OS_SUFFIX}-${os_abi}")
   else()
-    set(target "${arch}-${COMPILER_RT_DEFAULT_TARGET_OS}")
-  endif()
-  if(COMPILER_RT_DEFAULT_TARGET_ABI)
-    set(target "${target}-${COMPILER_RT_DEFAULT_TARGET_ABI}")
+    set(target "${arch}-${os_abi}")
   endif()
   set(${variable} ${target} PARENT_SCOPE)
 endfunction()
Index: compiler-rt/CMakeLists.txt
===================================================================
--- compiler-rt/CMakeLists.txt
+++ compiler-rt/CMakeLists.txt
@@ -89,12 +89,12 @@
 endif()
 
 construct_compiler_rt_default_triple()
-if ("${COMPILER_RT_DEFAULT_TARGET_ABI}" MATCHES "hf$")
+if ("${COMPILER_RT_DEFAULT_TARGET_TRIPLE}" MATCHES ".*hf$")
   if (${COMPILER_RT_DEFAULT_TARGET_ARCH} MATCHES "^arm")
     set(COMPILER_RT_DEFAULT_TARGET_ARCH "armhf")
   endif()
 endif()
-if ("${COMPILER_RT_DEFAULT_TARGET_ABI}" MATCHES "^android")
+if ("${COMPILER_RT_DEFAULT_TARGET_TRIPLE}" MATCHES ".*android.*")
   set(ANDROID 1)
 endif()
 pythonize_bool(ANDROID)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50548.160167.patch
Type: text/x-patch
Size: 3120 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180810/054ba17b/attachment.bin>


More information about the llvm-commits mailing list