blob: e027c13f07e0631f533a66d753a26dff8c40c1a1 [file] [log] [blame]
Chris Bieneman788c95c2015-11-11 16:14:03 +00001include(ExternalProject)
2
3# llvm_ExternalProject_BuildCmd(out_var target)
4# Utility function for constructing command lines for external project targets
Chris Bieneman79c68d52016-04-08 22:46:04 +00005function(llvm_ExternalProject_BuildCmd out_var target bin_dir)
Chris Bieneman76864f92016-09-06 20:27:07 +00006 cmake_parse_arguments(ARG "" "CONFIGURATION" "" ${ARGN})
7 if(NOT ARG_CONFIGURATION)
Shoaib Meenaiff852742019-03-30 01:35:01 +00008 set(ARG_CONFIGURATION "$<CONFIG>")
Chris Bieneman76864f92016-09-06 20:27:07 +00009 endif()
Chris Bieneman788c95c2015-11-11 16:14:03 +000010 if (CMAKE_GENERATOR MATCHES "Make")
11 # Use special command for Makefiles to support parallelism.
Chris Bieneman76864f92016-09-06 20:27:07 +000012 set(${out_var} "$(MAKE)" "-C" "${bin_dir}" "${target}" PARENT_SCOPE)
Chris Bieneman788c95c2015-11-11 16:14:03 +000013 else()
Chris Bieneman79c68d52016-04-08 22:46:04 +000014 set(${out_var} ${CMAKE_COMMAND} --build ${bin_dir} --target ${target}
Chris Bieneman76864f92016-09-06 20:27:07 +000015 --config ${ARG_CONFIGURATION} PARENT_SCOPE)
Chris Bieneman788c95c2015-11-11 16:14:03 +000016 endif()
17endfunction()
18
19# llvm_ExternalProject_Add(name source_dir ...
20# USE_TOOLCHAIN
21# Use just-built tools (see TOOLCHAIN_TOOLS)
22# EXCLUDE_FROM_ALL
23# Exclude this project from the all target
24# NO_INSTALL
25# Don't generate install targets for this project
Chris Bieneman64adae52016-06-23 22:07:21 +000026# ALWAYS_CLEAN
27# Always clean the sub-project before building
Chris Bieneman788c95c2015-11-11 16:14:03 +000028# CMAKE_ARGS arguments...
29# Optional cmake arguments to pass when configuring the project
30# TOOLCHAIN_TOOLS targets...
31# Targets for toolchain tools (defaults to clang;lld)
32# DEPENDS targets...
33# Targets that this project depends on
34# EXTRA_TARGETS targets...
35# Extra targets in the subproject to generate targets for
Chris Bieneman64adae52016-06-23 22:07:21 +000036# PASSTHROUGH_PREFIXES prefix...
37# Extra variable prefixes (name is always included) to pass down
Petr Hosekaac819b2019-03-09 01:26:55 +000038# STRIP_TOOL path
39# Use provided strip tool instead of the default one.
Chris Bieneman788c95c2015-11-11 16:14:03 +000040# )
41function(llvm_ExternalProject_Add name source_dir)
Chris Bieneman64adae52016-06-23 22:07:21 +000042 cmake_parse_arguments(ARG
43 "USE_TOOLCHAIN;EXCLUDE_FROM_ALL;NO_INSTALL;ALWAYS_CLEAN"
Chris Bieneman788c95c2015-11-11 16:14:03 +000044 "SOURCE_DIR"
Petr Hosekaac819b2019-03-09 01:26:55 +000045 "CMAKE_ARGS;TOOLCHAIN_TOOLS;RUNTIME_LIBRARIES;DEPENDS;EXTRA_TARGETS;PASSTHROUGH_PREFIXES;STRIP_TOOL"
Chris Bieneman64adae52016-06-23 22:07:21 +000046 ${ARGN})
Chris Bieneman788c95c2015-11-11 16:14:03 +000047 canonicalize_tool_name(${name} nameCanon)
48 if(NOT ARG_TOOLCHAIN_TOOLS)
49 set(ARG_TOOLCHAIN_TOOLS clang lld)
Petr Hosek024a17b2016-12-12 23:15:10 +000050 if(NOT APPLE AND NOT WIN32)
Xin-Xin Wangf5bbe382019-12-16 15:46:02 -080051 list(APPEND ARG_TOOLCHAIN_TOOLS llvm-ar llvm-lipo llvm-ranlib llvm-nm llvm-objcopy llvm-objdump llvm-strip)
Petr Hosek024a17b2016-12-12 23:15:10 +000052 endif()
Chris Bieneman788c95c2015-11-11 16:14:03 +000053 endif()
54 foreach(tool ${ARG_TOOLCHAIN_TOOLS})
55 if(TARGET ${tool})
56 list(APPEND TOOLCHAIN_TOOLS ${tool})
57 list(APPEND TOOLCHAIN_BINS $<TARGET_FILE:${tool}>)
58 endif()
59 endforeach()
60
61 if(NOT ARG_RUNTIME_LIBRARIES)
62 set(ARG_RUNTIME_LIBRARIES compiler-rt libcxx)
63 endif()
64 foreach(lib ${ARG_RUNTIME_LIBRARIES})
65 if(TARGET ${lib})
66 list(APPEND RUNTIME_LIBRARIES ${lib})
67 endif()
68 endforeach()
69
Chris Bieneman64adae52016-06-23 22:07:21 +000070 if(ARG_ALWAYS_CLEAN)
71 set(always_clean clean)
72 endif()
73
Chris Bieneman788c95c2015-11-11 16:14:03 +000074 list(FIND TOOLCHAIN_TOOLS clang FOUND_CLANG)
75 if(FOUND_CLANG GREATER -1)
76 set(CLANG_IN_TOOLCHAIN On)
77 endif()
78
79 if(RUNTIME_LIBRARIES AND CLANG_IN_TOOLCHAIN)
80 list(APPEND TOOLCHAIN_BINS ${RUNTIME_LIBRARIES})
81 endif()
82
Chris Bieneman788c95c2015-11-11 16:14:03 +000083 set(STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/${name}-stamps/)
84 set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${name}-bins/)
85
86 add_custom_target(${name}-clear
87 COMMAND ${CMAKE_COMMAND} -E remove_directory ${BINARY_DIR}
88 COMMAND ${CMAKE_COMMAND} -E remove_directory ${STAMP_DIR}
89 COMMENT "Clobbering ${name} build and stamp directories"
Chris Bienemandf04e792016-06-08 22:19:25 +000090 USES_TERMINAL
Chris Bieneman788c95c2015-11-11 16:14:03 +000091 )
92
Chris Bieneman64adae52016-06-23 22:07:21 +000093 # Find all variables that start with a prefix and propagate them through
Chris Bieneman788c95c2015-11-11 16:14:03 +000094 get_cmake_property(variableNames VARIABLES)
Chris Bieneman64adae52016-06-23 22:07:21 +000095
96 list(APPEND ARG_PASSTHROUGH_PREFIXES ${nameCanon})
97 foreach(prefix ${ARG_PASSTHROUGH_PREFIXES})
98 foreach(variableName ${variableNames})
99 if(variableName MATCHES "^${prefix}")
Petr Hosek6851c0c2017-12-05 00:15:18 +0000100 string(REPLACE ";" "|" value "${${variableName}}")
Chris Bieneman64adae52016-06-23 22:07:21 +0000101 list(APPEND PASSTHROUGH_VARIABLES
102 -D${variableName}=${value})
103 endif()
104 endforeach()
Chris Bieneman788c95c2015-11-11 16:14:03 +0000105 endforeach()
106
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000107 foreach(arg ${ARG_CMAKE_ARGS})
108 if(arg MATCHES "^-DCMAKE_SYSTEM_NAME=")
109 string(REGEX REPLACE "^-DCMAKE_SYSTEM_NAME=(.*)$" "\\1" _cmake_system_name "${arg}")
110 endif()
111 endforeach()
112
Petr Hosekc046a042018-01-08 23:50:59 +0000113 if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING)
Chris Bieneman788c95c2015-11-11 16:14:03 +0000114 if(CLANG_IN_TOOLCHAIN)
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000115 if(_cmake_system_name STREQUAL Windows)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000116 set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}
Petr Hosek56b7f592020-01-27 19:14:32 -0800117 -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}
118 -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000119 else()
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000120 set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX}
Petr Hosek56b7f592020-01-27 19:14:32 -0800121 -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX}
122 -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX})
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000123 endif()
Chris Bieneman788c95c2015-11-11 16:14:03 +0000124 endif()
Petr Hosek0acc0242018-06-06 21:43:37 +0000125 if(lld IN_LIST TOOLCHAIN_TOOLS)
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000126 if(_cmake_system_name STREQUAL Windows)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000127 list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/lld-link${CMAKE_EXECUTABLE_SUFFIX})
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000128 else()
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000129 list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/ld.lld${CMAKE_EXECUTABLE_SUFFIX})
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000130 endif()
Petr Hosek0acc0242018-06-06 21:43:37 +0000131 endif()
Petr Hosek024a17b2016-12-12 23:15:10 +0000132 if(llvm-ar IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000133 list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek024a17b2016-12-12 23:15:10 +0000134 endif()
Xin-Xin Wangf5bbe382019-12-16 15:46:02 -0800135 if(llvm-lipo IN_LIST TOOLCHAIN_TOOLS)
136 list(APPEND compiler_args -DCMAKE_LIPO=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-lipo${CMAKE_EXECUTABLE_SUFFIX})
137 endif()
Petr Hosek024a17b2016-12-12 23:15:10 +0000138 if(llvm-ranlib IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000139 list(APPEND compiler_args -DCMAKE_RANLIB=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ranlib${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek024a17b2016-12-12 23:15:10 +0000140 endif()
Petr Hosek0acc0242018-06-06 21:43:37 +0000141 if(llvm-nm IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000142 list(APPEND compiler_args -DCMAKE_NM=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-nm${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek0acc0242018-06-06 21:43:37 +0000143 endif()
144 if(llvm-objdump IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000145 list(APPEND compiler_args -DCMAKE_OBJDUMP=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-objdump${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek0acc0242018-06-06 21:43:37 +0000146 endif()
147 if(llvm-objcopy IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000148 list(APPEND compiler_args -DCMAKE_OBJCOPY=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-objcopy${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek0acc0242018-06-06 21:43:37 +0000149 endif()
Petr Hosekaac819b2019-03-09 01:26:55 +0000150 if(llvm-strip IN_LIST TOOLCHAIN_TOOLS AND NOT ARG_STRIP_TOOL)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000151 list(APPEND compiler_args -DCMAKE_STRIP=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-strip${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek0acc0242018-06-06 21:43:37 +0000152 endif()
Chris Bieneman788c95c2015-11-11 16:14:03 +0000153 list(APPEND ARG_DEPENDS ${TOOLCHAIN_TOOLS})
154 endif()
155
Petr Hosekaac819b2019-03-09 01:26:55 +0000156 if(ARG_STRIP_TOOL)
157 list(APPEND compiler_args -DCMAKE_STRIP=${ARG_STRIP_TOOL})
158 endif()
159
Chris Bieneman788c95c2015-11-11 16:14:03 +0000160 add_custom_command(
161 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp
162 DEPENDS ${ARG_DEPENDS}
163 COMMAND ${CMAKE_COMMAND} -E touch ${BINARY_DIR}/CMakeCache.txt
164 COMMAND ${CMAKE_COMMAND} -E touch ${STAMP_DIR}/${name}-mkdir
165 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp
166 COMMENT "Clobbering bootstrap build and stamp directories"
167 )
168
169 add_custom_target(${name}-clobber
170 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp)
171
172 if(ARG_EXCLUDE_FROM_ALL)
Chris Bieneman2b5a5452016-06-09 22:41:36 +0000173 set(exclude EXCLUDE_FROM_ALL 1)
Chris Bieneman788c95c2015-11-11 16:14:03 +0000174 endif()
175
Shoaib Meenai038fd002017-12-08 19:42:47 +0000176 if(CMAKE_SYSROOT)
177 set(sysroot_arg -DCMAKE_SYSROOT=${CMAKE_SYSROOT})
178 endif()
179
Petr Hosekc046a042018-01-08 23:50:59 +0000180 if(CMAKE_CROSSCOMPILING)
181 set(compiler_args -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
182 -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
Petr Hosek0acc0242018-06-06 21:43:37 +0000183 -DCMAKE_LINKER=${CMAKE_LINKER}
Petr Hosekc046a042018-01-08 23:50:59 +0000184 -DCMAKE_AR=${CMAKE_AR}
Petr Hosek0acc0242018-06-06 21:43:37 +0000185 -DCMAKE_RANLIB=${CMAKE_RANLIB}
186 -DCMAKE_NM=${CMAKE_NM}
187 -DCMAKE_OBJCOPY=${CMAKE_OBJCOPY}
188 -DCMAKE_OBJDUMP=${CMAKE_OBJDUMP}
189 -DCMAKE_STRIP=${CMAKE_STRIP})
Don Hinton3c59aec2018-01-21 00:29:00 +0000190 set(llvm_config_path ${LLVM_CONFIG_PATH})
Petr Hosekf8e27b32018-11-16 04:46:48 +0000191
192 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
193 string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION
194 ${PACKAGE_VERSION})
195 set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}")
196 set(flag_types ASM C CXX MODULE_LINKER SHARED_LINKER EXE_LINKER)
197 foreach(type ${flag_types})
198 set(${type}_flag -DCMAKE_${type}_FLAGS=-resource-dir=${resource_dir})
199 endforeach()
200 string(REPLACE ";" "|" flag_string "${flag_types}")
201 foreach(arg ${ARG_CMAKE_ARGS})
202 if(arg MATCHES "^-DCMAKE_(${flag_string})_FLAGS")
203 foreach(type ${flag_types})
204 if(arg MATCHES "^-DCMAKE_${type}_FLAGS")
205 string(REGEX REPLACE "^-DCMAKE_${type}_FLAGS=(.*)$" "\\1" flag_value "${arg}")
206 set(${type}_flag "${${type}_flag} ${flag_value}")
207 endif()
208 endforeach()
209 else()
210 list(APPEND cmake_args ${arg})
211 endif()
212 endforeach()
213 foreach(type ${flag_types})
214 list(APPEND cmake_args ${${type}_flag})
215 endforeach()
216 endif()
Petr Hosekc046a042018-01-08 23:50:59 +0000217 else()
218 set(llvm_config_path "$<TARGET_FILE:llvm-config>")
Petr Hosekf8e27b32018-11-16 04:46:48 +0000219 set(cmake_args ${ARG_CMAKE_ARGS})
Petr Hosekc046a042018-01-08 23:50:59 +0000220 endif()
221
Chris Bieneman788c95c2015-11-11 16:14:03 +0000222 ExternalProject_Add(${name}
Chris Bieneman997ee2b2016-08-18 21:41:21 +0000223 DEPENDS ${ARG_DEPENDS} llvm-config
Chris Bieneman788c95c2015-11-11 16:14:03 +0000224 ${name}-clobber
225 PREFIX ${CMAKE_BINARY_DIR}/projects/${name}
226 SOURCE_DIR ${source_dir}
227 STAMP_DIR ${STAMP_DIR}
228 BINARY_DIR ${BINARY_DIR}
229 ${exclude}
230 CMAKE_ARGS ${${nameCanon}_CMAKE_ARGS}
231 ${compiler_args}
232 -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
Shoaib Meenai038fd002017-12-08 19:42:47 +0000233 ${sysroot_arg}
Chris Bieneman64adae52016-06-23 22:07:21 +0000234 -DLLVM_BINARY_DIR=${PROJECT_BINARY_DIR}
Petr Hosekc046a042018-01-08 23:50:59 +0000235 -DLLVM_CONFIG_PATH=${llvm_config_path}
Chris Bieneman64adae52016-06-23 22:07:21 +0000236 -DLLVM_ENABLE_WERROR=${LLVM_ENABLE_WERROR}
Petr Hosek61633292017-11-27 22:50:48 +0000237 -DLLVM_HOST_TRIPLE=${LLVM_HOST_TRIPLE}
Petr Hosek34ea06b2017-12-13 23:49:51 +0000238 -DLLVM_HAVE_LINK_VERSION_SCRIPT=${LLVM_HAVE_LINK_VERSION_SCRIPT}
Petr Hosek2ab7af22019-05-31 01:34:51 +0000239 -DLLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO=${LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO}
240 -DLLVM_SOURCE_PREFIX=${LLVM_SOURCE_PREFIX}
Chris Bieneman64adae52016-06-23 22:07:21 +0000241 -DPACKAGE_VERSION=${PACKAGE_VERSION}
242 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
243 -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
George Karpenkovabb54762017-07-20 23:46:46 +0000244 -DCMAKE_EXPORT_COMPILE_COMMANDS=1
Petr Hosekf8e27b32018-11-16 04:46:48 +0000245 ${cmake_args}
Chris Bieneman788c95c2015-11-11 16:14:03 +0000246 ${PASSTHROUGH_VARIABLES}
247 INSTALL_COMMAND ""
248 STEP_TARGETS configure build
Chris Bieneman2b5a5452016-06-09 22:41:36 +0000249 BUILD_ALWAYS 1
250 USES_TERMINAL_CONFIGURE 1
251 USES_TERMINAL_BUILD 1
252 USES_TERMINAL_INSTALL 1
Petr Hosek6851c0c2017-12-05 00:15:18 +0000253 LIST_SEPARATOR |
Chris Bieneman788c95c2015-11-11 16:14:03 +0000254 )
255
Chris Bieneman788c95c2015-11-11 16:14:03 +0000256 if(ARG_USE_TOOLCHAIN)
257 set(force_deps DEPENDS ${TOOLCHAIN_BINS})
258 endif()
259
Chris Bieneman79c68d52016-04-08 22:46:04 +0000260 llvm_ExternalProject_BuildCmd(run_clean clean ${BINARY_DIR})
Chris Bieneman788c95c2015-11-11 16:14:03 +0000261 ExternalProject_Add_Step(${name} clean
262 COMMAND ${run_clean}
263 COMMENT "Cleaning ${name}..."
264 DEPENDEES configure
265 ${force_deps}
266 WORKING_DIRECTORY ${BINARY_DIR}
Chris Bieneman64adae52016-06-23 22:07:21 +0000267 EXCLUDE_FROM_MAIN 1
Chris Bieneman2b5a5452016-06-09 22:41:36 +0000268 USES_TERMINAL 1
Chris Bieneman788c95c2015-11-11 16:14:03 +0000269 )
270 ExternalProject_Add_StepTargets(${name} clean)
271
272 if(ARG_USE_TOOLCHAIN)
273 add_dependencies(${name}-clean ${name}-clobber)
274 set_target_properties(${name}-clean PROPERTIES
275 SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp)
276 endif()
277
278 if(NOT ARG_NO_INSTALL)
Petr Hosek7629f982018-07-15 02:12:25 +0000279 install(CODE "execute_process\(COMMAND \${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=\${CMAKE_INSTALL_PREFIX} -DCMAKE_INSTALL_DO_STRIP=\${CMAKE_INSTALL_DO_STRIP} -P ${BINARY_DIR}/cmake_install.cmake\)"
Chris Bieneman788c95c2015-11-11 16:14:03 +0000280 COMPONENT ${name})
281
Shoaib Meenaia7ac2cb2017-11-30 21:48:26 +0000282 add_llvm_install_targets(install-${name}
283 DEPENDS ${name}
284 COMPONENT ${name})
Chris Bieneman788c95c2015-11-11 16:14:03 +0000285 endif()
286
287 # Add top-level targets
288 foreach(target ${ARG_EXTRA_TARGETS})
Petr Hoseka1efebc2018-06-27 03:14:41 +0000289 if(DEFINED ${target})
290 set(external_target "${${target}}")
Petr Hosekab9991f2017-07-11 23:41:15 +0000291 else()
Petr Hoseka1efebc2018-06-27 03:14:41 +0000292 set(external_target "${target}")
Petr Hosekab9991f2017-07-11 23:41:15 +0000293 endif()
Petr Hoseka1efebc2018-06-27 03:14:41 +0000294 llvm_ExternalProject_BuildCmd(build_runtime_cmd ${external_target} ${BINARY_DIR})
295 add_custom_target(${target}
Chris Bieneman788c95c2015-11-11 16:14:03 +0000296 COMMAND ${build_runtime_cmd}
297 DEPENDS ${name}-configure
298 WORKING_DIRECTORY ${BINARY_DIR}
299 VERBATIM
Chris Bienemandf04e792016-06-08 22:19:25 +0000300 USES_TERMINAL)
Chris Bieneman788c95c2015-11-11 16:14:03 +0000301 endforeach()
302endfunction()