mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-12 20:29:00 +08:00
262 lines
9.6 KiB
CMake
262 lines
9.6 KiB
CMake
include(vcpkg_common_functions)
|
|
|
|
set(VERSION "10.0.0")
|
|
|
|
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
|
|
|
|
vcpkg_from_github(
|
|
OUT_SOURCE_PATH SOURCE_PATH
|
|
REPO llvm/llvm-project
|
|
REF llvmorg-10.0.0
|
|
SHA512 baa182d62fef1851836013ae8a1a00861ea89769778d67fb97b407a9de664e6c85da2af9c5b3f75d2bf34ff6b00004e531ca7e4b3115a26c0e61c575cf2303a0
|
|
HEAD_REF master
|
|
PATCHES
|
|
0001-allow-to-use-commas.patch
|
|
0002-fix-install-paths.patch
|
|
0003-fix-vs2019-v16.6.patch
|
|
)
|
|
|
|
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
|
|
tools LLVM_BUILD_TOOLS
|
|
tools LLVM_INCLUDE_TOOLS
|
|
utils LLVM_BUILD_UTILS
|
|
utils LLVM_INCLUDE_UTILS
|
|
enable-rtti LLVM_ENABLE_RTTI
|
|
)
|
|
|
|
# By default assertions are enabled for Debug configuration only.
|
|
if("enable-assertions" IN_LIST FEATURES)
|
|
# Force enable assertions for all configurations.
|
|
list(APPEND FEATURE_OPTIONS
|
|
-DLLVM_ENABLE_ASSERTIONS=ON
|
|
)
|
|
elseif("disable-assertions" IN_LIST FEATURES)
|
|
# Force disable assertions for all configurations.
|
|
list(APPEND FEATURE_OPTIONS
|
|
-DLLVM_ENABLE_ASSERTIONS=OFF
|
|
)
|
|
endif()
|
|
|
|
# LLVM_ABI_BREAKING_CHECKS can be WITH_ASSERTS (default), FORCE_ON or FORCE_OFF.
|
|
# By default abi-breaking checks are enabled if assertions are enabled.
|
|
if("enable-abi-breaking-checks" IN_LIST FEATURES)
|
|
# Force enable abi-breaking checks.
|
|
list(APPEND FEATURE_OPTIONS
|
|
-DLLVM_ABI_BREAKING_CHECKS=FORCE_ON
|
|
)
|
|
elseif("disable-abi-breaking-checks" IN_LIST FEATURES)
|
|
# Force disable abi-breaking checks.
|
|
list(APPEND FEATURE_OPTIONS
|
|
-DLLVM_ABI_BREAKING_CHECKS=FORCE_OFF
|
|
)
|
|
endif()
|
|
|
|
set(LLVM_ENABLE_PROJECTS)
|
|
if("clang" IN_LIST FEATURES OR "clang-tools-extra" IN_LIST FEATURES)
|
|
list(APPEND LLVM_ENABLE_PROJECTS "clang")
|
|
if("disable-clang-static-analyzer" IN_LIST FEATURES)
|
|
list(APPEND FEATURE_OPTIONS
|
|
# Disable ARCMT
|
|
-DCLANG_ENABLE_ARCMT=OFF
|
|
# Disable static analyzer
|
|
-DCLANG_ENABLE_STATIC_ANALYZER=OFF
|
|
)
|
|
endif()
|
|
if(VCPKG_TARGET_IS_WINDOWS)
|
|
list(APPEND FEATURE_OPTIONS
|
|
# Disable dl library on Windows
|
|
-DDL_LIBRARY_PATH:FILEPATH=
|
|
)
|
|
endif()
|
|
endif()
|
|
if("clang-tools-extra" IN_LIST FEATURES)
|
|
list(APPEND LLVM_ENABLE_PROJECTS "clang-tools-extra")
|
|
endif()
|
|
if("compiler-rt" IN_LIST FEATURES)
|
|
list(APPEND LLVM_ENABLE_PROJECTS "compiler-rt")
|
|
endif()
|
|
if("lld" IN_LIST FEATURES)
|
|
list(APPEND LLVM_ENABLE_PROJECTS "lld")
|
|
endif()
|
|
if("openmp" IN_LIST FEATURES)
|
|
list(APPEND LLVM_ENABLE_PROJECTS "openmp")
|
|
# Perl is required for the OpenMP run-time
|
|
vcpkg_find_acquire_program(PERL)
|
|
list(APPEND FEATURE_OPTIONS
|
|
-DPERL_EXECUTABLE=${PERL}
|
|
)
|
|
endif()
|
|
if("lldb" IN_LIST FEATURES)
|
|
list(APPEND LLVM_ENABLE_PROJECTS "lldb")
|
|
endif()
|
|
if("polly" IN_LIST FEATURES)
|
|
list(APPEND LLVM_ENABLE_PROJECTS "polly")
|
|
endif()
|
|
|
|
set(LLVM_TARGETS_TO_BUILD)
|
|
if("target-all" IN_LIST FEATURES)
|
|
set(LLVM_TARGETS_TO_BUILD "all")
|
|
else()
|
|
if("target-aarch64" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "AArch64")
|
|
endif()
|
|
if("target-amdgpu" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "AMDGPU")
|
|
endif()
|
|
if("target-arm" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "ARM")
|
|
endif()
|
|
if("target-bpf" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "BPF")
|
|
endif()
|
|
if("target-hexagon" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "Hexagon")
|
|
endif()
|
|
if("target-lanai" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "Lanai")
|
|
endif()
|
|
if("target-mips" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "Mips")
|
|
endif()
|
|
if("target-msp430" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "MSP430")
|
|
endif()
|
|
if("target-nvptx" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "NVPTX")
|
|
endif()
|
|
if("target-powerpc" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "PowerPC")
|
|
endif()
|
|
if("target-riscv" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "RISCV")
|
|
endif()
|
|
if("target-sparc" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "Sparc")
|
|
endif()
|
|
if("target-systemz" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "SystemZ")
|
|
endif()
|
|
if("target-webassembly" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "WebAssembly")
|
|
endif()
|
|
if("target-x86" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "X86")
|
|
endif()
|
|
if("target-xcore" IN_LIST FEATURES)
|
|
list(APPEND LLVM_TARGETS_TO_BUILD "XCore")
|
|
endif()
|
|
endif()
|
|
|
|
# Detect target to build if not specified
|
|
if("${LLVM_TARGETS_TO_BUILD}" STREQUAL "")
|
|
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
|
|
set(LLVM_TARGETS_TO_BUILD "X86")
|
|
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
|
|
set(LLVM_TARGETS_TO_BUILD "ARM")
|
|
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
|
|
set(LLVM_TARGETS_TO_BUILD "AArch64")
|
|
else()
|
|
set(LLVM_TARGETS_TO_BUILD "all")
|
|
endif()
|
|
endif()
|
|
|
|
# Use comma-separated string instead of semicolon-separated string.
|
|
# See https://github.com/microsoft/vcpkg/issues/4320
|
|
string(REPLACE ";" "," LLVM_ENABLE_PROJECTS "${LLVM_ENABLE_PROJECTS}")
|
|
string(REPLACE ";" "," LLVM_TARGETS_TO_BUILD "${LLVM_TARGETS_TO_BUILD}")
|
|
|
|
vcpkg_find_acquire_program(PYTHON3)
|
|
|
|
vcpkg_configure_cmake(
|
|
SOURCE_PATH ${SOURCE_PATH}/llvm
|
|
PREFER_NINJA
|
|
OPTIONS
|
|
${FEATURE_OPTIONS}
|
|
-DLLVM_INCLUDE_EXAMPLES=OFF
|
|
-DLLVM_BUILD_EXAMPLES=OFF
|
|
-DLLVM_INCLUDE_TESTS=OFF
|
|
-DLLVM_BUILD_TESTS=OFF
|
|
# Disable optional dependencies to libxml2 and zlib
|
|
-DLLVM_ENABLE_LIBXML2=OFF
|
|
-DLLVM_ENABLE_ZLIB=OFF
|
|
# Force TableGen to be built with optimization. This will significantly improve build time.
|
|
-DLLVM_OPTIMIZED_TABLEGEN=ON
|
|
# LLVM generates CMake error due to Visual Studio version 16.4 is known to miscompile part of LLVM.
|
|
# LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON disables this error.
|
|
# See https://developercommunity.visualstudio.com/content/problem/845933/miscompile-boolean-condition-deduced-to-be-always.html
|
|
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
|
|
-DLLVM_ENABLE_PROJECTS=${LLVM_ENABLE_PROJECTS}
|
|
-DLLVM_TARGETS_TO_BUILD=${LLVM_TARGETS_TO_BUILD}
|
|
-DPACKAGE_VERSION=${VERSION}
|
|
-DPYTHON_EXECUTABLE=${PYTHON3}
|
|
# Limit the maximum number of concurrent link jobs to 1. This should fix low amount of memory issue for link.
|
|
-DLLVM_PARALLEL_LINK_JOBS=1
|
|
# Disable build LLVM-C.dll (Windows only) due to doesn't compile with CMAKE_DEBUG_POSTFIX
|
|
-DLLVM_BUILD_LLVM_C_DYLIB=OFF
|
|
-DCMAKE_DEBUG_POSTFIX=d
|
|
)
|
|
|
|
vcpkg_install_cmake()
|
|
vcpkg_fixup_cmake_targets(CONFIG_PATH share/llvm)
|
|
vcpkg_fixup_cmake_targets(CONFIG_PATH share/clang TARGET_PATH share/clang)
|
|
|
|
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
|
|
file(GLOB_RECURSE _llvm_release_targets
|
|
"${CURRENT_PACKAGES_DIR}/share/llvm/*-release.cmake"
|
|
)
|
|
set(_clang_release_targets)
|
|
if("clang" IN_LIST FEATURES)
|
|
file(GLOB_RECURSE _clang_release_targets
|
|
"${CURRENT_PACKAGES_DIR}/share/clang/*-release.cmake"
|
|
)
|
|
endif()
|
|
foreach(_target IN LISTS _llvm_release_targets _clang_release_targets)
|
|
file(READ ${_target} _contents)
|
|
# LLVM tools should be located in the bin folder because llvm-config expects to be inside a bin dir.
|
|
# Rename `/tools/${PORT}` to `/bin` back because there is no way to avoid this in vcpkg_fixup_cmake_targets.
|
|
string(REPLACE "{_IMPORT_PREFIX}/tools/${PORT}" "{_IMPORT_PREFIX}/bin" _contents "${_contents}")
|
|
file(WRITE ${_target} "${_contents}")
|
|
endforeach()
|
|
endif()
|
|
|
|
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
|
|
file(GLOB_RECURSE _llvm_debug_targets
|
|
"${CURRENT_PACKAGES_DIR}/share/llvm/*-debug.cmake"
|
|
)
|
|
set(_clang_debug_targets)
|
|
if("clang" IN_LIST FEATURES)
|
|
file(GLOB_RECURSE _clang_debug_targets
|
|
"${CURRENT_PACKAGES_DIR}/share/clang/*-debug.cmake"
|
|
)
|
|
endif()
|
|
foreach(_target IN LISTS _llvm_debug_targets _clang_debug_targets)
|
|
file(READ ${_target} _contents)
|
|
# LLVM tools should be located in the bin folder because llvm-config expects to be inside a bin dir.
|
|
# Rename `/tools/${PORT}` to `/bin` back because there is no way to avoid this in vcpkg_fixup_cmake_targets.
|
|
string(REPLACE "{_IMPORT_PREFIX}/tools/${PORT}" "{_IMPORT_PREFIX}/bin" _contents "${_contents}")
|
|
# Debug shared libraries should have `d` suffix and should be installed in the `/bin` directory.
|
|
# Rename `/debug/bin/` to `/bin`
|
|
string(REPLACE "{_IMPORT_PREFIX}/debug/bin/" "{_IMPORT_PREFIX}/bin/" _contents "${_contents}")
|
|
file(WRITE ${_target} "${_contents}")
|
|
endforeach()
|
|
|
|
# Install debug shared libraries in the `/bin` directory
|
|
file(GLOB _debug_shared_libs ${CURRENT_PACKAGES_DIR}/debug/bin/*${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
file(INSTALL ${_debug_shared_libs} DESTINATION ${CURRENT_PACKAGES_DIR}/bin)
|
|
|
|
file(REMOVE_RECURSE
|
|
${CURRENT_PACKAGES_DIR}/debug/bin
|
|
${CURRENT_PACKAGES_DIR}/debug/include
|
|
${CURRENT_PACKAGES_DIR}/debug/share
|
|
)
|
|
endif()
|
|
|
|
# Handle copyright
|
|
file(INSTALL ${SOURCE_PATH}/llvm/LICENSE.TXT DESTINATION ${CURRENT_PACKAGES_DIR}/share/llvm RENAME copyright)
|
|
if("clang" IN_LIST FEATURES)
|
|
file(INSTALL ${SOURCE_PATH}/clang/LICENSE.TXT DESTINATION ${CURRENT_PACKAGES_DIR}/share/clang RENAME copyright)
|
|
endif()
|
|
|
|
# Don't fail if the bin folder exists.
|
|
set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
|