[clang] [llvm] [Fuchsia][CMake] Add a modular Fuchsia toolchain configuration (PR #122023)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 7 16:06:48 PST 2025
https://github.com/zeroomega created https://github.com/llvm/llvm-project/pull/122023
This patch implements a new CMake configuration for building Fuchsia toolchain in a modular way. It splits the config for LLVM/Clang and the Runtimes. Allow them to be reused in different build scenarios. This patch also paves the way for setting up a libcxx pre-submit builder for the Fuchsia toolchain.
>From b69cde18e65018d62cef3be2e05d1a26f339492b Mon Sep 17 00:00:00 2001
From: Haowei Wu <haowei at google.com>
Date: Tue, 7 Jan 2025 15:43:44 -0800
Subject: [PATCH] [Fuchsia][CMake] Add a modular Fuchsia toolchain
configuration
This patch implements a new CMake configuration for building
Fuchsia toolchain in a modular way. It splits the config for
LLVM/Clang and the Runtimes. Allow them to be reused in different
build scenarios. This patch also paves the way for setting
up a libcxx pre-submit builder for the Fuchsia toolchain.
---
clang/cmake/caches/Fuchsia-modular.cmake | 147 +++++++++++++++
runtimes/cmake/fuchsia/Common.cmake | 22 +++
runtimes/cmake/fuchsia/Linux.cmake | 217 +++++++++++++++++++++++
3 files changed, 386 insertions(+)
create mode 100644 clang/cmake/caches/Fuchsia-modular.cmake
create mode 100644 runtimes/cmake/fuchsia/Common.cmake
create mode 100644 runtimes/cmake/fuchsia/Linux.cmake
diff --git a/clang/cmake/caches/Fuchsia-modular.cmake b/clang/cmake/caches/Fuchsia-modular.cmake
new file mode 100644
index 00000000000000..3cc1792d4a90a4
--- /dev/null
+++ b/clang/cmake/caches/Fuchsia-modular.cmake
@@ -0,0 +1,147 @@
+# This file sets up a CMakeCache for building a single stage of a Fuchsia toolchain.
+# It can be used to just build LLVM+Clang without building any runtimes
+# Or LLVM+Clang+runtimes.
+set(LLVM_TARGETS_TO_BUILD X86;ARM;AArch64;RISCV CACHE STRING "")
+
+set(PACKAGE_VENDOR Fuchsia CACHE STRING "")
+
+set(_FUCHSIA_ENABLE_PROJECTS "bolt;clang;clang-tools-extra;lld;llvm;polly")
+
+set(LLVM_ENABLE_BACKTRACES OFF CACHE BOOL "")
+set(LLVM_ENABLE_DIA_SDK OFF CACHE BOOL "")
+set(LLVM_ENABLE_FATLTO ON CACHE BOOL "")
+set(LLVM_ENABLE_HTTPLIB ON CACHE BOOL "")
+set(LLVM_ENABLE_LIBCXX ON CACHE BOOL "")
+set(LLVM_ENABLE_LIBEDIT OFF CACHE BOOL "")
+set(LLVM_ENABLE_LLD ON CACHE BOOL "")
+set(LLVM_ENABLE_LTO ON CACHE BOOL "")
+set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "")
+set(LLVM_ENABLE_PLUGINS OFF CACHE BOOL "")
+set(LLVM_ENABLE_TERMINFO OFF CACHE BOOL "")
+set(LLVM_ENABLE_UNWIND_TABLES OFF CACHE BOOL "")
+set(LLVM_ENABLE_Z3_SOLVER OFF CACHE BOOL "")
+set(LLVM_ENABLE_ZLIB ON CACHE BOOL "")
+set(LLVM_FORCE_BUILD_RUNTIME ON CACHE BOOL "")
+set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
+set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "")
+set(LLVM_STATIC_LINK_CXX_STDLIB ON CACHE BOOL "")
+set(LLVM_USE_RELATIVE_PATHS_IN_FILES ON CACHE BOOL "")
+set(LLDB_ENABLE_CURSES OFF CACHE BOOL "")
+set(LLDB_ENABLE_LIBEDIT OFF CACHE BOOL "")
+
+if(WIN32)
+ set(FUCHSIA_DISABLE_DRIVER_BUILD ON)
+endif()
+
+if (NOT FUCHSIA_DISABLE_DRIVER_BUILD)
+ set(LLVM_TOOL_LLVM_DRIVER_BUILD ON CACHE BOOL "")
+ set(LLVM_DRIVER_TARGET llvm-driver)
+endif()
+
+set(CLANG_DEFAULT_CXX_STDLIB libc++ CACHE STRING "")
+set(CLANG_DEFAULT_LINKER lld CACHE STRING "")
+set(CLANG_DEFAULT_OBJCOPY llvm-objcopy CACHE STRING "")
+set(CLANG_DEFAULT_RTLIB compiler-rt CACHE STRING "")
+set(CLANG_DEFAULT_UNWINDLIB libunwind CACHE STRING "")
+set(CLANG_ENABLE_ARCMT OFF CACHE BOOL "")
+set(CLANG_ENABLE_STATIC_ANALYZER ON CACHE BOOL "")
+set(CLANG_PLUGIN_SUPPORT OFF CACHE BOOL "")
+
+set(ENABLE_LINKER_BUILD_ID ON CACHE BOOL "")
+set(ENABLE_X86_RELAX_RELOCATIONS ON CACHE BOOL "")
+
+# TODO(#67176): relative-vtables doesn't play well with different default
+# visibilities. Making everything hidden visibility causes other complications
+# let's choose default visibility for our entire toolchain.
+set(CMAKE_C_VISIBILITY_PRESET default CACHE STRING "")
+set(CMAKE_CXX_VISIBILITY_PRESET default CACHE STRING "")
+
+set(CMAKE_BUILD_TYPE Release CACHE STRING "")
+
+# Setup the runtimes for Fuchsia toolchain.
+set(FUCHSIA_TOOLCHAIN_RUNTIME_PLATFORMS "" CACHE STRING "")
+LIST(LENGTH FUCHSIA_TOOLCHAIN_RUNTIME_PLATFORMS platform_count)
+if (NOT platform_count EQUAL 0)
+ set(FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE "END2END" CACHE STRING "")
+ set(LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")
+ set(FUCHSIA_TOOLCHAIN_RUNTIME_BUILTIN_TARGETS "" CACHE STRING "")
+ set(FUCHSIA_TOOLCHAIN_RUNTIME_RUNTIME_TARGETS "" CACHE STRING "")
+ set(FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_ID_LINK "" CACHE STRING "")
+ set(FUCHSIA_RUNTIME_COMPONENTS "builtins;runtimes" CACHE STRING "")
+endif()
+
+foreach(platform IN LISTS FUCHSIA_TOOLCHAIN_RUNTIME_PLATFORMS)
+ include(${CMAKE_CURRENT_LIST_DIR}/../../../runtimes/cmake/fuchsia/${platform}.cmake)
+endforeach()
+
+
+# Setup toolchain.
+set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")
+set(LLVM_TOOLCHAIN_TOOLS
+ dsymutil
+ llvm-ar
+ llvm-config
+ llvm-cov
+ llvm-cxxfilt
+ llvm-debuginfod
+ llvm-debuginfod-find
+ llvm-dlltool
+ ${LLVM_DRIVER_TARGET}
+ llvm-dwarfdump
+ llvm-dwp
+ llvm-ifs
+ llvm-gsymutil
+ llvm-lib
+ llvm-libtool-darwin
+ llvm-lipo
+ llvm-ml
+ llvm-mt
+ llvm-nm
+ llvm-objcopy
+ llvm-objdump
+ llvm-otool
+ llvm-pdbutil
+ llvm-profdata
+ llvm-rc
+ llvm-ranlib
+ llvm-readelf
+ llvm-readobj
+ llvm-size
+ llvm-strings
+ llvm-strip
+ llvm-symbolizer
+ llvm-undname
+ llvm-xray
+ opt-viewer
+ sancov
+ scan-build-py
+ CACHE STRING "")
+
+set(LLVM_Toolchain_DISTRIBUTION_COMPONENTS
+ bolt
+ clang
+ lld
+ clang-apply-replacements
+ clang-doc
+ clang-format
+ clang-resource-headers
+ clang-include-fixer
+ clang-refactor
+ clang-scan-deps
+ clang-tidy
+ clangd
+ find-all-symbols
+ ${FUCHSIA_RUNTIME_COMPONENTS}
+ ${LLVM_TOOLCHAIN_TOOLS}
+ CACHE STRING "")
+
+if (NOT platform_count EQUAL 0)
+ set(LLVM_BUILTIN_TARGETS "${FUCHSIA_TOOLCHAIN_RUNTIME_BUILTIN_TARGETS}" CACHE STRING "")
+ set(LLVM_RUNTIME_TARGETS "${FUCHSIA_TOOLCHAIN_RUNTIME_RUNTIME_TARGETS}" CACHE STRING "")
+ set(RUNTIME_BUILD_ID_LINK "${FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_ID_LINK}" CACHE STRING "")
+endif()
+
+set(_FUCHSIA_DISTRIBUTIONS Toolchain)
+
+set(LLVM_DISTRIBUTIONS ${_FUCHSIA_DISTRIBUTIONS} CACHE STRING "")
+set(LLVM_ENABLE_PROJECTS ${_FUCHSIA_ENABLE_PROJECTS} CACHE STRING "")
diff --git a/runtimes/cmake/fuchsia/Common.cmake b/runtimes/cmake/fuchsia/Common.cmake
new file mode 100644
index 00000000000000..f994191ef72d27
--- /dev/null
+++ b/runtimes/cmake/fuchsia/Common.cmake
@@ -0,0 +1,22 @@
+include(${CMAKE_CURRENT_LIST_DIR}/../../../cmake/Modules/LLVMVersion.cmake)
+
+# If build end2end. Expect FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE set to END2END
+# if build standalone. Expect FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE set to BUILTIN or RUNTIMES
+set(FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE "" CACHE STRING "")
+
+if(NOT (FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE STREQUAL "END2END" OR FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE STREQUAL "BUILTIN" OR FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE STREQUAL "RUNTIMES"))
+ message(FATAL_ERROR "FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE needs to be set to END2END or BUILTIN or RUNTIMES")
+endif()
+
+function(SET_COMMON_ENTRIES RUNTIME_TARGET CONFIG_PREFIX SYSTEM_NAME SYSROOT_PATH COMPILER_FLAGS LINKER_FLAGS)
+ set(target ${RUNTIME_TARGET})
+ set(${CONFIG_PREFIX}CMAKE_SYSTEM_NAME ${SYSTEM_NAME} CACHE STRING "")
+ set(${CONFIG_PREFIX}CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "")
+ set(${CONFIG_PREFIX}CMAKE_C_FLAGS ${COMPILER_FLAGS} CACHE STRING "")
+ set(${CONFIG_PREFIX}CMAKE_CXX_FLAGS ${COMPILER_FLAGS} CACHE STRING "")
+ set(${CONFIG_PREFIX}CMAKE_ASM_FLAGS ${COMPILER_FLAGS} CACHE STRING "")
+ set(${CONFIG_PREFIX}CMAKE_SYSROOT ${SYSROOT_PATH} CACHE STRING "")
+ set(${CONFIG_PREFIX}CMAKE_SHARED_LINKER_FLAGS ${LINKER_FLAGS} CACHE STRING "")
+ set(${CONFIG_PREFIX}CMAKE_MODULE_LINKER_FLAGS ${LINKER_FLAGS} CACHE STRING "")
+ set(${CONFIG_PREFIX}CMAKE_EXE_LINKER_FLAGS ${LINKER_FLAGS} CACHE STRING "")
+endfunction()
\ No newline at end of file
diff --git a/runtimes/cmake/fuchsia/Linux.cmake b/runtimes/cmake/fuchsia/Linux.cmake
new file mode 100644
index 00000000000000..a754be89827b7c
--- /dev/null
+++ b/runtimes/cmake/fuchsia/Linux.cmake
@@ -0,0 +1,217 @@
+include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
+
+# This file sets up the builtins and runtimes for the Linux platform for
+# a Fuchsia toolchain build. It can be used in an end to end toolchain build,
+# or be used standalone.
+
+# If build end2end. Expect FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE set to END2END
+# And FUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS to contain a list of targets
+# if build standalone. Expect FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE set to BUILTIN or RUNTIMES
+# and FUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS to contain a single target triple.
+
+# Due to a limitation in compiler-rt and runtimes cmake configuration, both
+# depends on the cmake files under LLVM's build directory. Therefore, in order to
+# build runtimes in standalone mode, the LLVM+Clang needs to be built first.
+
+# Example of building a x86_64-unknown-linux-gnu builtins:
+
+# cmake \
+# -GNinja \
+# -DCMAKE_MAKE_PROGRAM=ninja \
+# -DCMAKE_INSTALL_PREFIX="" \
+# -DCMAKE_C_COMPILER=LLVM_CLANG_BUILD_DIR/bin/clang \
+# -DCMAKE_CXX_COMPILER=LLVM_CLANG_BUILD_DIR/bin/clang++ \
+# -DCMAKE_ASM_COMPILER=LLVM_CLANG_BUILD_DIR/bin/clang \
+# -DCLANG_REPOSITORY_STRING="https://llvm.googlesource.com/llvm-project" \
+# -DCMAKE_AR=LLVM_CLANG_BUILD_DIR/bin/llvm-ar \
+# -DCMAKE_LINKER=LLVM_CLANG_BUILD_DIR/bin/ld.lld \
+# -DCMAKE_NM=LLVM_CLANG_BUILD_DIR/bin/llvm-nm \
+# -DCMAKE_OBJCOPY=LLVM_CLANG_BUILD_DIR/bin/llvm-objcopy \
+# -DCMAKE_OBJDUMP=LLVM_CLANG_BUILD_DIR/bin/llvm-objdump \
+# -DCMAKE_RANLIB=LLVM_CLANG_BUILD_DIR/bin/llvm-ranlib \
+# -DCMAKE_READELF=LLVM_CLANG_BUILD_DIR/bin/llvm-readelf \
+# -DCMAKE_STRIP=LLVM_CLANG_BUILD_DIR/bin/llvm-strip \
+# -DCMAKE_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_aarch64-unknown-linux-gnu_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_armv7-unknown-linux-gnueabihf_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_i386-unknown-linux-gnu_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_riscv64-unknown-linux-gnu_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_x86_64-unknown-linux-gnu_SYSROOT=LINUX_SYSROOT_PATH \
+# -DFUCHSIA_SDK=/mnt/nvme_crypt/SRC/llvm-prebuilts/fuchsia-idk \
+# -DLLVM_ENABLE_LTO=False \
+# -DLLVM_ENABLE_ASSERTIONS=True \
+# -DLLVM_ENABLE_BACKTRACES=True \
+# -DFUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE=BUILTIN \
+# -DFUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS="x86_64-unknown-linux-gnu" \
+# -DLLVM_CMAKE_DIR=LLVM_CLANG_BUILD_DIR/lib/cmake/llvm \
+# -C ../runtimes/cmake/fuchsia/linux.cmake ../compiler-rt/lib/builtins
+
+# Example of building a x86_64-unknown-linux-gnu runtimes:
+
+# cmake \
+# -GNinja \
+# -DCMAKE_MAKE_PROGRAM=ninja \
+# -DCMAKE_INSTALL_PREFIX="" \
+# -DCMAKE_C_COMPILER=LLVM_CLANG_BUILD_DIR/bin/clang \
+# -DCMAKE_CXX_COMPILER=LLVM_CLANG_BUILD_DIR/bin/clang++ \
+# -DCMAKE_ASM_COMPILER=LLVM_CLANG_BUILD_DIR/bin/clang \
+# -DCLANG_REPOSITORY_STRING="https://llvm.googlesource.com/llvm-project" \
+# -DCMAKE_AR=LLVM_CLANG_BUILD_DIR/bin/llvm-ar \
+# -DCMAKE_LINKER=LLVM_CLANG_BUILD_DIR/bin/ld.lld \
+# -DCMAKE_NM=LLVM_CLANG_BUILD_DIR/bin/llvm-nm \
+# -DCMAKE_OBJCOPY=LLVM_CLANG_BUILD_DIR/bin/llvm-objcopy \
+# -DCMAKE_OBJDUMP=LLVM_CLANG_BUILD_DIR/bin/llvm-objdump \
+# -DCMAKE_RANLIB=LLVM_CLANG_BUILD_DIR/bin/llvm-ranlib \
+# -DCMAKE_READELF=LLVM_CLANG_BUILD_DIR/bin/llvm-readelf \
+# -DCMAKE_STRIP=LLVM_CLANG_BUILD_DIR/bin/llvm-strip \
+# -DCMAKE_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_aarch64-unknown-linux-gnu_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_armv7-unknown-linux-gnueabihf_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_i386-unknown-linux-gnu_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_riscv64-unknown-linux-gnu_SYSROOT=LINUX_SYSROOT_PATH \
+# -DLINUX_x86_64-unknown-linux-gnu_SYSROOT=LINUX_SYSROOT_PATH \
+# -DFUCHSIA_SDK=/mnt/nvme_crypt/SRC/llvm-prebuilts/fuchsia-idk \
+# -DLLVM_ENABLE_LTO=False \
+# -DLLVM_ENABLE_ASSERTIONS=True \
+# -DLLVM_ENABLE_BACKTRACES=True \
+# -DFUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE=RUNTIMES \
+# -DFUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS="x86_64-unknown-linux-gnu" \
+# -DLLVM_CMAKE_DIR=LLVM_CLANG_BUILD_DIR/lib/cmake/llvm \
+# -C ../runtimes/cmake/fuchsia/linux.cmake ../runtimes
+
+set(FUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS "" CACHE STRING "")
+
+LIST(LENGTH FUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS target_count)
+if (NOT FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE STREQUAL "END2END")
+ if (NOT target_count EQUAL 1)
+ message(FATAL_ERROR "FUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS should only contain 1 target when not in END2END mode")
+ endif()
+ set(BUILTIN_TARGETS "" CACHE STRING "")
+ set(RUNTIME_TARGETS "" CACHE STRING "")
+else()
+ if (target_count EQUAL 0)
+ set(FUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS aarch64-unknown-linux-gnu;armv7-unknown-linux-gnueabihf;i386-unknown-linux-gnu;riscv64-unknown-linux-gnu;x86_64-unknown-linux-gnu)
+ endif()
+endif()
+
+function(SET_LINUX_COMMON_ENTRIES RUNTIME_TARGET CONFIG_PREFIX)
+ SET_COMMON_ENTRIES("${RUNTIME_TARGET}" "${CONFIG_PREFIX}" "Linux" "${LINUX_${target}_SYSROOT}" "--target=${target}" "-fuse-ld=lld")
+endfunction()
+
+function(SET_EXTRA_BUILTIN_ENTRIES RUNTIME_TARGET CONFIG_PREFIX)
+ set(${CONFIG_PREFIX}COMPILER_RT_BUILD_STANDALONE_LIBATOMIC ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}COMPILER_RT_LIBATOMIC_USE_PTHREAD ON CACHE BOOL "")
+endfunction()
+
+function(SET_COMMON_STANDALONE_ARGS RUNTIME_TARGET)
+ set(target ${RUNTIME_TARGET})
+ if (NOT CMAKE_C_COMPILER)
+ message(FATAL_ERROR "CMAKE_C_COMPILER not defined")
+ endif()
+ message(NOTICE "CMAKE_C_COMPILER is ${CMAKE_C_COMPILER}")
+ cmake_path(GET CMAKE_C_COMPILER PARENT_PATH toolchain_bin)
+ cmake_path(GET toolchain_bin PARENT_PATH toolchain_dir)
+ set(CMAKE_C_COMPILER_WORKS ON CACHE STRING "")
+ set(CMAKE_CXX_COMPILER_WORKS ON CACHE STRING "")
+ set(CMAKE_ASM_COMPILER_WORKS ON CACHE STRING "")
+ set(CMAKE_EXPORT_COMPILE_COMMANDS 1 CACHE STRING "")
+ # TODO, set LLVM_HOST_TRIPLE LLVM_CONFIG_PATH
+ set(PACKAGE_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}" CACHE STRING "")
+ set(LLVM_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../llvm" CACHE STRING "")
+ set(LLVM_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../llvm" CACHE STRING "")
+ set(LLVM_BINARY_DIR ${toolchain_dir} CACHE STRING "")
+ set(LLVM_HAVE_LINK_VERSION_SCRIPT 1 CACHE STRING "")
+ set(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO OFF CACHE STRING "")
+ set(LLVM_USE_RELATIVE_PATHS_IN_FILES ON CACHE STRING "")
+ set(LLVM_ENABLE_WERROR OFF CACHE STRING "")
+ set(LLVM_SOURCE_PREFIX "" CACHE STRING "")
+ set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE STRING "")
+ set(COMPILER_RT_DEFAULT_TARGET_ONLY ON CACHE STRING "")
+ set(HAVE_LLVM_LIT ON CACHE STRING "")
+ set(CLANG_RESOURCE_DIR "" CACHE STRING "")
+ set(CMAKE_C_COMPILER_TARGET ${target} CACHE STRING "")
+ set(CMAKE_CXX_COMPILER_TARGET ${target} CACHE STRING "")
+ set(CMAKE_ASM_COMPILER_TARGET ${target} CACHE STRING "")
+ set(LLVM_DEFAULT_TARGET_TRIPLE ${target} CACHE STRING "")
+endfunction()
+
+function(SET_BUILTINS_STANDALONE_ARGS RUNTIME_TARGET)
+ cmake_path(GET CMAKE_C_COMPILER PARENT_PATH toolchain_bin)
+ cmake_path(GET toolchain_bin PARENT_PATH toolchain_dir)
+ set(LLVM_LIBRARY_OUTPUT_INTDIR "${toolchain_dir}/lib" CACHE STRING "")
+ set(COMPILER_RT_INSTALL_BINARY_DIR "lib/clang/${LLVM_VERSION_MAJOR}/bin" CACHE STRING "")
+ set(COMPILER_RT_INSTALL_DATA_DIR "lib/clang/${LLVM_VERSION_MAJOR}/share" CACHE STRING "")
+ set(COMPILER_RT_INSTALL_INCLUDE_DIR "lib/clang/${LLVM_VERSION_MAJOR}/include" CACHE STRING "")
+ set(COMPILER_RT_INSTALL_LIBRARY_DIR "lib/clang/${LLVM_VERSION_MAJOR}/lib" CACHE STRING "")
+ set(COMPILER_RT_OUTPUT_DIR "${toolchain_dir}/lib/clang/${LLVM_VERSION_MAJOR}" CACHE STRING "")
+endfunction()
+
+function(SET_RUNTIMES_STANDALONE_ARGS RUNTIME_TARGET)
+ set(target ${RUNTIME_TARGET})
+ if (NOT CMAKE_C_COMPILER)
+ message(FATAL_ERROR "CMAKE_C_COMPILER not defined")
+ endif()
+ cmake_path(GET CMAKE_C_COMPILER PARENT_PATH toolchain_bin)
+ set(LLVM_ENABLE_PROJECTS_USED ON CACHE STRING "")
+ set(LLVM_RUNTIMES_TARGET ${target} CACHE STRING "")
+ set(COMPILER_RT_BUILD_BUILTINS OFF CACHE STRING "")
+ set(LLVM_LIBC_FULL_BUILD ON CACHE STRING "")
+ set(LLVM_USE_LINKER lld CACHE STRING "")
+ set(LLVM_TOOLS_DIR ${toolchain_bin} CACHE STRING "")
+ set(LLVM_INCLUDE_TESTS ON CACHE STRING "")
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE STRING "")
+endfunction()
+
+function(SET_EXTRA_RUNTIMES_ENTRIES RUNTIME_TARGET CONFIG_PREFIX)
+ set(target ${RUNTIME_TARGET})
+ set(${CONFIG_PREFIX}COMPILER_RT_CXX_LIBRARY "libcxx" CACHE STRING "")
+ set(${CONFIG_PREFIX}COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}COMPILER_RT_USE_ATOMIC_LIBRARY ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}COMPILER_RT_USE_LLVM_UNWINDER ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}COMPILER_RT_CAN_EXECUTE_TESTS ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}COMPILER_RT_BUILD_STANDALONE_LIBATOMIC ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBCXXABI_USE_COMPILER_RT ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBCXXABI_USE_LLVM_UNWINDER ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBCXXABI_INSTALL_LIBRARY OFF CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBCXX_ENABLE_SHARED OFF CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBCXX_ENABLE_STATIC_ABI_LIBRARY ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}LIBCXX_ABI_VERSION 2 CACHE STRING "")
+ set(${CONFIG_PREFIX}LLVM_ENABLE_ASSERTIONS OFF CACHE BOOL "")
+ set(${CONFIG_PREFIX}SANITIZER_CXX_ABI "libc++" CACHE STRING "")
+ set(${CONFIG_PREFIX}SANITIZER_CXX_ABI_INTREE ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}SANITIZER_TEST_CXX "libc++" CACHE STRING "")
+ set(${CONFIG_PREFIX}SANITIZER_TEST_CXX_INTREE ON CACHE BOOL "")
+ set(${CONFIG_PREFIX}LLVM_TOOLS_DIR "${CMAKE_BINARY_DIR}/bin" CACHE BOOL "")
+ set(${CONFIG_PREFIX}LLVM_ENABLE_RUNTIMES "compiler-rt;libcxx;libcxxabi;libunwind" CACHE STRING "")
+endfunction()
+
+
+foreach(target IN LISTS FUCHSIA_TOOLCHAIN_LINUX_RUNTIMES_TARGETS)
+ if (FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE STREQUAL "END2END")
+ SET_LINUX_COMMON_ENTRIES(${target} BUILTINS_${target}_)
+ SET_EXTRA_BUILTIN_ENTRIES(${target} BUILTINS_${target}_)
+ SET_LINUX_COMMON_ENTRIES(${target} RUNTIMES_${target}_)
+ SET_EXTRA_RUNTIMES_ENTRIES(${target} RUNTIMES_${target}_)
+ list(APPEND FUCHSIA_TOOLCHAIN_RUNTIME_BUILTIN_TARGETS "${target}")
+ list(APPEND FUCHSIA_TOOLCHAIN_RUNTIME_RUNTIME_TARGETS "${target}")
+ list(APPEND FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_ID_LINK "${target}")
+ endif()
+
+ if (FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE STREQUAL "BUILTIN")
+ SET_LINUX_COMMON_ENTRIES(${target} "")
+ SET_EXTRA_BUILTIN_ENTRIES(${target} "")
+ SET_COMMON_STANDALONE_ARGS(${target})
+ SET_BUILTINS_STANDALONE_ARGS(${target})
+ endif()
+
+ if (FUCHSIA_TOOLCHAIN_RUNTIME_BUILD_MODE STREQUAL "RUNTIMES")
+ SET_LINUX_COMMON_ENTRIES(${target} "")
+ SET_EXTRA_RUNTIMES_ENTRIES(${target} "")
+ SET_COMMON_STANDALONE_ARGS(${target})
+ SET_RUNTIMES_STANDALONE_ARGS(${target})
+ endif()
+endforeach()
More information about the llvm-commits
mailing list