1# This file will recurse into all subdirectories that contain CMakeLists.txt 2# Setting variables that match the pattern LLVM_TOOL_{NAME}_BUILD to Off will 3# prevent traversing into a directory. 4# 5# The only tools that need to be explicitly added are ones that have explicit 6# ordering requirements. 7 8# Iterates all the subdirectories to create CMake options to enable/disable 9# traversing each directory. 10create_llvm_tool_options() 11 12if(NOT LLVM_BUILD_LLVM_DYLIB AND NOT LLVM_BUILD_LLVM_C_DYLIB) 13 set(LLVM_TOOL_LLVM_SHLIB_BUILD Off) 14endif() 15 16if(NOT LLVM_USE_INTEL_JITEVENTS ) 17 set(LLVM_TOOL_LLVM_JITLISTENER_BUILD Off) 18endif() 19 20if(CYGWIN OR NOT LLVM_ENABLE_PIC) 21 set(LLVM_TOOL_LTO_BUILD Off) 22endif() 23 24if (LLVM_TOOL_LLVM_DRIVER_BUILD) 25 add_llvm_tool(llvm-driver) 26endif() 27 28# Add LTO, llvm-ar, llvm-config, and llvm-profdata before clang, ExternalProject 29# requires targets specified in DEPENDS to exist before the call to 30# ExternalProject_Add. 31add_llvm_tool_subdirectory(lto) 32add_llvm_tool_subdirectory(gold) 33add_llvm_tool_subdirectory(llvm-ar) 34add_llvm_tool_subdirectory(llvm-config) 35add_llvm_tool_subdirectory(llvm-ctxprof-util) 36add_llvm_tool_subdirectory(llvm-lto) 37add_llvm_tool_subdirectory(llvm-profdata) 38 39# Projects supported via LLVM_EXTERNAL_*_SOURCE_DIR need to be explicitly 40# specified. 41add_llvm_external_project(lld) 42add_llvm_external_project(mlir) 43# ClangIR and Flang depend on mlir, lldb and Flang depend on clang, sort them 44# accordingly so place them afterwards 45add_llvm_external_project(clang) 46add_llvm_external_project(flang) 47add_llvm_external_project(lldb) 48add_llvm_external_project(bolt) 49 50# Automatically add remaining sub-directories containing a 'CMakeLists.txt' 51# file as external projects. 52add_llvm_implicit_projects() 53 54add_llvm_external_project(polly) 55 56# libclc depends on clang 57add_llvm_external_project(libclc) 58 59# Add subprojects specified using LLVM_EXTERNAL_PROJECTS 60foreach(p ${LLVM_EXTERNAL_PROJECTS}) 61 add_llvm_external_project(${p}) 62endforeach(p) 63 64set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} PARENT_SCOPE) 65 66if (LLVM_TOOL_LLVM_DRIVER_BUILD) 67 # This is explicitly added at the end _after_ all tool projects so that it can 68 # scrape up tools from other projects into itself. 69 add_subdirectory(llvm-driver) 70 # This must be here otherwise CMake complains in add_llvm_tool_symlink that 71 # it can't add_custom_command that happens after llvm-driver is built because 72 # llvm-driver was not created in that directory. 73 generate_driver_tool_targets() 74endif() 75