aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryurybura <yurybura@gmail.com>2020-05-04 06:30:17 +0300
committerGitHub <noreply@github.com>2020-05-03 20:30:17 -0700
commitcfc05991f5a73ee4b2df7d9132fc8a5a6a42224e (patch)
tree372a23364f91d5f2ddfe16d833888986e75be120
parent0ab1a9e1c64a3968631b59647e771beda7d1f256 (diff)
downloadvcpkg-cfc05991f5a73ee4b2df7d9132fc8a5a6a42224e.tar.gz
vcpkg-cfc05991f5a73ee4b2df7d9132fc8a5a6a42224e.zip
[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>
-rw-r--r--ports/halide/CONTROL2
-rw-r--r--ports/halide/fix-install-path.patch22
-rw-r--r--ports/halide/portfile.cmake4
-rw-r--r--ports/llvm/0001-allow-to-use-commas.patch30
-rw-r--r--ports/llvm/0002-fix-install-paths.patch42
-rw-r--r--ports/llvm/CONTROL74
-rw-r--r--ports/llvm/fix-build-error.patch14
-rw-r--r--ports/llvm/fix-linux-build.patch13
-rw-r--r--ports/llvm/install-clang-modules-to-share.patch18
-rw-r--r--ports/llvm/install-llvm-modules-to-share.patch10
-rw-r--r--ports/llvm/portfile.cmake287
-rw-r--r--scripts/ci.baseline.txt3
12 files changed, 331 insertions, 188 deletions
diff --git a/ports/halide/CONTROL b/ports/halide/CONTROL
index 5120d8190..fe1f94474 100644
--- a/ports/halide/CONTROL
+++ b/ports/halide/CONTROL
@@ -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
diff --git a/ports/halide/fix-install-path.patch b/ports/halide/fix-install-path.patch
index 46ca4bd45..5fb24ea45 100644
--- a/ports/halide/fix-install-path.patch
+++ b/ports/halide/fix-install-path.patch
@@ -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}"
diff --git a/ports/halide/portfile.cmake b/ports/halide/portfile.cmake
index 058610ad5..4a6a04f72 100644
--- a/ports/halide/portfile.cmake
+++ b/ports/halide/portfile.cmake
@@ -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
diff --git a/ports/llvm/0001-allow-to-use-commas.patch b/ports/llvm/0001-allow-to-use-commas.patch
new file mode 100644
index 000000000..8276efa53
--- /dev/null
+++ b/ports/llvm/0001-allow-to-use-commas.patch
@@ -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)
diff --git a/ports/llvm/0002-fix-install-paths.patch b/ports/llvm/0002-fix-install-paths.patch
new file mode 100644
index 000000000..5e63424a4
--- /dev/null
+++ b/ports/llvm/0002-fix-install-paths.patch
@@ -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()
diff --git a/ports/llvm/CONTROL b/ports/llvm/CONTROL
index 64b4aebd4..d316be3c4 100644
--- a/ports/llvm/CONTROL
+++ b/ports/llvm/CONTROL
@@ -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.
diff --git a/ports/llvm/fix-build-error.patch b/ports/llvm/fix-build-error.patch
deleted file mode 100644
index f48df44ac..000000000
--- a/ports/llvm/fix-build-error.patch
+++ /dev/null
@@ -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)
diff --git a/ports/llvm/fix-linux-build.patch b/ports/llvm/fix-linux-build.patch
deleted file mode 100644
index 780ea6535..000000000
--- a/ports/llvm/fix-linux-build.patch
+++ /dev/null
@@ -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()
diff --git a/ports/llvm/install-clang-modules-to-share.patch b/ports/llvm/install-clang-modules-to-share.patch
deleted file mode 100644
index fa5eed84b..000000000
--- a/ports/llvm/install-clang-modules-to-share.patch
+++ /dev/null
@@ -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)
diff --git a/ports/llvm/install-llvm-modules-to-share.patch b/ports/llvm/install-llvm-modules-to-share.patch
deleted file mode 100644
index 802cf183e..000000000
--- a/ports/llvm/install-llvm-modules-to-share.patch
+++ /dev/null
@@ -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.
diff --git a/ports/llvm/portfile.cmake b/ports/llvm/portfile.cmake
index 85ffb48e4..5d0c6a1ba 100644
--- a/ports/llvm/portfile.cmake
+++ b/ports/llvm/portfile.cmake
@@ -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
-vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
-
-if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
- message(FATAL_ERROR "llvm cannot currently be built for UWP")
-endif()
+set(VERSION "10.0.0")
-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_check_linkage(ONLY_STATIC_LIBRARY)
-vcpkg_extract_source_archive_ex(
+vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
- ARCHIVE ${ARCHIVE}
- PATCHES
- install-llvm-modules-to-share.patch
- fix-linux-build.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}
+ REPO llvm/llvm-project
+ REF llvmorg-10.0.0
+ SHA512 baa182d62fef1851836013ae8a1a00861ea89769778d67fb97b407a9de664e6c85da2af9c5b3f75d2bf34ff6b00004e531ca7e4b3115a26c0e61c575cf2303a0
+ HEAD_REF master
PATCHES
- fix-build-error.patch
- install-clang-modules-to-share.patch
+ 0001-allow-to-use-commas.patch
+ 0002-fix-install-paths.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
- -DLLVM_ABI_BREAKING_CHECKS=FORCE_OFF
- -DLLVM_TOOLS_INSTALL_DIR=tools/llvm
- -DLLVM_PARALLEL_LINK_JOBS=1
-)
-
-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})
+# 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()
-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})
+# 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()
-if ("tools" IN_LIST FEATURES)
- vcpkg_fixup_cmake_targets(CONFIG_PATH share/clang TARGET_PATH share/clang)
+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()
- 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}")
+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(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}")
+ 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()
-vcpkg_fixup_cmake_targets(CONFIG_PATH share/llvm)
-vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/llvm)
-
-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}")
+# 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()
-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()
+# 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}")
-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()
+vcpkg_find_acquire_program(PYTHON3)
-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
+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
)
-# 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)
+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 _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()
-file(GLOB MACHOFILES ${CURRENT_PACKAGES_DIR}/include/llvm/TextAPI/MachO/*)
-if(NOT MACHOFILES)
- file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/llvm/TextAPI/MachO)
+if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ 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()
+
+ # 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}/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)
diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt
index b8695e15f..c8466ddd4 100644
--- a/scripts/ci.baseline.txt
+++ b/scripts/ci.baseline.txt
@@ -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