Merge branch '12-llvm-runtimes-build' into '12'

LLVM llvm/clang 12 toolchain with runtimes build

See merge request pkg-llvm-team/llvm-toolchain!73
This commit is contained in:
Sylvestre Ledru 2021-10-14 19:23:01 +00:00
commit d24d6ab126
14 changed files with 454 additions and 273 deletions

23
debian/changelog vendored
View File

@ -1,3 +1,26 @@
llvm-toolchain-12 (1:12.0.1-11) UNRELEASED; urgency=medium
* evolve llvm build configuration in rules to leverage the two stage build
with runtimes support whereby the resulting stage2 (final) compiler is used
to build the stage2 (final) runtimes as part of a single monolithic build
* the stage2 runtimes build now includes compiler-rt, libcxx and libcxxabi as
well as libunwind and openmp where supported. Additionally, legacy
corresponding standalone build targets are removed from the rules file
* patch openmp build to include required runtimes as dependencies to build
targets so they are built first when included as part of a runtimes build
since openmp can depend on them
* patch libclc build to set rpath for prepare_builtins build utility to find
correct stage2 libs at runtime when executed as part of a build
* patch libcxx build so that if libatomic is found, only link it if libgcc is
the rtlib
* patch compiler-rt build to suppress xray and testing warns when not enabled
* patch llvm linker detection to account for vendor being prepended to lld
version string
* remove several existing patches incorporating workarounds no longer required
by the modified build configuration
-- Erik Maciejewski <mr.emacski@gmail.com> Wed, 06 Oct 2021 01:25:08 -0700
llvm-toolchain-12 (1:12.0.1-10) UNRELEASED; urgency=medium
* If parallel is not set in DEB_BUILD_OPTIONS, use nproc

1
debian/control vendored
View File

@ -6,6 +6,7 @@ Maintainer: LLVM Packaging Team <pkg-llvm-team@lists.alioth.debian.org>
Uploaders: Sylvestre Ledru <sylvestre@debian.org>, Gianfranco Costamagna <locutusofborg@debian.org>
Build-Depends: debhelper (>= 9.0), cmake, ninja-build,
chrpath, texinfo, sharutils,
libelf-dev,
libffi-dev,
lsb-release, patchutils, diffstat, xz-utils, python3-dev,
libedit-dev, libncurses5-dev, swig, python3-six, python3-sphinx (>= 1.3.6),

View File

@ -0,0 +1,33 @@
suppress warnings for xray and testing when not enabled
Index: llvm-toolchain-12_12.0.1/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
===================================================================
--- llvm-toolchain-12_12.0.1.orig/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ llvm-toolchain-12_12.0.1/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -242,15 +242,15 @@ macro(load_llvm_config)
# Detect if we have the LLVMXRay and TestingSupport library installed and
# available from llvm-config.
+ set(COMPILER_RT_HAS_LLVMXRAY FALSE)
execute_process(
COMMAND ${LLVM_CONFIG_PATH} "--ldflags" "--libs" "xray"
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE CONFIG_OUTPUT
ERROR_QUIET)
- if (HAD_ERROR)
+ if (HAD_ERROR AND COMPILER_RT_BUILD_XRAY)
message(WARNING "llvm-config finding xray failed with status ${HAD_ERROR}")
- set(COMPILER_RT_HAS_LLVMXRAY FALSE)
- else()
+ elseif(COMPILER_RT_BUILD_XRAY)
string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})
list(GET CONFIG_OUTPUT 0 LDFLAGS)
list(GET CONFIG_OUTPUT 1 LIBLIST)
@@ -267,7 +267,7 @@ macro(load_llvm_config)
RESULT_VARIABLE HAD_ERROR
OUTPUT_VARIABLE CONFIG_OUTPUT
ERROR_QUIET)
- if (HAD_ERROR)
+ if (HAD_ERROR AND COMPILER_RT_INCLUDE_TESTS)
message(WARNING "llvm-config finding testingsupport failed with status ${HAD_ERROR}")
elseif(COMPILER_RT_INCLUDE_TESTS)
string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" CONFIG_OUTPUT ${CONFIG_OUTPUT})

View File

@ -1,20 +0,0 @@
---
tools/llvm-config/llvm-config.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: llvm-toolchain-snapshot_11~++20200326111000+4673699a470/llvm/tools/llvm-config/llvm-config.cpp
===================================================================
--- llvm-toolchain-snapshot_11~++20200326111000+4673699a470.orig/llvm/tools/llvm-config/llvm-config.cpp
+++ llvm-toolchain-snapshot_11~++20200326111000+4673699a470/llvm/tools/llvm-config/llvm-config.cpp
@@ -561,9 +561,9 @@ int main(int argc, char **argv) {
} else if (Arg == "--shared-mode") {
PrintSharedMode = true;
} else if (Arg == "--obj-root") {
- OS << ActivePrefix << '\n';
+ OS << ActivePrefix << "/build/" << '\n';
} else if (Arg == "--src-root") {
- OS << LLVM_SRC_ROOT << '\n';
+ OS << ActivePrefix << "/build/" << '\n';
} else if (Arg == "--ignore-libllvm") {
LinkDyLib = false;
LinkMode = BuiltSharedLibs ? LinkModeShared : LinkModeAuto;

View File

@ -0,0 +1,16 @@
set rpath for prepare_builtins build utility to find correct stage2
libs at runtime when executed as part of a build
Index: llvm-toolchain-12_12.0.1/libclc/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/libclc/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/libclc/CMakeLists.txt
@@ -139,6 +139,9 @@ target_compile_options( prepare_builtins
target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} )
target_link_libraries( prepare_builtins PRIVATE ${LLVM_LIBS} )
target_link_libraries( prepare_builtins PRIVATE ${LLVM_SYSTEM_LIBS} )
+set_target_properties( prepare_builtins
+ PROPERTIES INSTALL_RPATH "${LLVM_LIBDIR}"
+ BUILD_WITH_INSTALL_RPATH "ON")
# Setup arch devices
set( r600--_devices cedar cypress barts cayman )

View File

