diff --git a/ports/halide/CONTROL b/ports/halide/CONTROL index 5120d81904..fe1f94474b 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 46ca4bd451..5fb24ea459 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 058610ad50..4a6a04f72b 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 0000000000..8276efa534 --- /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 0000000000..5e63424a44 --- /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-$>.cmake") + else() diff --git a/ports/llvm/CONTROL b/ports/llvm/CONTROL index 64b4aebd49..d316be3c43 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 f48df44ac1..0000000000 --- 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 780ea6535d..0000000000 --- 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 fa5eed84bb..0000000000 --- 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 802cf183e1..0000000000 --- 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 85ffb48e42..5d0c6a1ba0 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 +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) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index b8695e15fb..c8466ddd4f 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