mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-26 17:41:09 +08:00
[llvm] Update to version 10.0.0 and add new features (#10295)
* [llvm] Update to version 10.0.0 and new features * switch to llvmorg-10.0.0-rc3, allow to use bin directory for tools * Fix CMake targets after vcpkg_fixup_cmake_targets call. * [halide] Update to master version to support LLVM 10 * [halide] fix x64-osx build * [llvm] add enable-assertions feature * [llvm] fix comment * [llvm] enable ci for x64-linux and x64-osx * [llvm] update to v10.0.0-rc5 [llvm] disable assertions and ABI breaking checks by default [llvm] limit the maximum number of concurrent link jobs to 1 [llvm] add postfix `d` and debug shared libraries in the `/bin` directory * [llvm] revert debug postfix `d` [llvm] don't remove debug version of tools and shared libs * [llvm] fix debug tools path * [llvm] update to release tag llvmorg-10.0.0 [llvm] build with CMAKE_DEBUG_POSTFIX=d [llvm] remove debug binaries * remove new CMake argument FOLLOW_SYMLINK_CHAIN * [llvm] force TableGen to be built with optimization * [llvm] add future disable-clang-static-analyzer * [llvm] add futures for main targets [llvm] remove utils and clang-tools-extra from default features list [llvm] exclude tests * [llvm] add features for main targets [llvm] remove utils and clang-tools-extra from default features list [llvm] exclude tests * [llvm] update features description Co-authored-by: Jack·Boos·Yu <47264268+JackBoosY@users.noreply.github.com>
This commit is contained in:
parent
0ab1a9e1c6
commit
cfc05991f5
@ -1,5 +1,5 @@
|
||||
Source: halide
|
||||
Version: release_2019_08_27-2
|
||||
Version: master_2020_03_07
|
||||
Homepage: https://github.com/halide/Halide
|
||||
Description: Halide is a programming language designed to make it easier to write high-performance image processing code on modern machines.
|
||||
Build-Depends: llvm[tools], openblas
|
||||
|
@ -1,8 +1,8 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 4ba3843..6697118 100644
|
||||
index 577b61ed2..7c6dd8ac4 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -450,7 +450,7 @@ install(FILES
|
||||
@@ -432,7 +432,7 @@ install(FILES
|
||||
DESTINATION include)
|
||||
|
||||
install(DIRECTORY tutorial
|
||||
@ -11,22 +11,20 @@ index 4ba3843..6697118 100644
|
||||
FILES_MATCHING
|
||||
PATTERN "*.cpp"
|
||||
PATTERN "*.h"
|
||||
@@ -478,12 +478,12 @@ endforeach()
|
||||
# ---- README
|
||||
file(GLOB FILES "${HALIDE_BASE_DIR}/*.md")
|
||||
install(FILES ${FILES}
|
||||
@@ -463,10 +463,10 @@ install(FILES
|
||||
README.md
|
||||
README_rungen.md
|
||||
README_webassembly.md
|
||||
- DESTINATION .)
|
||||
+ DESTINATION share/halide)
|
||||
|
||||
# ---- halide.cmake
|
||||
file(GLOB FILES "${HALIDE_BASE_DIR}/*.cmake")
|
||||
install(FILES ${FILES}
|
||||
- DESTINATION .)
|
||||
+ DESTINATION share/halide)
|
||||
-install(FILES halide.cmake DESTINATION .)
|
||||
+install(FILES halide.cmake DESTINATION share/halide)
|
||||
|
||||
# ---- halide_config
|
||||
file(GLOB FILES "${HALIDE_BASE_DIR}/tools/halide_config.*.tpl")
|
||||
@@ -492,7 +492,7 @@ foreach(F ${FILES})
|
||||
file(GLOB FILES "${Halide_SOURCE_DIR}/tools/halide_config.*.tpl")
|
||||
@@ -475,7 +475,7 @@ foreach(F ${FILES})
|
||||
string(REGEX REPLACE "\\.tpl$" "" FNAME "${FNAME}") # Strip .tpl extension
|
||||
configure_file("${F}" "${CMAKE_BINARY_DIR}/${FNAME}" @ONLY)
|
||||
install(FILES "${CMAKE_BINARY_DIR}/${FNAME}"
|
||||
|
@ -1,8 +1,8 @@
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH SOURCE_PATH
|
||||
REPO halide/Halide
|
||||
REF 65c26cba6a3eca2d08a0bccf113ca28746012cc3 #release_2019_08_27
|
||||
SHA512 f95b31ec08a6c4e618a5c03b6ae9e0b41888035a268e82ee73abde8ea34dff325db270f1ff10387ef03de27e274ad27c7ccbc873c0b75bb6c1a8112cf3765c5d
|
||||
REF f43293be3725bb959941e38c1b1fa9ae925f7389
|
||||
SHA512 f223185e208acf6c5b73353a6b5be815db5f2598f568596e800c35ea40b0babe4630da44229e14a5607e9d5e78298d07e7b36a9cbc7b71bf3e665bc12caff68e
|
||||
HEAD_REF master
|
||||
PATCHES
|
||||
fix-install-path.patch
|
||||
|
30
ports/llvm/0001-allow-to-use-commas.patch
Normal file
30
ports/llvm/0001-allow-to-use-commas.patch
Normal file
@ -0,0 +1,30 @@
|
||||
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
|
||||
index a02c2a5a23f..bdbf0b1303c 100644
|
||||
--- a/llvm/CMakeLists.txt
|
||||
+++ b/llvm/CMakeLists.txt
|
||||
@@ -70,6 +70,12 @@ if( LLVM_ENABLE_PROJECTS STREQUAL "all" )
|
||||
set( LLVM_ENABLE_PROJECTS ${LLVM_ALL_PROJECTS})
|
||||
endif()
|
||||
|
||||
+# Allow to use commas in LLVM_ENABLE_PROJECTS ("llvm,clang,...")
|
||||
+string(REPLACE "," ";" fixed_LLVM_ENABLE_PROJECTS "${LLVM_ENABLE_PROJECTS}")
|
||||
+if(NOT fixed_LLVM_ENABLE_PROJECTS STREQUAL LLVM_ENABLE_PROJECTS)
|
||||
+ set(LLVM_ENABLE_PROJECTS "${fixed_LLVM_ENABLE_PROJECTS}" CACHE STRING "" FORCE)
|
||||
+endif()
|
||||
+
|
||||
# LLVM_ENABLE_PROJECTS_USED is `ON` if the user has ever used the
|
||||
# `LLVM_ENABLE_PROJECTS` CMake cache variable. This exists for
|
||||
# several reasons:
|
||||
@@ -383,6 +389,12 @@ set(LLVM_TARGETS_TO_BUILD
|
||||
${LLVM_EXPERIMENTAL_TARGETS_TO_BUILD})
|
||||
list(REMOVE_DUPLICATES LLVM_TARGETS_TO_BUILD)
|
||||
|
||||
+# Allow to use commas in the LLVM_TARGETS_TO_BUILD ("X86,AArch64,...")
|
||||
+string(REPLACE "," ";" fixed_LLVM_TARGETS_TO_BUILD "${LLVM_TARGETS_TO_BUILD}")
|
||||
+if(NOT fixed_LLVM_TARGETS_TO_BUILD STREQUAL LLVM_TARGETS_TO_BUILD)
|
||||
+ set(LLVM_TARGETS_TO_BUILD "${fixed_LLVM_TARGETS_TO_BUILD}" CACHE STRING "" FORCE)
|
||||
+endif()
|
||||
+
|
||||
option(LLVM_ENABLE_PIC "Build Position-Independent Code" ON)
|
||||
option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON)
|
||||
option(LLVM_ENABLE_MODULES "Compile with C++ modules enabled." OFF)
|
42
ports/llvm/0002-fix-install-paths.patch
Normal file
42
ports/llvm/0002-fix-install-paths.patch
Normal file
@ -0,0 +1,42 @@
|
||||
diff --git a/clang/cmake/modules/CMakeLists.txt b/clang/cmake/modules/CMakeLists.txt
|
||||
index d233f552f01..26f502ad2d2 100644
|
||||
--- a/clang/cmake/modules/CMakeLists.txt
|
||||
+++ b/clang/cmake/modules/CMakeLists.txt
|
||||
@@ -1,11 +1,11 @@
|
||||
# Generate a list of CMake library targets so that other CMake projects can
|
||||
# link against them. LLVM calls its version of this file LLVMExports.cmake, but
|
||||
# the usual CMake convention seems to be ${Project}Targets.cmake.
|
||||
-set(CLANG_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/clang)
|
||||
+set(CLANG_INSTALL_PACKAGE_DIR share/clang)
|
||||
set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/${CLANG_INSTALL_PACKAGE_DIR}")
|
||||
|
||||
# Keep this in sync with llvm/cmake/CMakeLists.txt!
|
||||
-set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm)
|
||||
+set(LLVM_INSTALL_PACKAGE_DIR share/llvm)
|
||||
set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
|
||||
get_property(CLANG_EXPORTS GLOBAL PROPERTY CLANG_EXPORTS)
|
||||
diff --git a/llvm/cmake/modules/CMakeLists.txt b/llvm/cmake/modules/CMakeLists.txt
|
||||
index 9cf22b436fa..8eeb27d1794 100644
|
||||
--- a/llvm/cmake/modules/CMakeLists.txt
|
||||
+++ b/llvm/cmake/modules/CMakeLists.txt
|
||||
@@ -1,4 +1,4 @@
|
||||
-set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm)
|
||||
+set(LLVM_INSTALL_PACKAGE_DIR share/llvm)
|
||||
set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
|
||||
# First for users who use an installed LLVM, create the LLVMExports.cmake file.
|
||||
diff --git a/polly/cmake/CMakeLists.txt b/polly/cmake/CMakeLists.txt
|
||||
index 211f9551271..2abe3803f91 100644
|
||||
--- a/polly/cmake/CMakeLists.txt
|
||||
+++ b/polly/cmake/CMakeLists.txt
|
||||
@@ -1,7 +1,7 @@
|
||||
# Keep this in sync with llvm/cmake/CMakeLists.txt!
|
||||
|
||||
-set(LLVM_INSTALL_PACKAGE_DIR "lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
|
||||
-set(POLLY_INSTALL_PACKAGE_DIR "lib${LLVM_LIBDIR_SUFFIX}/cmake/polly")
|
||||
+set(LLVM_INSTALL_PACKAGE_DIR share/llvm)
|
||||
+set(POLLY_INSTALL_PACKAGE_DIR share/polly)
|
||||
if (CMAKE_CONFIGURATION_TYPES)
|
||||
set(POLLY_EXPORTS_FILE_NAME "PollyExports-$<LOWER_CASE:$<CONFIG>>.cmake")
|
||||
else()
|
@ -1,19 +1,75 @@
|
||||
Source: llvm
|
||||
Version: 8.0.0-5
|
||||
Version: 10.0.0
|
||||
Homepage: https://llvm.org/
|
||||
Description: The LLVM Compiler Infrastructure
|
||||
Build-Depends: atlmfc (windows)
|
||||
Supports: !uwp
|
||||
Default-Features: utils
|
||||
Default-Features: tools, enable-rtti, disable-assertions, disable-abi-breaking-checks, clang, disable-clang-static-analyzer, lld
|
||||
|
||||
Feature: tools
|
||||
Description: Generate build targets for the LLVM tools.
|
||||
Description: Build LLVM tools.
|
||||
|
||||
Feature: utils
|
||||
Description: Generate build targets for the LLVM utils.
|
||||
Description: Build LLVM utils.
|
||||
|
||||
Feature: example
|
||||
Description: Generate build targets for the LLVM examples
|
||||
Feature: target-all
|
||||
Description: Build with all backends.
|
||||
|
||||
Feature: test
|
||||
Description: Generate build targets for the LLVM unit tests.
|
||||
Feature: target-aarch64
|
||||
Description: Build with AArch64 backend.
|
||||
|
||||
Feature: target-arm
|
||||
Description: Build with ARM backend.
|
||||
|
||||
Feature: target-mips
|
||||
Description: Build with Mips backend.
|
||||
|
||||
Feature: target-powerpc
|
||||
Description: Build with PowerPC backend.
|
||||
|
||||
Feature: target-systemz
|
||||
Description: Build with SystemZ backend.
|
||||
|
||||
Feature: target-webassembly
|
||||
Description: Build with WebAssembly backend.
|
||||
|
||||
Feature: target-x86
|
||||
Description: Build with X86 backend.
|
||||
|
||||
Feature: enable-rtti
|
||||
Description: Build LLVM with run-time type information.
|
||||
|
||||
Feature: enable-assertions
|
||||
Description: Build LLVM with assertions.
|
||||
|
||||
Feature: disable-assertions
|
||||
Description: Build LLVM without assertions.
|
||||
|
||||
Feature: enable-abi-breaking-checks
|
||||
Description: Build LLVM with LLVM_ABI_BREAKING_CHECKS=FORCE_ON.
|
||||
|
||||
Feature: disable-abi-breaking-checks
|
||||
Description: Build LLVM with LLVM_ABI_BREAKING_CHECKS=FORCE_OFF.
|
||||
|
||||
Feature: clang
|
||||
Description: Build C Language Family Front-end.
|
||||
|
||||
Feature: disable-clang-static-analyzer
|
||||
Description: Build without static analyzer.
|
||||
|
||||
Feature: clang-tools-extra
|
||||
Description: Build Clang tools.
|
||||
|
||||
Feature: compiler-rt
|
||||
Description: Build compiler's runtime libraries.
|
||||
|
||||
Feature: lld
|
||||
Description: Build LLVM linker.
|
||||
|
||||
Feature: openmp
|
||||
Description: Build LLVM OpenMP libraries.
|
||||
|
||||
Feature: lldb
|
||||
Description: Build LLDB debugger.
|
||||
|
||||
Feature: polly
|
||||
Description: Build polyhedral optimizations for LLVM.
|
||||
|
@ -1,14 +0,0 @@
|
||||
--- a/tools/libclang/CMakeLists.txt
|
||||
+++ b/tools/libclang/CMakeLists.txt
|
||||
@@ -56,10 +56,7 @@ if (TARGET clangTidyPlugin)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
-find_library(DL_LIBRARY_PATH dl)
|
||||
-if (DL_LIBRARY_PATH)
|
||||
- list(APPEND LIBS dl)
|
||||
-endif()
|
||||
+list(APPEND LIBS "${DL_LIBRARY_PATH}")
|
||||
|
||||
option(LIBCLANG_BUILD_STATIC
|
||||
"Build libclang as a static library (in addition to a shared one)" OFF)
|
@ -1,13 +0,0 @@
|
||||
diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake
|
||||
index 900c35e..78fd3cd 100644
|
||||
--- a/cmake/config-ix.cmake
|
||||
+++ b/cmake/config-ix.cmake
|
||||
@@ -154,7 +154,7 @@ if(NOT LLVM_USE_SANITIZER MATCHES "Memory.*")
|
||||
else()
|
||||
include_directories(${LIBXML2_INCLUDE_DIR})
|
||||
endif()
|
||||
- set(LIBXML2_LIBS "xml2")
|
||||
+ set(LIBXML2_LIBS ${LIBXML2_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
@ -1,18 +0,0 @@
|
||||
diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt
|
||||
index be6d1d72..4749f64b 100644
|
||||
--- a/cmake/modules/CMakeLists.txt
|
||||
+++ b/cmake/modules/CMakeLists.txt
|
||||
@@ -1,11 +1,11 @@
|
||||
# Generate a list of CMake library targets so that other CMake projects can
|
||||
# link against them. LLVM calls its version of this file LLVMExports.cmake, but
|
||||
# the usual CMake convention seems to be ${Project}Targets.cmake.
|
||||
-set(CLANG_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/clang)
|
||||
+set(CLANG_INSTALL_PACKAGE_DIR share/clang)
|
||||
set(clang_cmake_builddir "${CMAKE_BINARY_DIR}/${CLANG_INSTALL_PACKAGE_DIR}")
|
||||
|
||||
# Keep this in sync with llvm/cmake/CMakeLists.txt!
|
||||
-set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm)
|
||||
+set(LLVM_INSTALL_PACKAGE_DIR share/llvm)
|
||||
set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
|
||||
get_property(CLANG_EXPORTS GLOBAL PROPERTY CLANG_EXPORTS)
|
@ -1,10 +0,0 @@
|
||||
diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt
|
||||
index f5cc0006..1d9c52ac 100644
|
||||
--- a/cmake/modules/CMakeLists.txt
|
||||
+++ b/cmake/modules/CMakeLists.txt
|
||||
@@ -1,4 +1,4 @@
|
||||
-set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm)
|
||||
+set(LLVM_INSTALL_PACKAGE_DIR share/llvm)
|
||||
set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
|
||||
# First for users who use an installed LLVM, create the LLVMExports.cmake file.
|
@ -1,139 +1,214 @@
|
||||
include(vcpkg_common_functions)
|
||||
|
||||
# LLVM documentation recommends always using static library linkage when
|
||||
# building with Microsoft toolchain; it's also the default on other platforms
|
||||
set(VERSION "10.0.0")
|
||||
|
||||
vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
|
||||
|
||||
if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
|
||||
message(FATAL_ERROR "llvm cannot currently be built for UWP")
|
||||
endif()
|
||||
|
||||
vcpkg_download_distfile(ARCHIVE
|
||||
URLS "http://releases.llvm.org/8.0.0/llvm-8.0.0.src.tar.xz"
|
||||
FILENAME "llvm-8.0.0.src.tar.xz"
|
||||
SHA512 1602343b451b964f5d8c2d6b0654d89384c80d45883498c5f0e2f4196168dd4a1ed2a4dadb752076020243df42ffe46cb31d82ffc145d8e5874163cbb9686a1f
|
||||
)
|
||||
|
||||
vcpkg_extract_source_archive_ex(
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH SOURCE_PATH
|
||||
ARCHIVE ${ARCHIVE}
|
||||
REPO llvm/llvm-project
|
||||
REF llvmorg-10.0.0
|
||||
SHA512 baa182d62fef1851836013ae8a1a00861ea89769778d67fb97b407a9de664e6c85da2af9c5b3f75d2bf34ff6b00004e531ca7e4b3115a26c0e61c575cf2303a0
|
||||
HEAD_REF master
|
||||
PATCHES
|
||||
install-llvm-modules-to-share.patch
|
||||
fix-linux-build.patch
|
||||
0001-allow-to-use-commas.patch
|
||||
0002-fix-install-paths.patch
|
||||
)
|
||||
|
||||
vcpkg_download_distfile(CLANG_ARCHIVE
|
||||
URLS "http://releases.llvm.org/8.0.0/cfe-8.0.0.src.tar.xz"
|
||||
FILENAME "cfe-8.0.0.src.tar.xz"
|
||||
SHA512 98e540222719716985e5d8439116e47469cb01201ea91d1da7e46cb6633da099688d9352c3b65e5c5f660cbbae353b3d79bb803fc66b3be663f2b04b1feed1c3
|
||||
)
|
||||
|
||||
vcpkg_extract_source_archive_ex(
|
||||
OUT_SOURCE_PATH CLANG_SOURCE_PATH
|
||||
ARCHIVE ${CLANG_ARCHIVE}
|
||||
PATCHES
|
||||
fix-build-error.patch
|
||||
install-clang-modules-to-share.patch
|
||||
)
|
||||
|
||||
if(NOT EXISTS ${SOURCE_PATH}/tools/clang)
|
||||
file(RENAME ${CLANG_SOURCE_PATH} ${SOURCE_PATH}/tools/clang)
|
||||
endif()
|
||||
|
||||
vcpkg_find_acquire_program(PYTHON3)
|
||||
get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
|
||||
set(ENV{PATH} "$ENV{PATH};${PYTHON3_DIR}")
|
||||
|
||||
vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
|
||||
tools LLVM_BUILD_TOOLS
|
||||
tools LLVM_INCLUDE_TOOLS
|
||||
utils LLVM_BUILD_UTILS
|
||||
utils LLVM_INCLUDE_UTILS
|
||||
example LLVM_INCLUDE_EXAMPLES
|
||||
test LLVM_INCLUDE_TESTS
|
||||
enable-rtti LLVM_ENABLE_RTTI
|
||||
)
|
||||
|
||||
vcpkg_configure_cmake(
|
||||
SOURCE_PATH ${SOURCE_PATH}
|
||||
PREFER_NINJA
|
||||
OPTIONS ${FEATURE_OPTIONS}
|
||||
-DLLVM_TARGETS_TO_BUILD=X86
|
||||
# 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
|
||||
-DLLVM_TOOLS_INSTALL_DIR=tools/llvm
|
||||
)
|
||||
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()
|
||||
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-arm" IN_LIST FEATURES)
|
||||
list(APPEND LLVM_TARGETS_TO_BUILD "ARM")
|
||||
endif()
|
||||
if("target-mips" IN_LIST FEATURES)
|
||||
list(APPEND LLVM_TARGETS_TO_BUILD "Mips")
|
||||
endif()
|
||||
if("target-powerpc" IN_LIST FEATURES)
|
||||
list(APPEND LLVM_TARGETS_TO_BUILD "PowerPC")
|
||||
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()
|
||||
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 for enabled projects 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
|
||||
# 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()
|
||||
|
||||
if((NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") AND "tools" IN_LIST FEATURES)
|
||||
file(GLOB EXE ${CURRENT_PACKAGES_DIR}/bin/*)
|
||||
file(COPY ${EXE} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/llvm)
|
||||
file(REMOVE ${EXE})
|
||||
endif()
|
||||
|
||||
if((NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") AND "tools" IN_LIST FEATURES)
|
||||
file(GLOB DEBUG_EXE ${CURRENT_PACKAGES_DIR}/debug/bin/*)
|
||||
file(COPY ${DEBUG_EXE} DESTINATION ${CURRENT_PACKAGES_DIR}/debug/tools/llvm)
|
||||
file(REMOVE ${DEBUG_EXE})
|
||||
endif()
|
||||
|
||||
if ("tools" IN_LIST FEATURES)
|
||||
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(READ ${CURRENT_PACKAGES_DIR}/share/clang/ClangTargets-release.cmake RELEASE_MODULE)
|
||||
string(REPLACE "\${_IMPORT_PREFIX}/bin" "\${_IMPORT_PREFIX}/tools/llvm" RELEASE_MODULE "${RELEASE_MODULE}")
|
||||
file(WRITE ${CURRENT_PACKAGES_DIR}/share/clang/ClangTargets-release.cmake "${RELEASE_MODULE}")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
|
||||
file(READ ${CURRENT_PACKAGES_DIR}/share/clang/ClangTargets-debug.cmake DEBUG_MODULE)
|
||||
string(REPLACE "\${_IMPORT_PREFIX}/debug/bin" "\${_IMPORT_PREFIX}/tools/llvm" DEBUG_MODULE "${DEBUG_MODULE}")
|
||||
file(WRITE ${CURRENT_PACKAGES_DIR}/share/clang/ClangTargets-debug.cmake "${DEBUG_MODULE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
vcpkg_fixup_cmake_targets(CONFIG_PATH share/llvm)
|
||||
vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/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(READ ${CURRENT_PACKAGES_DIR}/share/llvm/LLVMExports-release.cmake RELEASE_MODULE)
|
||||
string(REPLACE "\${_IMPORT_PREFIX}/bin" "\${_IMPORT_PREFIX}/tools/llvm" RELEASE_MODULE "${RELEASE_MODULE}")
|
||||
file(WRITE ${CURRENT_PACKAGES_DIR}/share/llvm/LLVMExports-release.cmake "${RELEASE_MODULE}")
|
||||
file(GLOB_RECURSE _release_targets
|
||||
"${CURRENT_PACKAGES_DIR}/share/llvm/*-release.cmake"
|
||||
"${CURRENT_PACKAGES_DIR}/share/clang/*-release.cmake"
|
||||
)
|
||||
foreach(_target IN LISTS _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(READ ${CURRENT_PACKAGES_DIR}/share/llvm/LLVMExports-debug.cmake DEBUG_MODULE)
|
||||
string(REPLACE "\${_IMPORT_PREFIX}/debug/bin" "\${_IMPORT_PREFIX}/tools/llvm" DEBUG_MODULE "${DEBUG_MODULE}")
|
||||
file(WRITE ${CURRENT_PACKAGES_DIR}/share/llvm/LLVMExports-debug.cmake "${DEBUG_MODULE}")
|
||||
endif()
|
||||
file(GLOB_RECURSE _debug_targets
|
||||
"${CURRENT_PACKAGES_DIR}/share/llvm/*-debug.cmake"
|
||||
"${CURRENT_PACKAGES_DIR}/share/clang/*-debug.cmake"
|
||||
)
|
||||
foreach(_target IN LISTS _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()
|
||||
|
||||
if (EXISTS ${CURRENT_PACKAGES_DIR}/share/llvm/LLVMConfig.cmake)
|
||||
file(READ ${CURRENT_PACKAGES_DIR}/share/llvm/LLVMConfig.cmake LLVM_TOOLS_MODULE)
|
||||
string(REPLACE "\${LLVM_INSTALL_PREFIX}/bin" "\${LLVM_INSTALL_PREFIX}/tools/llvm" LLVM_TOOLS_MODULE "${LLVM_TOOLS_MODULE}")
|
||||
file(WRITE ${CURRENT_PACKAGES_DIR}/share/llvm/LLVMConfig.cmake "${LLVM_TOOLS_MODULE}")
|
||||
endif()
|
||||
# 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/include
|
||||
${CURRENT_PACKAGES_DIR}/debug/tools
|
||||
${CURRENT_PACKAGES_DIR}/debug/share
|
||||
${CURRENT_PACKAGES_DIR}/debug/bin
|
||||
${CURRENT_PACKAGES_DIR}/debug/msbuild-bin
|
||||
${CURRENT_PACKAGES_DIR}/bin
|
||||
${CURRENT_PACKAGES_DIR}/msbuild-bin
|
||||
${CURRENT_PACKAGES_DIR}/tools/msbuild-bin
|
||||
${CURRENT_PACKAGES_DIR}/include/llvm/BinaryFormat/WasmRelocs
|
||||
)
|
||||
|
||||
# Remove two empty include subdirectorys if they are indeed empty
|
||||
file(GLOB MCANALYSISFILES ${CURRENT_PACKAGES_DIR}/include/llvm/MC/MCAnalysis/*)
|
||||
if(NOT MCANALYSISFILES)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/llvm/MC/MCAnalysis)
|
||||
endif()
|
||||
|
||||
file(GLOB MACHOFILES ${CURRENT_PACKAGES_DIR}/include/llvm/TextAPI/MachO/*)
|
||||
if(NOT MACHOFILES)
|
||||
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/llvm/TextAPI/MachO)
|
||||
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}/LICENSE.TXT DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME 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)
|
||||
|
@ -998,9 +998,6 @@ llgl:x64-uwp=fail
|
||||
llvm:arm64-windows=fail
|
||||
llvm:arm-uwp=fail
|
||||
llvm:x64-uwp=fail
|
||||
llvm:x64-linux=ignore
|
||||
# installing iconv makes building llvm fail; needs to be fixed
|
||||
llvm:x64-osx=ignore
|
||||
lmdb:arm64-windows=fail
|
||||
lmdb:arm-uwp=fail
|
||||
lmdb:x64-uwp=fail
|
||||
|
Loading…
x
Reference in New Issue
Block a user