@ -0,0 +1,24 @@
if libatomic is found only link it if libgcc is the rtlib
Index: llvm-toolchain-12_12.0.1/libcxx/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/libcxx/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/libcxx/CMakeLists.txt
@@ -756,12 +756,14 @@ function(cxx_link_system_libraries targe
endif()
elseif (LIBCXX_HAS_GCC_LIB)
target_link_libraries(${target} PRIVATE gcc)
+ if (LIBCXX_HAS_ATOMIC_LIB)
+ target_link_libraries(${target} PRIVATE atomic)
+ endif()
elseif (LIBCXX_HAS_GCC_S_LIB)
target_link_libraries(${target} PRIVATE gcc_s)
- endif()
-
- if (LIBCXX_HAS_ATOMIC_LIB)
- target_link_libraries(${target} PRIVATE atomic)
+ if (LIBCXX_HAS_ATOMIC_LIB)
+ target_link_libraries(${target} PRIVATE atomic)
+ endif()
endif()
if (MINGW)

View File

@ -1,32 +0,0 @@
Index: llvm-toolchain-snapshot_12~++20201021061106+4b7dafd9046/lld/tools/lld/CMakeLists.txt
===================================================================
--- llvm-toolchain-snapshot_12~++20201021061106+4b7dafd9046.orig/lld/tools/lld/CMakeLists.txt
+++ llvm-toolchain-snapshot_12~++20201021061106+4b7dafd9046/lld/tools/lld/CMakeLists.txt
@@ -1,10 +1,18 @@
+set(LLD_ATOMIC_LIB "")
+
set(LLVM_LINK_COMPONENTS
Support
)
+if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i386" OR
+ CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i686" OR
+ CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64"
+ )
+ list(APPEND LLD_ATOMIC_LIB "atomic")
+endif()
+
add_lld_tool(lld
lld.cpp
-
SUPPORT_PLUGINS
)
export_executable_symbols_for_plugins(lld)
@@ -18,6 +26,7 @@ target_link_libraries(lld
lldMachO2
lldMinGW
lldWasm
+ ${LLD_ATOMIC_LIB}
)
install(TARGETS lld

View File

@ -0,0 +1,15 @@
remove regex anchor in lld linker detection to account for vendor, if
specified, being prepended to lld version string
Index: llvm-toolchain-12_12.0.1/llvm/cmake/modules/AddLLVM.cmake
===================================================================
--- llvm-toolchain-12_12.0.1.orig/llvm/cmake/modules/AddLLVM.cmake
+++ llvm-toolchain-12_12.0.1/llvm/cmake/modules/AddLLVM.cmake
@@ -196,7 +196,7 @@ if (NOT DEFINED LLVM_LINKER_DETECTED)
set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
set(LLVM_LINKER_IS_GOLD YES CACHE INTERNAL "")
message(STATUS "Linker detection: GNU Gold")
- elseif("${stdout}" MATCHES "^LLD")
+ elseif("${stdout}" MATCHES "LLD")
set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
set(LLVM_LINKER_IS_LLD YES CACHE INTERNAL "")
message(STATUS "Linker detection: LLD")

View File

@ -0,0 +1,162 @@
include required runtimes as dependencies to openmp targets to make sure
they are built first when included as part of a runtimes build since openmp
can depend on them
Index: llvm-toolchain-12_12.0.1/llvm/runtimes/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/llvm/runtimes/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/llvm/runtimes/CMakeLists.txt
@@ -236,6 +236,7 @@ function(runtime_default_target)
-DLLVM_DEFAULT_TARGET_TRIPLE=${TARGET_TRIPLE}
-DLLVM_ENABLE_PROJECTS_USED=${LLVM_ENABLE_PROJECTS_USED}
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=${LLVM_ENABLE_PER_TARGET_RUNTIME_DIR_default}
+ -DCMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}
-DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE}
-DCMAKE_CXX_COMPILER_TARGET=${TARGET_TRIPLE}
-DCMAKE_ASM_COMPILER_TARGET=${TARGET_TRIPLE}
@@ -440,7 +441,7 @@ if(runtimes)
# build directory cannot find the C++ headers in certain configurations.
# I need to build a mechanism for runtime projects to provide CMake code
# that executes at LLVM configuration time to handle this case.
- add_dependencies(clang-bootstrap-deps runtimes-configure)
+ #add_dependencies(clang-bootstrap-deps runtimes-configure)
# We need to add the runtimes as a dependency because compiler-rt can be
# built as part of runtimes and we need the profile runtime for PGO
add_dependencies(clang-bootstrap-deps runtimes)
Index: llvm-toolchain-12_12.0.1/openmp/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/openmp/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/openmp/CMakeLists.txt
@@ -83,6 +83,28 @@ option(OPENMP_ENABLE_LIBOMPTARGET_PROFIL
${ENABLE_LIBOMPTARGET})
option(OPENMP_ENABLE_LIBOMP_PROFILING "Enable time profiling for libomp." OFF)
+option(OPENMP_USE_LLVM_UNWINDER "Build and use the LLVM unwinder" OFF)
+
+option(LIBOMP_ENABLE_RTTI "Enabling RTTI forces libomp to be a c++ lib" ${LLVM_ENABLE_RTTI})
+
+macro(add_runtimes_build_depends_if_needed target)
+ if(RUNTIMES_BUILD)
+ # required for rtti and libomp/libomptarget profiling if enabled
+ add_dependencies(${target} cxx-headers cxxabi_static cxx_static cxxabi_shared cxx_shared)
+ if(OPENMP_USE_LLVM_UNWINDER AND (NOT target STREQUAL "omp" AND NOT LIBOMP_ENABLE_RTTI))
+ add_dependencies(${target} unwind_static unwind_shared)
+ get_target_property(target_link_flags ${target} LINK_FLAGS)
+ set(runtimes_link_flags "-lunwind")
+ if(target_link_flags)
+ set(runtimes_link_flags "${target_link_flags} -lunwind")
+ endif()
+ set_target_properties(${target}
+ PROPERTIES
+ LINK_FLAGS "${runtimes_link_flags}")
+ endif()
+ endif()
+endmacro()
+
# Build host runtime library, after LIBOMPTARGET variables are set since they are needed
# to enable time profiling support in the OpenMP runtime.
add_subdirectory(runtime)
Index: llvm-toolchain-12_12.0.1/openmp/cmake/HandleOpenMPOptions.cmake
===================================================================
--- llvm-toolchain-12_12.0.1.orig/openmp/cmake/HandleOpenMPOptions.cmake
+++ llvm-toolchain-12_12.0.1/openmp/cmake/HandleOpenMPOptions.cmake
@@ -29,7 +29,8 @@ append_if(OPENMP_HAVE_WNO_EXTRA_FLAG "-W
append_if(OPENMP_HAVE_WNO_PEDANTIC_FLAG "-Wno-pedantic" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
append_if(OPENMP_HAVE_WNO_MAYBE_UNINITIALIZED_FLAG "-Wno-maybe-uninitialized" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
-append_if(OPENMP_HAVE_STD_GNUPP14_FLAG "-std=gnu++14" CMAKE_CXX_FLAGS)
-if (NOT OPENMP_HAVE_STD_GNUPP14_FLAG)
- append_if(OPENMP_HAVE_STD_CPP14_FLAG "-std=c++14" CMAKE_CXX_FLAGS)
+# prefer c++14 over gnu++14?
+append_if(OPENMP_HAVE_STD_CPP14_FLAG "-std=c++14" CMAKE_CXX_FLAGS)
+if (NOT OPENMP_HAVE_STD_CPP14_FLAG)
+ append_if(OPENMP_HAVE_STD_GNUPP14_FLAG "-std=gnu++14" CMAKE_CXX_FLAGS)
endif()
Index: llvm-toolchain-12_12.0.1/openmp/libomptarget/plugins/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/openmp/libomptarget/plugins/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/openmp/libomptarget/plugins/CMakeLists.txt
@@ -36,6 +36,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tma
add_library("omptarget.rtl.${tmachine_libname}" SHARED
${CMAKE_CURRENT_SOURCE_DIR}/../generic-elf-64bit/src/rtl.cpp)
+ add_runtimes_build_depends_if_needed("omptarget.rtl.${tmachine_libname}")
+
# Install plugin under the lib destination folder.
install(TARGETS "omptarget.rtl.${tmachine_libname}"
LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}")
Index: llvm-toolchain-12_12.0.1/openmp/libomptarget/plugins/cuda/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/openmp/libomptarget/plugins/cuda/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/openmp/libomptarget/plugins/cuda/CMakeLists.txt
@@ -44,6 +44,8 @@ else()
set (LIBOMPTARGET_DEP_LIBRARIES ${CMAKE_DL_LIBS})
endif()
+add_runtimes_build_depends_if_needed(omptarget.rtl.cuda)
+
# Install plugin under the lib destination folder.
install(TARGETS omptarget.rtl.cuda LIBRARY DESTINATION "${OPENMP_INSTALL_LIBDIR}")
Index: llvm-toolchain-12_12.0.1/openmp/libomptarget/src/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/openmp/libomptarget/src/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/openmp/libomptarget/src/CMakeLists.txt
@@ -48,6 +48,8 @@ set_target_properties(omptarget
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${LIBOMPTARGET_LIBRARY_DIR})
+add_runtimes_build_depends_if_needed(omptarget)
+
# Install libomptarget under the lib destination folder.
install(TARGETS omptarget LIBRARY COMPONENT omptarget
DESTINATION "${OPENMP_INSTALL_LIBDIR}")
Index: llvm-toolchain-12_12.0.1/openmp/runtime/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/openmp/runtime/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/openmp/runtime/CMakeLists.txt
@@ -287,6 +287,10 @@ if(LIBOMP_STATS)
set(LIBOMP_USE_STDCPPLIB TRUE)
endif()
+if(LIBOMP_ENABLE_RTTI)
+ set(LIBOMP_USE_STDCPPLIB TRUE)
+endif()
+
# Shared library can be switched to a static library
set(LIBOMP_ENABLE_SHARED TRUE CACHE BOOL
"Shared library instead of static library?")
Index: llvm-toolchain-12_12.0.1/openmp/runtime/src/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/openmp/runtime/src/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/openmp/runtime/src/CMakeLists.txt
@@ -134,6 +134,7 @@ endif()
if(NOT ${LIBOMP_USE_STDCPPLIB})
set(LIBOMP_LINKER_LANGUAGE C)
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES)
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nostdlib++")
else()
set(LIBOMP_LINKER_LANGUAGE CXX)
endif()
@@ -162,6 +163,8 @@ set_target_properties(omp PROPERTIES
LINKER_LANGUAGE ${LIBOMP_LINKER_LANGUAGE}
)
+add_runtimes_build_depends_if_needed(omp)
+
# Get the library's location within the build tree for the unit tester
if(NOT WIN32)
get_target_property(LIBOMP_LIBRARY_DIR omp LIBRARY_OUTPUT_DIRECTORY)
Index: llvm-toolchain-12_12.0.1/openmp/tools/archer/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/openmp/tools/archer/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/openmp/tools/archer/CMakeLists.txt
@@ -14,6 +14,9 @@ if(LIBOMP_OMPT_SUPPORT)
add_library(archer SHARED ompt-tsan.cpp)
add_library(archer_static STATIC ompt-tsan.cpp)
+ add_runtimes_build_depends_if_needed(archer)
+ add_runtimes_build_depends_if_needed(archer_static)
+
install(TARGETS archer archer_static
LIBRARY DESTINATION ${OPENMP_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${OPENMP_INSTALL_LIBDIR})

10
debian/patches/series vendored
View File

@ -27,7 +27,6 @@ do-not-fail-on-unexpected-pass.diff
disable-display-PASS-UNSUPPORTED-XFAIL.diff
# llvm-config
fix-llvm-config-obj-src-root.patch
0001-llvm-cmake-resolve-symlinks-in-LLVMConfig.cmake.patch
# Lib names
@ -126,9 +125,6 @@ risc/clang-riscv64-multiarch.diff
sparc/sparc-D98574-clang-def.patch
sparc/sparc-D98575-compiler-rt.patch
# Compiler-rt - workaround
workaround-bug-42994-use-linker.diff
# bug 939472
#try-to-unbreak-thinlto.diff
#D67877-cmake-clang-example.patch
@ -138,7 +134,6 @@ x86-fuzzer.patch
python3-shebang.patch
print-lldb-path.patch
libcxx-armhf-ftbfs.diff
lld-use-link-atomic-i386.diff
#bring-reporter-back.patch
D99501-ignore-lto-auto.diff
scan-build-py-fix-analyze-path.diff
@ -146,3 +141,8 @@ scan-build-py-fix-default-bin.diff
libclc-llvm-spirv.diff
omp-riscv64.patch
llvm-fix-lld-linker-check.diff
compilerrt-fix-warn-xray-testing.diff
openmp-fix-runtimes-build.diff
libclc-fix-prepare_builtins-rpath.diff
libcxx-libatomic-only-with-gcc-rtlib.diff

View File

@ -1,7 +1,7 @@
Index: llvm-toolchain-snapshot_11~++20200326111000+4673699a470/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
Index: llvm-toolchain-12_12.0.1/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
===================================================================
--- llvm-toolchain-snapshot_11~++20200326111000+4673699a470.orig/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
+++ llvm-toolchain-snapshot_11~++20200326111000+4673699a470/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
--- llvm-toolchain-12_12.0.1.orig/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
+++ llvm-toolchain-12_12.0.1/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp
@@ -25,6 +25,10 @@
#include "sanitizer_symbolizer_internal.h"
#include "sanitizer_symbolizer_libbacktrace.h"
@ -13,7 +13,7 @@ Index: llvm-toolchain-snapshot_11~++20200326111000+4673699a470/compiler-rt/lib/s
#include <dlfcn.h> // for dlsym()
#include <errno.h>
@@ -428,7 +432,7 @@ static SymbolizerTool *ChooseExternalSym
@@ -433,7 +437,7 @@ static SymbolizerTool *ChooseExternalSym
return new(*allocator) AtosSymbolizer(found_path, allocator);
}
#endif // SANITIZER_MAC
@ -22,3 +22,15 @@ Index: llvm-toolchain-snapshot_11~++20200326111000+4673699a470/compiler-rt/lib/s
VReport(2, "Using llvm-symbolizer found at: %s\n", found_path);
return new(*allocator) LLVMSymbolizer(found_path, allocator);
}
Index: llvm-toolchain-12_12.0.1/compiler-rt/lib/sanitizer_common/CMakeLists.txt
===================================================================
--- llvm-toolchain-12_12.0.1.orig/compiler-rt/lib/sanitizer_common/CMakeLists.txt
+++ llvm-toolchain-12_12.0.1/compiler-rt/lib/sanitizer_common/CMakeLists.txt
@@ -195,6 +195,7 @@ set(SANITIZER_IMPL_HEADERS
)
include_directories(..)
+include_directories(${LLVM_INCLUDE_DIR})
set(SANITIZER_COMMON_DEFINITIONS
HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H})

