blob: a69a4720b8b0b284a3923e70bafe543ede001812 [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)
Petr Hosekfdfdd272020-02-05 19:37:50 -080048
49 foreach(arg ${ARG_CMAKE_ARGS})
50 if(arg MATCHES "^-DCMAKE_SYSTEM_NAME=")
51 string(REGEX REPLACE "^-DCMAKE_SYSTEM_NAME=(.*)$" "\\1" _cmake_system_name "${arg}")
52 endif()
53 endforeach()
54
Chris Bieneman788c95c2015-11-11 16:14:03 +000055 if(NOT ARG_TOOLCHAIN_TOOLS)
Petr Hosekfdfdd272020-02-05 19:37:50 -080056 set(ARG_TOOLCHAIN_TOOLS clang lld llvm-ar llvm-lipo llvm-ranlib llvm-nm llvm-objdump)
57 if(NOT _cmake_system_name STREQUAL Darwin)
58 # TODO: These tools don't fully support Mach-O format yet.
59 list(APPEND ARG_TOOLCHAIN_TOOLS llvm-objcopy llvm-strip)
Petr Hosek024a17b2016-12-12 23:15:10 +000060 endif()
Chris Bieneman788c95c2015-11-11 16:14:03 +000061 endif()
62 foreach(tool ${ARG_TOOLCHAIN_TOOLS})
63 if(TARGET ${tool})
64 list(APPEND TOOLCHAIN_TOOLS ${tool})
65 list(APPEND TOOLCHAIN_BINS $<TARGET_FILE:${tool}>)
66 endif()
67 endforeach()
68
69 if(NOT ARG_RUNTIME_LIBRARIES)
70 set(ARG_RUNTIME_LIBRARIES compiler-rt libcxx)
71 endif()
72 foreach(lib ${ARG_RUNTIME_LIBRARIES})
73 if(TARGET ${lib})
74 list(APPEND RUNTIME_LIBRARIES ${lib})
75 endif()
76 endforeach()
77
Chris Bieneman64adae52016-06-23 22:07:21 +000078 if(ARG_ALWAYS_CLEAN)
79 set(always_clean clean)
80 endif()
81
Chris Bieneman788c95c2015-11-11 16:14:03 +000082 list(FIND TOOLCHAIN_TOOLS clang FOUND_CLANG)
83 if(FOUND_CLANG GREATER -1)
84 set(CLANG_IN_TOOLCHAIN On)
85 endif()
86
87 if(RUNTIME_LIBRARIES AND CLANG_IN_TOOLCHAIN)
88 list(APPEND TOOLCHAIN_BINS ${RUNTIME_LIBRARIES})
89 endif()
90
Chris Bieneman788c95c2015-11-11 16:14:03 +000091 set(STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/${name}-stamps/)
92 set(BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${name}-bins/)
93
94 add_custom_target(${name}-clear
95 COMMAND ${CMAKE_COMMAND} -E remove_directory ${BINARY_DIR}
96 COMMAND ${CMAKE_COMMAND} -E remove_directory ${STAMP_DIR}
97 COMMENT "Clobbering ${name} build and stamp directories"
Chris Bienemandf04e792016-06-08 22:19:25 +000098 USES_TERMINAL
Chris Bieneman788c95c2015-11-11 16:14:03 +000099 )
100
Chris Bieneman64adae52016-06-23 22:07:21 +0000101 # Find all variables that start with a prefix and propagate them through
Chris Bieneman788c95c2015-11-11 16:14:03 +0000102 get_cmake_property(variableNames VARIABLES)
Chris Bieneman64adae52016-06-23 22:07:21 +0000103
104 list(APPEND ARG_PASSTHROUGH_PREFIXES ${nameCanon})
105 foreach(prefix ${ARG_PASSTHROUGH_PREFIXES})
106 foreach(variableName ${variableNames})
107 if(variableName MATCHES "^${prefix}")
Petr Hosek6851c0c2017-12-05 00:15:18 +0000108 string(REPLACE ";" "|" value "${${variableName}}")
Chris Bieneman64adae52016-06-23 22:07:21 +0000109 list(APPEND PASSTHROUGH_VARIABLES
110 -D${variableName}=${value})
111 endif()
112 endforeach()
Chris Bieneman788c95c2015-11-11 16:14:03 +0000113 endforeach()
114
Petr Hosekc046a042018-01-08 23:50:59 +0000115 if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING)
Chris Bieneman788c95c2015-11-11 16:14:03 +0000116 if(CLANG_IN_TOOLCHAIN)
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000117 if(_cmake_system_name STREQUAL Windows)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000118 set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}
Petr Hosek56b7f592020-01-27 19:14:32 -0800119 -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}
120 -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX})
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000121 else()
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000122 set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX}
Petr Hosek56b7f592020-01-27 19:14:32 -0800123 -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX}
124 -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX})
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000125 endif()
Chris Bieneman788c95c2015-11-11 16:14:03 +0000126 endif()
Petr Hosek0acc0242018-06-06 21:43:37 +0000127 if(lld IN_LIST TOOLCHAIN_TOOLS)
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000128 if(_cmake_system_name STREQUAL Windows)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000129 list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/lld-link${CMAKE_EXECUTABLE_SUFFIX})
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000130 else()
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000131 list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/ld.lld${CMAKE_EXECUTABLE_SUFFIX})
Saleem Abdulrasooldc1c41f2019-05-17 20:09:06 +0000132 endif()
Petr Hosek0acc0242018-06-06 21:43:37 +0000133 endif()
Petr Hosek024a17b2016-12-12 23:15:10 +0000134 if(llvm-ar IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000135 list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek024a17b2016-12-12 23:15:10 +0000136 endif()
Xin-Xin Wangf5bbe382019-12-16 15:46:02 -0800137 if(llvm-lipo IN_LIST TOOLCHAIN_TOOLS)
138 list(APPEND compiler_args -DCMAKE_LIPO=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-lipo${CMAKE_EXECUTABLE_SUFFIX})
139 endif()
Petr Hosek024a17b2016-12-12 23:15:10 +0000140 if(llvm-ranlib IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000141 list(APPEND compiler_args -DCMAKE_RANLIB=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ranlib${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek024a17b2016-12-12 23:15:10 +0000142 endif()
Petr Hosek0acc0242018-06-06 21:43:37 +0000143 if(llvm-nm IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000144 list(APPEND compiler_args -DCMAKE_NM=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-nm${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek0acc0242018-06-06 21:43:37 +0000145 endif()
146 if(llvm-objdump IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000147 list(APPEND compiler_args -DCMAKE_OBJDUMP=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-objdump${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek0acc0242018-06-06 21:43:37 +0000148 endif()
149 if(llvm-objcopy IN_LIST TOOLCHAIN_TOOLS)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000150 list(APPEND compiler_args -DCMAKE_OBJCOPY=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-objcopy${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek0acc0242018-06-06 21:43:37 +0000151 endif()
Petr Hosekaac819b2019-03-09 01:26:55 +0000152 if(llvm-strip IN_LIST TOOLCHAIN_TOOLS AND NOT ARG_STRIP_TOOL)
Galina Kistanovab4e5f012019-08-07 03:19:40 +0000153 list(APPEND compiler_args -DCMAKE_STRIP=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-strip${CMAKE_EXECUTABLE_SUFFIX})
Petr Hosek0acc0242018-06-06 21:43:37 +0000154 endif()
Chris Bieneman788c95c2015-11-11 16:14:03 +0000155 list(APPEND ARG_DEPENDS ${TOOLCHAIN_TOOLS})
156 endif()
157
Petr Hosekaac819b2019-03-09 01:26:55 +0000158 if(ARG_STRIP_TOOL)
159 list(APPEND compiler_args -DCMAKE_STRIP=${ARG_STRIP_TOOL})
160 endif()
161
Chris Bieneman788c95c2015-11-11 16:14:03 +0000162 add_custom_command(
163 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp
164 DEPENDS ${ARG_DEPENDS}
165 COMMAND ${CMAKE_COMMAND} -E touch ${BINARY_DIR}/CMakeCache.txt
166 COMMAND ${CMAKE_COMMAND} -E touch ${STAMP_DIR}/${name}-mkdir
167 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp
168 COMMENT "Clobbering bootstrap build and stamp directories"
169 )
170
171 add_custom_target(${name}-clobber
172 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp)
173
174 if(ARG_EXCLUDE_FROM_ALL)
Chris Bieneman2b5a5452016-06-09 22:41:36 +0000175 set(exclude EXCLUDE_FROM_ALL 1)
Chris Bieneman788c95c2015-11-11 16:14:03 +0000176 endif()
177
Shoaib Meenai038fd002017-12-08 19:42:47 +0000178 if(CMAKE_SYSROOT)
179 set(sysroot_arg -DCMAKE_SYSROOT=${CMAKE_SYSROOT})
180 endif()
181
Petr Hosekc046a042018-01-08 23:50:59 +0000182 if(CMAKE_CROSSCOMPILING)
183 set(compiler_args -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
184 -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
Petr Hosek0acc0242018-06-06 21:43:37 +0000185 -DCMAKE_LINKER=${CMAKE_LINKER}
Petr Hosekc046a042018-01-08 23:50:59 +0000186 -DCMAKE_AR=${CMAKE_AR}
Petr Hosek0acc0242018-06-06 21:43:37 +0000187 -DCMAKE_RANLIB=${CMAKE_RANLIB}
188 -DCMAKE_NM=${CMAKE_NM}
189 -DCMAKE_OBJCOPY=${CMAKE_OBJCOPY}
190 -DCMAKE_OBJDUMP=${CMAKE_OBJDUMP}
191 -DCMAKE_STRIP=${CMAKE_STRIP})
Don Hinton3c59aec2018-01-21 00:29:00 +0000192 set(llvm_config_path ${LLVM_CONFIG_PATH})
Petr Hosekf8e27b32018-11-16 04:46:48 +0000193
194 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
195 string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION
196 ${PACKAGE_VERSION})
197 set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}")
198 set(flag_types ASM C CXX MODULE_LINKER SHARED_LINKER EXE_LINKER)
199 foreach(type ${flag_types})
200 set(${type}_flag -DCMAKE_${type}_FLAGS=-resource-dir=${resource_dir})
201 endforeach()
202 string(REPLACE ";" "|" flag_string "${flag_types}")
203 foreach(arg ${ARG_CMAKE_ARGS})
204 if(arg MATCHES "^-DCMAKE_(${flag_string})_FLAGS")
205 foreach(type ${flag_types})
206 if(arg MATCHES "^-DCMAKE_${type}_FLAGS")
207 string(REGEX REPLACE "^-DCMAKE_${type}_FLAGS=(.*)$" "\\1" flag_value "${arg}")
208 set(${type}_flag "${${type}_flag} ${flag_value}")
209 endif()
210 endforeach()
211 else()
212 list(APPEND cmake_args ${arg})
213 endif()
214 endforeach()
215 foreach(type ${flag_types})
216 list(APPEND cmake_args ${${type}_flag})
217 endforeach()
218 endif()
Petr Hosekc046a042018-01-08 23:50:59 +0000219 else()
220 set(llvm_config_path "$<TARGET_FILE:llvm-config>")
Petr Hosekf8e27b32018-11-16 04:46:48 +0000221 set(cmake_args ${ARG_CMAKE_ARGS})
Petr Hosekc046a042018-01-08 23:50:59 +0000222 endif()
223
Chris Bieneman788c95c2015-11-11 16:14:03 +0000224 ExternalProject_Add(${name}
Chris Bieneman997ee2b2016-08-18 21:41:21 +0000225 DEPENDS ${ARG_DEPENDS} llvm-config
Chris Bieneman788c95c2015-11-11 16:14:03 +0000226 ${name}-clobber
227 PREFIX ${CMAKE_BINARY_DIR}/projects/${name}
228 SOURCE_DIR ${source_dir}
229 STAMP_DIR ${STAMP_DIR}
230 BINARY_DIR ${BINARY_DIR}
231 ${exclude}
232 CMAKE_ARGS ${${nameCanon}_CMAKE_ARGS}
233 ${compiler_args}
234 -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
Shoaib Meenai038fd002017-12-08 19:42:47 +0000235 ${sysroot_arg}
Chris Bieneman64adae52016-06-23 22:07:21 +0000236 -DLLVM_BINARY_DIR=${PROJECT_BINARY_DIR}
Petr Hosekc046a042018-01-08 23:50:59 +0000237 -DLLVM_CONFIG_PATH=${llvm_config_path}
Chris Bieneman64adae52016-06-23 22:07:21 +0000238 -DLLVM_ENABLE_WERROR=${LLVM_ENABLE_WERROR}
Petr Hosek61633292017-11-27 22:50:48 +0000239 -DLLVM_HOST_TRIPLE=${LLVM_HOST_TRIPLE}
Petr Hosek34ea06b2017-12-13 23:49:51 +0000240 -DLLVM_HAVE_LINK_VERSION_SCRIPT=${LLVM_HAVE_LINK_VERSION_SCRIPT}
Petr Hosek2ab7af22019-05-31 01:34:51 +0000241 -DLLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO=${LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO}
242 -DLLVM_SOURCE_PREFIX=${LLVM_SOURCE_PREFIX}
Chris Bieneman64adae52016-06-23 22:07:21 +0000243 -DPACKAGE_VERSION=${PACKAGE_VERSION}
244 -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
245 -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
George Karpenkovabb54762017-07-20 23:46:46 +0000246 -DCMAKE_EXPORT_COMPILE_COMMANDS=1
Petr Hosekf8e27b32018-11-16 04:46:48 +0000247 ${cmake_args}
Chris Bieneman788c95c2015-11-11 16:14:03 +0000248 ${PASSTHROUGH_VARIABLES}
249 INSTALL_COMMAND ""
250 STEP_TARGETS configure build
Chris Bieneman2b5a5452016-06-09 22:41:36 +0000251 BUILD_ALWAYS 1
252 USES_TERMINAL_CONFIGURE 1
253 USES_TERMINAL_BUILD 1
254 USES_TERMINAL_INSTALL 1
Petr Hosek6851c0c2017-12-05 00:15:18 +0000255 LIST_SEPARATOR |
Chris Bieneman788c95c2015-11-11 16:14:03 +0000256 )
257
Chris Bieneman788c95c2015-11-11 16:14:03 +0000258 if(ARG_USE_TOOLCHAIN)
259 set(force_deps DEPENDS ${TOOLCHAIN_BINS})
260 endif()
261
Chris Bieneman79c68d52016-04-08 22:46:04 +0000262 llvm_ExternalProject_BuildCmd(run_clean clean ${BINARY_DIR})
Chris Bieneman788c95c2015-11-11 16:14:03 +0000263 ExternalProject_Add_Step(${name} clean
264 COMMAND ${run_clean}
265 COMMENT "Cleaning ${name}..."
266 DEPENDEES configure
267 ${force_deps}
268 WORKING_DIRECTORY ${BINARY_DIR}
Chris Bieneman64adae52016-06-23 22:07:21 +0000269 EXCLUDE_FROM_MAIN 1
Chris Bieneman2b5a5452016-06-09 22:41:36 +0000270 USES_TERMINAL 1
Chris Bieneman788c95c2015-11-11 16:14:03 +0000271 )
272 ExternalProject_Add_StepTargets(${name} clean)
273
274 if(ARG_USE_TOOLCHAIN)
275 add_dependencies(${name}-clean ${name}-clobber)
276 set_target_properties(${name}-clean PROPERTIES
277 SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${name}-clobber-stamp)
278 endif()
279
280 if(NOT ARG_NO_INSTALL)
Petr Hosek7629f982018-07-15 02:12:25 +0000281 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 +0000282 COMPONENT ${name})
283
Shoaib Meenaia7ac2cb2017-11-30 21:48:26 +0000284 add_llvm_install_targets(install-${name}
285 DEPENDS ${name}
286 COMPONENT ${name})
Chris Bieneman788c95c2015-11-11 16:14:03 +0000287 endif()
288
289 # Add top-level targets
290 foreach(target ${ARG_EXTRA_TARGETS})
Petr Hoseka1efebc2018-06-27 03:14:41 +0000291 if(DEFINED ${target})
292 set(external_target "${${target}}")
Petr Hosekab9991f2017-07-11 23:41:15 +0000293 else()
Petr Hoseka1efebc2018-06-27 03:14:41 +0000294 set(external_target "${target}")
Petr Hosekab9991f2017-07-11 23:41:15 +0000295 endif()
Petr Hoseka1efebc2018-06-27 03:14:41 +0000296 llvm_ExternalProject_BuildCmd(build_runtime_cmd ${external_target} ${BINARY_DIR})
297 add_custom_target(${target}
Chris Bieneman788c95c2015-11-11 16:14:03 +0000298 COMMAND ${build_runtime_cmd}
299 DEPENDS ${name}-configure
300 WORKING_DIRECTORY ${BINARY_DIR}
301 VERBATIM
Chris Bienemandf04e792016-06-08 22:19:25 +0000302 USES_TERMINAL)
Chris Bieneman788c95c2015-11-11 16:14:03 +0000303 endforeach()
304endfunction()