View File

@ -1,34 +0,0 @@
Index: llvm-toolchain-snapshot_11~++20200326111000+4673699a470/compiler-rt/lib/hwasan/CMakeLists.txt
===================================================================
--- llvm-toolchain-snapshot_11~++20200326111000+4673699a470.orig/compiler-rt/lib/hwasan/CMakeLists.txt
+++ llvm-toolchain-snapshot_11~++20200326111000+4673699a470/compiler-rt/lib/hwasan/CMakeLists.txt
@@ -43,9 +43,9 @@ append_list_if(COMPILER_RT_HWASAN_WITH_I
set(HWASAN_RTL_CFLAGS ${SANITIZER_COMMON_CFLAGS})
append_rtti_flag(OFF HWASAN_RTL_CFLAGS)
-append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC HWASAN_RTL_CFLAGS)
+append_list_if(COMPILER_RT_HAS_FPIC_FLAG -fPIC -fuse-ld=gold HWASAN_RTL_CFLAGS)
# Prevent clang from generating libc calls.
-append_list_if(COMPILER_RT_HAS_FFREESTANDING_FLAG -ffreestanding HWASAN_RTL_CFLAGS)
+append_list_if(COMPILER_RT_HAS_FFREESTANDING_FLAG -ffreestanding -fuse-ld=gold HWASAN_RTL_CFLAGS)
set(HWASAN_DYNAMIC_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS})
@@ -57,7 +57,7 @@ if(ANDROID)
endif()
endif()
-set(HWASAN_DYNAMIC_CFLAGS ${HWASAN_RTL_CFLAGS})
+set(HWASAN_DYNAMIC_CFLAGS ${HWASAN_RTL_CFLAGS} -fuse-ld=gold)
append_list_if(COMPILER_RT_HAS_FTLS_MODEL_INITIAL_EXEC
-ftls-model=initial-exec HWASAN_DYNAMIC_CFLAGS)
append_list_if(MSVC /DEBUG HWASAN_DYNAMIC_LINK_FLAGS)
@@ -132,7 +132,7 @@ foreach(arch ${HWASAN_SUPPORTED_ARCH})
LIBS clang_rt.hwasan-${arch} clang_rt.hwasan_cxx-${arch}
EXTRA hwasan.syms.extra)
set(VERSION_SCRIPT_FLAG
- -Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/clang_rt.hwasan-dynamic-${arch}.vers)
+ -Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/clang_rt.hwasan-dynamic-${arch}.vers -fuse-ld=gold)
set_property(SOURCE
${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp
APPEND PROPERTY

View File

@ -1412,8 +1412,9 @@ echo "Testing all other sanitizers ..."
echo "int main() { return 1; }" > foo.c
# fails to run on i386 with the following error:
#clang: error: unsupported option '-fsanitize=efficiency-working-set' for target 'i686-pc-linux-gnu'
clang-$VERSION -fsanitize=efficiency-working-set -o foo foo.c || true
./foo &> /dev/null || true
# seems like esan was removed from clang: https://github.com/llvm/llvm-project/commit/885b790f89b6068ec4caad8eaa51aa8098327059
#clang-$VERSION -fsanitize=efficiency-working-set -o foo foo.c || true
#./foo &> /dev/null || true
cat > "$TEMPDIR/test.c" <<EOF
#include <stdlib.h>

332
debian/rules vendored
View File

@ -1,7 +1,9 @@
#!/usr/bin/make -f
# polly, openmp & lldb aren't enabled for every platform
PROJECTS = clang;clang-tools-extra;libcxx;libcxxabi;compiler-rt;lld;debuginfo-tests
# polly & lldb aren't enabled for every platform
PROJECTS = clang;clang-tools-extra;lld;debuginfo-tests
# openmp & libunwind aren't enabled for every platform
RUNTIMES = compiler-rt;libcxx;libcxxabi
TARGET_BUILD := build-llvm
TARGET_BUILD_STAGE2 := $(TARGET_BUILD)/tools/clang/stage2-bins
@ -40,17 +42,24 @@ CXXFLAGS_EXTRA =
CFLAGS_EXTRA =
CONFIGURE_EXTRA =
CMAKE_EXTRA = -DPYTHON_EXECUTABLE=/usr/bin/python3
CMAKE_LIBCXX_EXTRA =
STAGE1_CMAKE_EXTRA =
# prepend bootstrap prefix to CMAKE_EXTRA vars
BOOTSTRAP_CMAKE_EXTRA = $(foreach extra,$(CMAKE_EXTRA), $(subst -D,-DBOOTSTRAP_,$(extra)))
BASE_PATH := $(CURDIR)
LIBCXX_EXCEPTIONS :=ON
BASE_PATH := $(CURDIR)
STAGE1_BIN_DIR := $(BASE_PATH)/$(TARGET_BUILD)/bin
STAGE1_LIB_DIR := $(BASE_PATH)/$(TARGET_BUILD)/lib
STAGE2_BIN_DIR := $(BASE_PATH)/$(TARGET_BUILD_STAGE2)/bin
STAGE2_LIB_DIR := $(BASE_PATH)/$(TARGET_BUILD_STAGE2)/lib
LIBCXX_EXCEPTIONS := ON
ifneq (,$(filter $(DEB_HOST_ARCH),s390x))
LIBCXX_EXCEPTIONS :=OFF
endif
ifneq (,$(filter $(DEB_HOST_ARCH),i386 armel mips mipsel powerpc powerpcspe riscv64))
CMAKE_EXTRA += -DLIBOMP_LIBFLAGS="-latomic" -DCMAKE_SHARED_LINKER_FLAGS="-latomic"
CMAKE_EXTRA += -DCMAKE_SHARED_LINKER_FLAGS="-latomic"
STAGE1_CMAKE_EXTRA += -DCMAKE_SHARED_LINKER_FLAGS="-latomic"
endif
ifneq (,$(filter $(DEB_HOST_ARCH),sparc sparc64))
@ -83,6 +92,7 @@ ifneq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
Z3_FLAG = -DLLVM_ENABLE_Z3_SOLVER=ON
endif
endif
CMAKE_EXTRA += $(Z3_FLAG)
# Change the default CPU for s390x
ZARCH=z196
@ -101,23 +111,22 @@ ifneq (,$(findstring $(DEB_HOST_ARCH),armel))
# 3.8 fails to build, disable the compiler_rt builtins
# See http://lists.llvm.org/pipermail/llvm-dev/2016-May/099761.html
CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
# Check for ancient libstdc++ fails due to atomics usage
CMAKE_LIBCXX_EXTRA += -DLLVM_COMPILER_CHECKED=ON
STAGE1_CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
# Prevent clang from getting a > v4t default
# See bug #868779
CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=arm-linux-gnueabi
STAGE1_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=arm-linux-gnueabi
endif
ifneq (,$(findstring $(DEB_HOST_ARCH),armhf))
# avoid an issue with openmp on armhf
CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=armv7l-unknown-linux-gnueabihf
STAGE1_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=armv7l-unknown-linux-gnueabihf
endif
ifneq (,$(filter $(DEB_HOST_ARCH),mips64el))
# avoid an issue with search path on mips64el
# https://bugs.llvm.org/show_bug.cgi?id=41204
CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=mips64el-linux-gnuabi64
STAGE1_CMAKE_EXTRA += -DLLVM_HOST_TRIPLE=mips64el-linux-gnuabi64
endif
@ -142,23 +151,11 @@ ifeq ($(LLVM_SPIRV_INSTALLED),yes)
LIBCLC_TARGETS_TO_BUILD := $(LIBCLC_TARGETS_TO_BUILD)";spirv-mesa3d-;spirv64-mesa3d-"
endif
# Disabled:
# Host compiler does not support '-fuse-ld=lld'
# USE_LLD_ARCHS := amd64
# ifneq (,$(filter $(DEB_HOST_ARCH),$(USE_LLD_ARCHS)))
# CMAKE_EXTRA += -DLLVM_ENABLE_LLD=ON
# endif
BINUTILS_GOLD_ARCHS := amd64 arm64 armhf i386 ppc64 ppc64el x32 s390x hurd-i386 kfreebsd-amd64 kfreebsd-i386
ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' binutils) ge 2.23.1-1~exp3 ; echo $$?),0)
ifneq (,$(filter $(DEB_HOST_ARCH),$(BINUTILS_GOLD_ARCHS)))
# -fused-ld=gold enables the gold linker (but is not supported by all archs / distro)
LDFLAGS_EXTRA += -fuse-ld=gold
#--no-keep-files-mapped --no-map-whole-files
CXXFLAGS_EXTRA += -fuse-ld=gold
CFLAGS_EXTRA += -fuse-ld=gold
#-Wl,--no-keep-files-mapped -Wl,--no-map-whole-files
CMAKE_EXTRA += -DLLVM_BINUTILS_INCDIR=/usr/include/
STAGE1_CMAKE_EXTRA += -DLLVM_USE_LINKER=gold
STAGE1_CMAKE_EXTRA += -DLLVM_BINUTILS_INCDIR=/usr/include/
endif
endif
@ -175,11 +172,12 @@ ifneq (,$(filter codecoverage,$(DEB_BUILD_OPTIONS)))
endif
# Enable for bootstrap
LDFLAGS_EXTRA += -fPIC -Wno-unused-command-line-argument -Wno-unknown-warning-option -Wl,--build-id
CXXFLAGS_EXTRA += -fPIC -Wno-unused-command-line-argument -Wno-unknown-warning-option
BOOTSTRAP_CXXFLAGS_EXTRA = $(CXXFLAGS_EXTRA) # Nothing for now. Keeping in case we need it
CFLAGS_EXTRA += -fPIC -Wno-unused-command-line-argument -Wno-unknown-warning-option
BOOTSTRAP_CFLAGS_EXTRA = $(CFLAGS_EXTRA) # Nothing for now. Keeping in case we need it
CFLAGS_EXTRA += -Wno-unused-command-line-argument
CXXFLAGS_EXTRA += -Wno-unused-command-line-argument
LDFLAGS_EXTRA += -Wno-unused-command-line-argument -Wl,--build-id
BOOTSTRAP_CFLAGS_EXTRA = $(CFLAGS_EXTRA)
BOOTSTRAP_CXXFLAGS_EXTRA = $(CXXFLAGS_EXTRA)
BOOTSTRAP_LDFLAGS_EXTRA =
# Enable polly (or not)
POLLY_ENABLE=yes
@ -189,22 +187,28 @@ else
PROJECTS+=;polly
endif
# Enable openmp (or not)
OPENMP_ENABLE=yes
ifneq (,$(filter $(DEB_HOST_ARCH), mips mipsel powerpc powerpcspe sparc64 s390x x32))
OPENMP_ENABLE=no
else
PROJECTS+=;openmp
endif
# Enable libunwind (or not)
LIBUNWIND_ENABLE=yes
ifneq (,$(filter $(DEB_HOST_ARCH), s390x armel mipsel hurd-i386 powerpc sparc sparc64 x32))
LIBUNWIND_ENABLE=no
else
PROJECTS += ;libunwind
CMAKE_LIBCXX_EXTRA += -DLIBCXXABI_USE_LLVM_UNWINDER=ON \
-DLIBUNWIND_USE_COMPILER_RT=ON
RUNTIMES += ;libunwind
# this is also added to stage2 via CLANG_BOOTSTRAP_PASSTHROUGH
STAGE1_CMAKE_EXTRA += -DLIBCXXABI_USE_LLVM_UNWINDER=ON
endif
# Enable openmp (or not)
OPENMP_ENABLE=yes
ifneq (,$(filter $(DEB_HOST_ARCH), mips mipsel powerpc powerpcspe sparc64 s390x x32))
OPENMP_ENABLE=no
else
RUNTIMES+=;openmp
# this is also added to stage2 via CLANG_BOOTSTRAP_PASSTHROUGH
STAGE1_CMAKE_EXTRA += -DLIBOMP_LIBFLAGS="-lm"
ifeq ($(LIBUNWIND_ENABLE),yes)
# this is also added to stage2 via CLANG_BOOTSTRAP_PASSTHROUGH
STAGE1_CMAKE_EXTRA += -DOPENMP_USE_LLVM_UNWINDER=ON
endif
endif
RUN_TEST=yes
@ -233,7 +237,8 @@ ifneq (,$(filter scan-build,$(DEB_BUILD_OPTIONS)))
# no need to run tests in this case
RUN_TEST=no
CONFIGURE_EXTRA += --enable-assertions
CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON
# will also be applied to stage2 via CLANG_BOOTSTRAP_PASSTHROUGH
STAGE1_CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON
endif
ifneq (,$(filter coverity,$(DEB_BUILD_OPTIONS)))
@ -246,7 +251,8 @@ ifneq (,$(filter coverity,$(DEB_BUILD_OPTIONS)))
PRE_PROCESS_CONF=
COVERITY_ENABLE=1
CONFIGURE_EXTRA += --enable-assertions
CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON
# will also be applied to stage2 via CLANG_BOOTSTRAP_PASSTHROUGH
STAGE1_CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON
# no need to run tests in this case
RUN_TEST=no
else
@ -270,7 +276,7 @@ LLD_ENABLE=yes
ifneq (,$(filter $(DEB_HOST_ARCH_OS),linux))
# only for linux
CMAKE_EXTRA += -DLLVM_USE_PERF=yes -DLLVM_ENABLE_LIBPFM=ON
CMAKE_EXTRA += -DLLVM_USE_PERF=ON -DLLVM_ENABLE_LIBPFM=ON
endif
# Only enable it for archs supporting gold
@ -321,12 +327,15 @@ endif
GENERATOR=Ninja
# enables cmake build targets like stage2-[target_name]
ENABLED_STAGE2_CMAKE_BUILD_TARGETS = check-all;check-llvm;check-clang;check-clang-tools;check-lld;check-libcxx;check-libcxxabi;check-sanitizer;llvm-config;test-suite
%:
dh $@ $(DH_OPTIONS)
# For some reasons, some spaces are added, removing them
PROJECTS_LIST := $(shell echo "$(PROJECTS)"|sed -e "s| ||g")
#RUNTIMES_LIST := $(shell echo "$(RUNTIMES)"|sed -e "s| ||g")
RUNTIMES_LIST := $(shell echo "$(RUNTIMES)"|sed -e "s| ||g")
preconfigure:
@ -343,7 +352,7 @@ preconfigure:
@echo "DISTRO=$(DISTRO)"
@echo "GCC_VERSION=$(GCC_VERSION)"
@echo "PROJECTS=$(PROJECTS_LIST)"
# @echo "RUNTIMES=$(RUNTIMES_LIST)"
@echo "RUNTIMES=$(RUNTIMES_LIST)"
@echo "LLVM_VERSION=$(LLVM_VERSION)"
@echo "LLVM_VERSION_FULL=$(LLVM_VERSION_FULL)"
@echo "LLVM_VERSION_SNAPSHOT=$(LLVM_VERSION_SNAPSHOT)"
@ -414,6 +423,14 @@ override_dh_auto_configure: preconfigure
--xml-option append_arg:"replace/llvm::AlignOf<NextTy>::Alignment/(llvm::AlignOf<NextTy>::Alignment)"; \
fi)
# Fails with No target "unwind_static"
# -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \
# -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=OFF \
# -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON \
#- to libc++ when libunwind is built
#- Matches what is done on brew:
#- https://bit.ly/3kDNpC9
echo "Running tests: $(RUN_TEST)"
echo "Using cmake: $(CMAKE_BIN)"; \
CFLAGS="$(CFLAGS_EXTRA)" \
@ -421,49 +438,92 @@ override_dh_auto_configure: preconfigure
LDFLAGS="$(LDFLAGS_EXTRA)" \
LD_LIBRARY_PATH=$$LD_LIBRARY_PATH $(PRE_PROCESS_CONF) $(CMAKE_BIN) -S llvm/ -B $(TARGET_BUILD) \
-G $(GENERATOR) \
-DLLVM_ENABLE_PROJECTS="$(PROJECTS_LIST)" \
-DCMAKE_SUPPRESS_REGENERATION=ON \
-DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO="$(opt_flags)" \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_VERSION_SUFFIX= \
-DLLVM_ENABLE_SPHINX=ON \
-DSPHINX_WARNINGS_AS_ERRORS=OFF \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_DUMP=ON \
-DLIBCLANG_LIBRARY_VERSION=$(SONAME_EXT) \
-DCLANG_LINK_CLANG_DYLIB=ON \
-DCMAKE_SUPPRESS_REGENERATION=ON \
-DCMAKE_BUILD_TYPE=Release \
-DPACKAGE_VENDOR=$(VENDOR) \
-DENABLE_LINKER_BUILD_ID=ON \
-DCOMPILER_RT_USE_LIBCXX=NO \
-DLIBUNWIND_USE_COMPILER_RT=ON \
$(Z3_FLAG) \
$(CMAKE_EXTRA) \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="AVR" \
-DLLVM_TARGETS_TO_BUILD=Native \
-DLLVM_ENABLE_PROJECTS="$(PROJECTS_LIST)" \
-DLLVM_ENABLE_RUNTIMES="$(RUNTIMES_LIST)" \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLVVM_ENABLE_ZLIB=OFF \
-DLLVM_BUILD_DOCS=OFF \
-DLLVM_INCLUDE_GO_TESTS=OFF \
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
-DCLANG_VENDOR=$(VENDOR) \
-DCLANG_ENABLE_BOOTSTRAP=ON \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DCLANG_BUILD_EXAMPLES=OFF \
-DLLVM_POLLY_LINK_INTO_TOOLS=ON \
-DBOOTSTRAP_CMAKE_CXX_FLAGS='$(BOOTSTRAP_CXXFLAGS_EXTRA)' \
-DBOOTSTRAP_CMAKE_C_FLAGS='$(BOOTSTRAP_CFLAGS_EXTRA)' \
-DCLANG_BOOTSTRAP_PASSTHROUGH="CMAKE_INSTALL_PREFIX;CMAKE_VERBOSE_MAKEFILE;CMAKE_BUILD_TYPE;CMAKE_CXX_FLAGS_RELWITHDEBINFO;LLVM_LINK_LLVM_DYLIB;LLVM_INSTALL_UTILS;LLVM_VERSION_SUFFIX;LLVM_ENABLE_SPHINX;SPHINX_WARNINGS_AS_ERRORS;LLVM_BUILD_LLVM_DYLIB;LLVM_ENABLE_RTTI;LLVM_ENABLE_FFI;LIBCLANG_LIBRARY_VERSION;ENABLE_LINKER_BUILD_ID;POLLY_BUNDLED_JSONCPP;LLVM_EXPERIMENTAL_TARGETS_TO_BUILD;LLVM_USE_PERF;LLVM_ENABLE_ASSERTIONS;LLVM_BINUTILS_INCDIR;LLVM_HOST_TRIPLE;LLVM_COMPILER_CHECKED;COMPILER_RT_BUILD_BUILTINS;LIBOMP_LIBFLAGS;CMAKE_SHARED_LINKER_FLAGS;PYTHON_EXECUTABLE;LLVM_ENABLE_Z3_SOLVER;LLVM_POLLY_LINK_INTO_TOOLS;CLANG_VENDOR;LIBUNWIND_USE_COMPILER_RT"; \
-DCLANG_DEFAULT_LINKER=ld \
-DCLANG_DEFAULT_CXX_STDLIB=libstdc++ \
-DCLANG_DEFAULT_RTLIB=libgcc \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_INCLUDE_TESTS=OFF \
-DCOMPILER_RT_USE_LIBCXX=NO \
-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
-DLIBUNWIND_ENABLE_SHARED=ON \
-DLIBUNWIND_USE_COMPILER_RT=ON \
-DLIBUNWIND_INSTALL_LIBRARY=OFF \
-DLIBCXXABI_ENABLE_SHARED=ON \
-DLIBCXXABI_USE_COMPILER_RT=ON \
-DLIBCXXABI_INSTALL_LIBRARY=OFF \
-DLIBCXX_ENABLE_SHARED=ON \
-DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
-DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON \
-DLIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY=OFF \
-DLIBCXX_INSTALL_LIBRARY=OFF \
-DOPENMP_ENABLE_LIBOMP_PROFILING=OFF \
-DOPENMP_ENABLE_LIBOMPTARGET_PROFILING=OFF \
-DLIBOMP_ENABLE_RTTI=OFF \
-DLIBOMP_OMPT_SUPPORT=OFF \
$(STAGE1_CMAKE_EXTRA) \
-DBUILTINS_CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Linux;-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" \
-DRUNTIMES_CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Linux;-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" \
-DCLANG_ENABLE_BOOTSTRAP=ON \
-DCLANG_BOOTSTRAP_TARGETS="$(ENABLED_STAGE2_CMAKE_BUILD_TARGETS)" \
-DBOOTSTRAP_CMAKE_BUILD_TYPE=RelWithDebInfo \
-DBOOTSTRAP_CMAKE_C_FLAGS_RELWITHDEBINFO="$(opt_flags)" \
-DBOOTSTRAP_CMAKE_CXX_FLAGS_RELWITHDEBINFO="$(opt_flags)" \
-DBOOTSTRAP_CMAKE_CXX_FLAGS="$(BOOTSTRAP_CXXFLAGS_EXTRA)" \
-DBOOTSTRAP_CMAKE_C_FLAGS="$(BOOTSTRAP_CFLAGS_EXTRA)" \
-DBOOTSTRAP_CMAKE_SHARED_LINKER_FLAGS="$(BOOTSTRAP_LDFLAGS_EXTRA)" \
-DBOOTSTRAP_CMAKE_MODULE_LINKER_FLAGS="$(BOOTSTRAP_LDFLAGS_EXTRA)" \
-DBOOTSTRAP_CMAKE_EXE_LINKER_FLAGS="$(BOOTSTRAP_LDFLAGS_EXTRA)" \
-DBOOTSTRAP_LLVM_ENABLE_FFI=ON \
-DBOOTSTRAP_LLVM_ENABLE_DUMP=ON \
-DBOOTSTRAP_LLVM_ENABLE_LIBPFM=ON \
-DBOOTSTRAP_LLVM_ENABLE_SPHINX=ON \
-DBOOTSTRAP_SPHINX_WARNINGS_AS_ERRORS=OFF \
-DBOOTSTRAP_LLVM_USE_RELATIVE_PATHS_IN_FILES=ON \
-DBOOTSTRAP_LLVM_INSTALL_UTILS=ON \
-DBOOTSTRAP_LLVM_VERSION_SUFFIX= \
-DBOOTSTRAP_LLVM_POLLY_LINK_INTO_TOOLS=ON \
-DBOOTSTRAP_LLVM_EXPERIMENTAL_TARGETS_TO_BUILD="AVR" \
-DBOOTSTRAP_LLVM_LINK_LLVM_DYLIB=ON \
-DBOOTSTRAP_CLANG_LINK_CLANG_DYLIB=ON \
-DBOOTSTRAP_LIBCLANG_LIBRARY_VERSION=$(SONAME_EXT) \
-DBOOTSTRAP_LIBCXXABI_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
-DBOOTSTRAP_LIBCXX_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
-DBOOTSTRAP_LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON \
$(BOOTSTRAP_CMAKE_EXTRA) \
-DBOOTSTRAP_BUILTINS_CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Linux;-DCMAKE_BUILD_TYPE=RelWithDebInfo;-DCMAKE_C_FLAGS_RELWITHDEBINFO=$(opt_flags);-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$(opt_flags);-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" \
-DBOOTSTRAP_RUNTIMES_CMAKE_ARGS="-DCMAKE_CXX_FLAGS=$(BOOTSTRAP_CXXFLAGS_EXTRA);-DCMAKE_EXE_LINKER_FLAGS=$(BOOTSTRAP_LDFLAGS_EXTRA) -L$(STAGE1_LIB_DIR);-DCMAKE_SHARED_LINKER_FLAGS=$(BOOTSTRAP_LDFLAGS_EXTRA) -L$(STAGE1_LIB_DIR);-DCMAKE_MODULE_LINKER_FLAGS=$(BOOTSTRAP_LDFLAGS_EXTRA) -L$(STAGE1_LIB_DIR);-DCMAKE_SYSTEM_NAME=Linux;-DCMAKE_BUILD_TYPE=RelWithDebInfo;-DCMAKE_C_FLAGS_RELWITHDEBINFO=$(opt_flags);-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$(opt_flags);-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" \
-DCLANG_BOOTSTRAP_PASSTHROUGH="CMAKE_INSTALL_PREFIX;CMAKE_SUPPRESS_REGENERATION;ENABLE_LINKER_BUILD_ID;LLVM_HOST_TRIPLE;LLVM_ENABLE_PIC;LLVM_ENABLE_RTTI;LLVM_ENABLE_ASSERTIONS;LLVM_INCLUDE_GO_TESTS;LLVM_BINUTILS_INCDIR;LLVM_USE_LINKER;CLANG_DEFAULT_LINKER;CLANG_DEFAULT_CXX_STDLIB;CLANG_DEFAULT_RTLIB;COMPILER_RT_USE_LIBCXX;COMPILER_RT_USE_BUILTINS_LIBRARY;COMPILER_RT_INCLUDE_TESTS;LIBUNWIND_ENABLE_SHARED;LIBCXXABI_ENABLE_SHARED;LIBCXXABI_USE_COMPILER_RT;LIBCXXABI_USE_LLVM_UNWINDER;LIBCXX_USE_COMPILER_RT;LIBCXX_ENABLE_SHARED;LIBCXX_ENABLE_STATIC_ABI_LIBRARY;LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY;LIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY;OPENMP_USE_LLVM_UNWINDER;LIBOMP_LIBFLAGS;LIBOMP_ENABLE_RTTI;PYTHON_EXECUTABLE"
FOUND_VERSION=`grep LLVM_VERSION_STRING build-llvm/include/llvm/Config/llvm-config.h|cut -d\" -f2`; \
if ! echo "$(LLVM_VERSION_FULL)"|grep "$$FOUND_VERSION"; then \
echo "mistmatch of version. Found: $$FOUND_VERSION / Expected: $(LLVM_VERSION_FULL)"; \
exit 1; \
fi
# ninja
VERBOSE=-v
debian-full-build:
$(PRE_PROCESS) ninja $(NJOBS) -C $(TARGET_BUILD) $(VERBOSE) stage2
echo "Using cmake: $(CMAKE_BIN)"
# linker hack so stage2 can link against stage1 libs at runtime
LD_LIBRARY_PATH=$(STAGE1_LIB_DIR):$$LD_LIBRARY_PATH \
VERBOSE=1 $(PRE_PROCESS) $(CMAKE_BIN) --build $(TARGET_BUILD) $(NJOBS) --target stage2
# Check the stage 2 build worked
if ! readelf --string-dump .comment $(TARGET_BUILD_STAGE2)/bin/clang 2>&1|grep -q "clang version"; then \
@ -474,8 +534,6 @@ debian-full-build:
echo "libclang-$(LLVM_VERSION).so.1 depends on libclang-cpp. Should not be the case"; \
exit 2; \
fi
# $(PRE_PROCESS) make $(NJOBS) -C $(TARGET_BUILD) $(VERBOSE) CFLAGS="$(CFLAGS_EXTRA)" CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1 runtimes
touch $@
debian-libfuzzer-build:
@ -484,104 +542,33 @@ ifeq (${LIBFUZZER_ENABLE},yes)
CFLAGS=`dpkg-buildflags --get CFLAGS`; \
CFLAGS="$$CFLAGS `dpkg-buildflags --get CPPFLAGS`"; \
echo $$CFLAGS; \
$(BASE_PATH)/$(TARGET_BUILD_STAGE2)/bin/clang++ -c $$CFLAGS -std=c++11 $(BASE_PATH)/compiler-rt/lib/fuzzer/*.cpp -IFuzzer; \
$(STAGE2_BIN_DIR)/clang++ -c $$CFLAGS -std=c++11 $(BASE_PATH)/compiler-rt/lib/fuzzer/*.cpp -IFuzzer; \
ar ruv libFuzzer.a Fuzzer*.o
endif
touch $@
# The various options to build libc++ and libc++abi
LIBCXX_CMAKE_OPTIONS := \
-DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \
-DLLVM_CONFIG_PATH=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/llvm-config \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_CXX_COMPILER=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/clang++ \
-DCMAKE_C_COMPILER=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/clang \
-DCMAKE_CXX_FLAGS="$(LIBCXXFLAGS)" \
-DCMAKE_EXE_LINKER_FLAGS="" \
-DCMAKE_SHARED_LINKER_FLAGS="" \
-DCMAKE_MODULE_LINKER_FLAGS="" \
-DCMAKE_AR=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/llvm-ar \
-DCMAKE_RANLIB=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/llvm-ranlib \
-DLLVM_EXTERNAL_LIT=$(BASE_PATH)/llvm/utils/lit/lit.py \
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON \
$(CMAKE_EXTRA)
debian-libcxxabi-build:
# Builds libcxxabi
echo "Using cmake: $(CMAKE_BIN)"; \
cd libcxxabi && \
CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" \
$(PRE_PROCESS_CONF) $(CMAKE_BIN) \
-S . -B build \
-G $(GENERATOR) \
$(LIBCXX_CMAKE_OPTIONS) \
-DLIBCXXABI_LIBCXX_PATH=$(BASE_PATH)/libcxx \
-DLIBCXXABI_LIBCXX_LIBRARY_PATH=$(BASE_PATH)/libcxx/build/lib \
-DLIBCXXABI_LIBCXX_INCLUDES=$(BASE_PATH)/libcxx/include \
-DLIBCXXABI_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
-DLIBCXXABI_USE_COMPILER_RT=ON \
-DLLVM_ENABLE_RTTI=ON \
$(CMAKE_LIBCXX_EXTRA) && \
$(PRE_PROCESS_CONF) ninja -C build/ $(VERBOSE)
touch $@
# Fails with $<TARGET_LINKER_FILE:unwind_static>
# No target "unwind_static"
# on 12. Will test with 13
# -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \
# -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY=OFF \
# -DLIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY=ON \
N
#- to libc++ when libunwind is built
#- Matches what is done on brew:
#- https://bit.ly/3kDNpC9
debian-libcxx-build:
# Builds libcxx
echo "Using cmake: $(CMAKE_BIN)"; \
cd libcxx && \
$(PRE_PROCESS_CONF) $(CMAKE_BIN) \
CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" \
-S . -B build \
-G $(GENERATOR) \
$(LIBCXX_CMAKE_OPTIONS) \
-DLIBCXX_CXX_ABI=libcxxabi \
-DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(BASE_PATH)/libcxxabi/include \
-DLIBCXX_CXX_ABI_LIBRARY_PATH=$(BASE_PATH)/libcxxabi/build/lib \
-DLIBCXX_ENABLE_EXCEPTIONS=$(LIBCXX_EXCEPTIONS) \
-DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON \
-DLIBCXX_USE_COMPILER_RT=ON \
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \
-DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON \
-DLIBCXX_STATICALLY_LINK_ABI_IN_SHARED_LIBRARY=OFF \
$(CMAKE_LIBCXX_EXTRA) && \
$(PRE_PROCESS_CONF) ninja -C build/ $(VERBOSE)
touch $@
debian-libclc-build:
# Builds libclc
mkdir -p libclc/build
CMAKE_BIN=cmake; \
if test -f /tmp/cmake/bin/cmake; then \
CMAKE_BIN=/tmp/cmake/bin/cmake; \
fi; \
echo "Using cmake: $$CMAKE_BIN"; \
echo "Using cmake: $(CMAKE_BIN)"
cd libclc/build && \
$$CMAKE_BIN ../ \
$(CMAKE_BIN) ../ \
-G $(GENERATOR) \
-DCMAKE_C_COMPILER=$(STAGE2_BIN_DIR)/clang \
-DCMAKE_CXX_COMPILER=$(STAGE2_BIN_DIR)/clang++ \
-DCMAKE_CXX_FLAGS="$(BOOTSTRAP_CXXFLAGS_EXTRA)" \
-DCMAKE_SHARED_LINKER_FLAGS="$(BOOTSTRAP_LDFLAGS_EXTRA) -L$(STAGE2_LIB_DIR)" \
-DCMAKE_MODULE_LINKER_FLAGS="$(BOOTSTRAP_LDFLAGS_EXTRA) -L$(STAGE2_LIB_DIR)" \
-DCMAKE_EXE_LINKER_FLAGS="$(BOOTSTRAP_LDFLAGS_EXTRA) -L$(STAGE2_LIB_DIR)" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_DATADIR=lib \
-DCMAKE_INSTALL_INCLUDEDIR=include \
-DLLVM_CONFIG=$(CURDIR)/$(TARGET_BUILD_STAGE2)/bin/llvm-config \
-DLLVM_CONFIG=$(STAGE2_BIN_DIR)/llvm-config \
-DLIBCLC_TARGETS_TO_BUILD=$(LIBCLC_TARGETS_TO_BUILD); \
ninja $(VERBOSE)
ninja $(NJOBS) $(VERBOSE)
touch $@
override_dh_auto_build: debian-full-build debian-libfuzzer-build debian-libcxxabi-build debian-libcxx-build debian-libclc-build
override_dh_auto_build: debian-full-build debian-libfuzzer-build debian-libclc-build
override_dh_prep: build_doc
dh_prep
@ -655,26 +642,21 @@ override_dh_auto_install:
# Only run on executable, not script
chrpath -d `find $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/ -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'|cut -d: -f1`
chrpath -d libcxxabi/build/lib/libc++abi.so.1.0
chrpath -d libcxx/build/lib/libc++.so.1.0
: # libclang
cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ && rm -f libclang.so.$(SONAME_EXT) libclang-$(LLVM_VERSION).so; \
cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ && rm -f libclang.so.$(SONAME_EXT); \
ln -s libclang-$(LLVM_VERSION).so.$(SONAME_EXT) libclang.so.$(SONAME_EXT)
: # libomp
cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib && rm -f libomp.so; \
ln -s libomp.so.$(SONAME_OPENMP) libomp.so
if test "$(LIBUNWIND_ENABLE)" = yes; then \
mkdir -p debian/tmp/usr/include/libunwind; \
cp -R libunwind/include/* debian/tmp/usr/include/libunwind/; \
fi
: # libomp
if test "$(OPENMP_ENABLE)" = yes; then \
mkdir -p debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/include/openmp; \
cp -f openmp/runtime/exports/common*/include/* debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/include/openmp; \
cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib && cp libomp.so.$(SONAME_OPENMP) libomp-$(LLVM_VERSION).so.$(SONAME_OPENMP); \
cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib; \
ln -s libomp.so.$(SONAME_OPENMP) libomp.so; \
cp libomp.so.$(SONAME_OPENMP) libomp-$(LLVM_VERSION).so.$(SONAME_OPENMP); \
fi
# Remove artifact (where compiler-rt is built)
@ -714,8 +696,6 @@ endif
rm -rf $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/build/utils/lit/lit/__pycache__/ \
$(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/build/utils/lit/lit/*/__pycache__/
DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C libcxxabi/build install
DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C libcxx/build install
DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C libclc/build install
# Rename binaries
@ -769,8 +749,8 @@ endif
# Manage the polly files. Sometimes, we build them. Sometimes not.
if test "$(POLLY_ENABLE)" = yes; then \
mkdir -p $(CURDIR)/debian/libclang-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/ $(CURDIR)/debian/libclang-common-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/polly/; \
mv -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libpolly* \
$(CURDIR)/debian/libclang-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/; \
mv -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libPolly* \
$(CURDIR)/debian/libclang-common-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/; \
rm -rf $(CURDIR)/debian/libclang-common-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/polly; \
mv -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/include/polly/ \
$(CURDIR)/debian/libclang-common-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/include/; \
@ -911,10 +891,10 @@ endif
ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-sanitizer || true
# Libcxx
ninja $(VERBOSE) -C libcxx/build check-libcxx || true
ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-libcxx || true
# Libcxxabi
ninja $(VERBOSE) -C libcxxabi/build check-libcxxabi || true
ninja $(VERBOSE) -C $(TARGET_BUILD_STAGE2) check-libcxxabi || true
# Libclc
ninja $(VERBOSE) -C libclc/build test || true