mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-12 18:59:50 +03:00
main/llvm18: include clang and lld in projects to build
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld" also, sort Contributors by last name
This commit is contained in:
parent
ceb84316e3
commit
2d9bf42105
13 changed files with 1112 additions and 226 deletions
|
@ -7,16 +7,16 @@ Subject: [PATCH] Disable dynamic lib tests for musl's dlclose() is noop
|
|||
unittests/Support/CMakeLists.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/unittests/Support/CMakeLists.txt b/unittests/Support/CMakeLists.txt
|
||||
index 641163e..4f508d9 100644
|
||||
diff --git a/llvm/unittests/Support/CMakeLists.txt b/llvm/unittests/Support/CMakeLists.txt
|
||||
index df35a77..ee8ee76 100644
|
||||
--- a/llvm/unittests/Support/CMakeLists.txt
|
||||
+++ b/llvm/unittests/Support/CMakeLists.txt
|
||||
@@ -124,5 +124,5 @@
|
||||
@@ -136,7 +136,7 @@ target_link_libraries(SupportTests PRIVATE LLVMTestingSupport ${LLVM_PTHREAD_LIB
|
||||
|
||||
if(NOT LLVM_INTEGRATED_CRT_ALLOC)
|
||||
# The test doesn't pass when using a custom allocator, PR47881.
|
||||
- add_subdirectory(DynamicLibrary)
|
||||
+ # add_subdirectory(DynamicLibrary)
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
add_subdirectory(CommandLineInit)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -2073,7 +2073,7 @@
|
||||
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -2452,7 +2452,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
||||
static const char *const AArch64LibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const AArch64Triples[] = {
|
||||
"aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux",
|
||||
|
@ -9,8 +9,8 @@
|
|||
static const char *const AArch64beLibDirs[] = {"/lib"};
|
||||
static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu",
|
||||
"aarch64_be-linux-gnu"};
|
||||
@@ -2085,7 +2085,9 @@
|
||||
"armv7l-linux-musleabihf",
|
||||
@@ -2462,7 +2462,9 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
||||
static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
|
||||
"armv7hl-redhat-linux-gnueabi",
|
||||
"armv6hl-suse-linux-gnueabi",
|
||||
- "armv7hl-suse-linux-gnueabi"};
|
||||
|
@ -20,16 +20,16 @@
|
|||
static const char *const ARMebLibDirs[] = {"/lib"};
|
||||
static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
|
||||
static const char *const ARMebHFTriples[] = {
|
||||
@@ -2101,7 +2103,7 @@
|
||||
@@ -2482,7 +2484,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
||||
"x86_64-redhat-linux", "x86_64-suse-linux",
|
||||
"x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
|
||||
"x86_64-slackware-linux", "x86_64-unknown-linux",
|
||||
- "x86_64-amazon-linux"};
|
||||
+ "x86_64-amazon-linux", "x86_64-linux-musl"};
|
||||
+ "x86_64-amazon-linux", "x86_64-linux-musl"};
|
||||
static const char *const X32Triples[] = {"x86_64-linux-gnux32",
|
||||
"x86_64-pc-linux-gnux32"};
|
||||
static const char *const X32LibDirs[] = {"/libx32", "/lib"};
|
||||
@@ -2497,6 +2504,7 @@
|
||||
@@ -2491,11 +2493,13 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
||||
"i586-linux-gnu", "i686-linux-gnu", "i686-pc-linux-gnu",
|
||||
"i386-redhat-linux6E", "i686-redhat-linux", "i386-redhat-linux",
|
||||
"i586-suse-linux", "i686-montavista-linux",
|
||||
|
@ -37,3 +37,20 @@
|
|||
};
|
||||
|
||||
static const char *const LoongArch64LibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const LoongArch64Triples[] = {
|
||||
- "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu"};
|
||||
+ "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu",
|
||||
+ "loongarch64-linux-musl"};
|
||||
|
||||
static const char *const M68kLibDirs[] = {"/lib"};
|
||||
static const char *const M68kTriples[] = {
|
||||
@@ -2558,7 +2562,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
||||
static const char *const RISCV64LibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const RISCV64Triples[] = {"riscv64-unknown-linux-gnu",
|
||||
"riscv64-linux-gnu",
|
||||
- "riscv64-unknown-elf"};
|
||||
+ "riscv64-unknown-elf",
|
||||
+ "riscv64-linux-musl"};
|
||||
|
||||
static const char *const SPARCv8LibDirs[] = {"/lib32", "/lib"};
|
||||
static const char *const SPARCv8Triples[] = {"sparc-linux-gnu",
|
|
@ -1,22 +1,21 @@
|
|||
diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp
|
||||
index 4f23403..da6883e 100644
|
||||
--- a/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -588,6 +588,10 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -561,6 +561,13 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
CmdArgs.push_back("-lm");
|
||||
}
|
||||
|
||||
+ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles, options::OPT_nodefaultlibs)) {
|
||||
+ if (Triple.isMusl() &&
|
||||
+ !Args.hasArg(options::OPT_nostdlib,
|
||||
+ options::OPT_nostartfiles,
|
||||
+ options::OPT_nodefaultlibs)) {
|
||||
+ CmdArgs.push_back("-lssp_nonshared");
|
||||
+ }
|
||||
+
|
||||
// Silence warnings when linking C code with a C++ '-stdlib' argument.
|
||||
Args.ClaimAllArgs(options::OPT_stdlib_EQ);
|
||||
|
||||
diff --git a/lib/Driver/ToolChains/Linux.h b/lib/Driver/ToolChains/Linux.h
|
||||
index 52439174..d754b543 100644
|
||||
--- a/lib/Driver/ToolChains/Linux.h
|
||||
+++ b/lib/Driver/ToolChains/Linux.h
|
||||
|
||||
--- a/clang/lib/Driver/ToolChains/Linux.h
|
||||
+++ b/clang/lib/Driver/ToolChains/Linux.h
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "Gnu.h"
|
||||
|
@ -25,8 +24,7 @@ index 52439174..d754b543 100644
|
|||
|
||||
namespace clang {
|
||||
namespace driver {
|
||||
@@ -63,7 +64,15 @@ public:
|
||||
const llvm::opt::ArgList &DriverArgs, const JobAction &JA,
|
||||
@@ -64,6 +65,14 @@ public:
|
||||
const llvm::fltSemantics *FPType = nullptr) const override;
|
||||
|
||||
const char *getDefaultLinker() const override;
|
||||
|
@ -41,10 +39,8 @@ index 52439174..d754b543 100644
|
|||
|
||||
protected:
|
||||
Tool *buildAssembler() const override;
|
||||
diff --git a/test/Driver/fsanitize.c b/test/Driver/fsanitize.c
|
||||
index 8ad6dc25..1619b59a 100644
|
||||
--- a/test/Driver/fsanitize.c
|
||||
+++ b/test/Driver/fsanitize.c
|
||||
--- a/clang/test/Driver/fsanitize.c
|
||||
+++ b/clang/test/Driver/fsanitize.c
|
||||
@@ -700,12 +700,12 @@
|
||||
// RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NOSP
|
||||
// NOSP-NOT: "-fsanitize=safe-stack"
|
||||
|
@ -61,10 +57,8 @@ index 8ad6dc25..1619b59a 100644
|
|||
// NO-SP-NOT: stack-protector
|
||||
// NO-SP: "-fsanitize=safe-stack"
|
||||
// SP-ASAN: error: invalid argument '-fsanitize=safe-stack' not allowed with '-fsanitize=address'
|
||||
diff --git a/test/Driver/stack-protector.c b/test/Driver/stack-protector.c
|
||||
index 16937691..80987f67 100644
|
||||
--- a/test/Driver/stack-protector.c
|
||||
+++ b/test/Driver/stack-protector.c
|
||||
--- a/clang/test/Driver/stack-protector.c
|
||||
+++ b/clang/test/Driver/stack-protector.c
|
||||
@@ -33,6 +33,22 @@
|
||||
// SSP-PS4-BUF: "-stack-protector" "2"
|
||||
// SSP-PS4-BUF: "-stack-protector-buffer-size" "16"
|
|
@ -1,75 +1,113 @@
|
|||
# Contributor: Rasmus Thomsen <oss@cogitri.dev>
|
||||
# Contributor: Ariadne Conill <ariadne@dereferenced.org>
|
||||
# Contributor: Patrick Gansterer <paroga@paroga.com>
|
||||
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
|
||||
# Contributor: Martell Malone <martell@marinelayer.io>
|
||||
# Contributor: Eric Molitor <eric@molitor.org>
|
||||
# Contributor: Rasmus Thomsen <oss@cogitri.dev>
|
||||
# Contributor: Travis Tilley <ttilley@gmail.com>
|
||||
# Contributor: Mitch Tishmack <mitch.tishmack@gmail.com>
|
||||
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
|
||||
# Contributor: Ariadne Conill <ariadne@dereferenced.org>
|
||||
# Contributor: lauren n. liberda <lauren@selfisekai.rocks>
|
||||
# Contributor: omni <omni+alpine@hack.org>
|
||||
# Maintainer: Celeste <cielesti@protonmail.com>
|
||||
maintainer="Celeste <cielesti@protonmail.com>"
|
||||
_pkgname=llvm
|
||||
pkgver=18.1.8
|
||||
pkgrel=6
|
||||
_sover=${pkgver%.*}
|
||||
_majorver=${pkgver%%.*}
|
||||
_prevmajorver=$((_majorver - 1))
|
||||
pkgname=$_pkgname$_majorver
|
||||
pkgrel=5
|
||||
pkgdesc="Low Level Virtual Machine compiler system, version $_majorver"
|
||||
arch="all"
|
||||
_clangdesc="C language family front-end for LLVM"
|
||||
_llddesc="The LLVM Linker"
|
||||
url="https://llvm.org/"
|
||||
license="Apache-2.0"
|
||||
depends_dev="$pkgname=$pkgver-r$pkgrel libffi-dev zlib-dev zstd-dev"
|
||||
arch="all"
|
||||
license="Apache-2.0 WITH LLVM-exception"
|
||||
depends_dev="
|
||||
$pkgname=$pkgver-r$pkgrel
|
||||
curl-dev
|
||||
libffi-dev
|
||||
zlib-dev
|
||||
zstd-dev
|
||||
"
|
||||
# See https://gitlab.alpinelinux.org/alpine/aports/-/commit/51d2fba931fb2ef0046dea19405a9290c8735051#note_234651
|
||||
[ -z "$BOOTSTRAP" ] && depends_dev="$depends_dev $pkgname-test-utils=$pkgver-r$pkgrel"
|
||||
makedepends_host="$depends_dev binutils-dev curl-dev libxml2-dev~2.13"
|
||||
makedepends_build="chrpath cmake python3 py3-setuptools samurai "
|
||||
[ -z "$BOOTSTRAP" ] && depends_dev="
|
||||
$depends_dev
|
||||
$pkgname-test-utils=$pkgver-r$pkgrel
|
||||
"
|
||||
makedepends_host="
|
||||
$depends_dev
|
||||
binutils-dev
|
||||
curl-static
|
||||
libxml2-dev
|
||||
"
|
||||
makedepends_build="
|
||||
chrpath
|
||||
cmake
|
||||
python3
|
||||
py3-setuptools
|
||||
samurai
|
||||
"
|
||||
# diffutils for diff: unrecognized option: strip-trailing-cr
|
||||
# coreutils for 'od' binary
|
||||
checkdepends="bash coreutils diffutils"
|
||||
subpackages="
|
||||
$pkgname-gtest:_gtest
|
||||
$pkgname-static
|
||||
$pkgname-libs
|
||||
$pkgname-static:llvmstatic
|
||||
$pkgname-libs:llvmlibs
|
||||
$pkgname-linker-tools:linktools
|
||||
$pkgname-dev
|
||||
$pkgname-test-utils-pyc
|
||||
$pkgname-dev:llvmdev
|
||||
$pkgname-lit-pyc
|
||||
$pkgname-lit:_llvm_lit:noarch
|
||||
$pkgname-test-utils:_test_utils
|
||||
clang$_majorver-extra-tools:extra
|
||||
clang$_majorver:_clang
|
||||
clang$_majorver-static:clangstatic
|
||||
clang$_majorver-headers::noarch
|
||||
clang$_majorver-libclang
|
||||
clang$_majorver-libs:clanglibs
|
||||
clang$_majorver-dev:clangdev
|
||||
clang$_majorver-ccache:_ccache:noarch
|
||||
"
|
||||
source="https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/llvm-project-$pkgver.src.tar.xz
|
||||
|
||||
0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
|
||||
allocscore.patch
|
||||
fix-memory-mf_exec-on-aarch64.patch
|
||||
install-prefix.patch
|
||||
llvm-stack-size.patch
|
||||
|
||||
backport-miscompile-floating-point.patch
|
||||
backport-riscv64-jitlink-fixes.patch
|
||||
fix-hexagon-tests.patch
|
||||
llvm-riscv-xthreadmempair.patch
|
||||
fix-macho-invalid-test.patch
|
||||
fix-memory-mf_exec-on-aarch64.patch
|
||||
gcc15-cstdint.patch
|
||||
install-prefix.patch
|
||||
llvm-riscv-xthreadmempair.patch
|
||||
llvm-stack-size.patch
|
||||
skip-roundeven-tests.patch
|
||||
|
||||
10-add-musl-triples.patch
|
||||
30-Enable-stack-protector-by-default-for-Alpine-Linux.patch
|
||||
clang-001-fortify-include.patch
|
||||
clang-002-fortify-enable.patch
|
||||
clang-003-as-needed.patch
|
||||
|
||||
LLD-add-build-shared-libs-option.patch
|
||||
"
|
||||
builddir="$srcdir/$_pkgname-project-$pkgver.src"
|
||||
|
||||
# Whether is this package the default (latest) LLVM version.
|
||||
_default_llvm="no"
|
||||
|
||||
# If crosscompiling, we need llvm-tblgen on the build machine.
|
||||
if [ "$CBUILD" != "$CHOST" ]; then
|
||||
_llvm_tblgen="llvm-tblgen"
|
||||
if [ "$_default_llvm" = no ]; then
|
||||
_llvm_tblgen="llvm$_majorver-tblgen"
|
||||
fi
|
||||
makedepends_build="$makedepends_build cmd:$_llvm_tblgen"
|
||||
_cmake_cross_options="
|
||||
-DCMAKE_CROSSCOMPILING=ON
|
||||
-DLLVM_TABLEGEN=/usr/bin/$_llvm_tblgen
|
||||
"
|
||||
fi
|
||||
|
||||
if [ "$_default_llvm" = yes ]; then
|
||||
provides="llvm=$pkgver-r$pkgrel"
|
||||
replaces="llvm"
|
||||
fi
|
||||
|
||||
# explicit override for previous version as well
|
||||
replaces="llvm17"
|
||||
# ld.lld: error: src/gn/gn_main.o: could not infer e_machine
|
||||
# from bitcode target triple s390x-alpine-linux-musl
|
||||
case "$CARCH" in
|
||||
s390x) _lld="" ;;
|
||||
*)
|
||||
_lld=";lld"
|
||||
subpackages="
|
||||
$subpackages
|
||||
lld$_majorver:_lld
|
||||
lld$_majorver-libs:lldlibs
|
||||
lld$_majorver-dev:llddev
|
||||
"
|
||||
;;
|
||||
esac
|
||||
|
||||
# NOTE: It seems that there's no (sane) way how to change includedir, sharedir
|
||||
# etc. separately, just the CMAKE_INSTALL_PREFIX. Standard CMake variables and
|
||||
|
@ -91,20 +129,92 @@ replaces="llvm17"
|
|||
#
|
||||
_prefix="usr/lib/llvm$_majorver"
|
||||
|
||||
# gcc is for libgcc-dev which we don't have split
|
||||
_depends_clang="
|
||||
fortify-headers>=1.1-r2
|
||||
gcc
|
||||
libstdc++-dev
|
||||
musl-dev
|
||||
"
|
||||
|
||||
# llvm-config and llvm-tblgen are needed for cross-compiling, otherwise
|
||||
# CMake tries to build them, even when LLVM_NATIVE_TOOL_DIR is set
|
||||
# llvm-dev provides llvm-config; clang provides clang-tblgen
|
||||
if [ "$CBUILD" != "$CHOST" ]; then
|
||||
makedepends_host="
|
||||
$makedepends_host
|
||||
$_depends_clang
|
||||
"
|
||||
makedepends_build="
|
||||
$makedepends_build
|
||||
$pkgname-dev
|
||||
cmd:llvm$_majorver-tblgen
|
||||
clang$_majorver
|
||||
lld$_majorver
|
||||
"
|
||||
_cmake_cross_options="
|
||||
-DCMAKE_SYSTEM_NAME=Linux
|
||||
-DCMAKE_SYSTEM_PROCESSOR=$CARCH
|
||||
-DCMAKE_SYSROOT=$CBUILDROOT
|
||||
-DCMAKE_AR=/usr/bin/llvm$_majorver-ar
|
||||
-DCMAKE_NM=/usr/bin/llvm$_majorver-nm
|
||||
-DCMAKE_RANLIB=/usr/bin/llvm$_majorver-ranlib
|
||||
-DCMAKE_ASM_COMPILER=clang-$_majorver
|
||||
-DCMAKE_ASM_COMPILER_TARGET=$CHOST
|
||||
-DCMAKE_C_COMPILER=clang-$_majorver
|
||||
-DCMAKE_C_COMPILER_TARGET=$CHOST
|
||||
-DCMAKE_CXX_COMPILER=clang++-$_majorver
|
||||
-DCMAKE_CXX_COMPILER_TARGET=$CHOST
|
||||
-DCMAKE_LINKER_TYPE=LLD
|
||||
-DLLVM_ENABLE_LLD=ON
|
||||
-DLLVM_NATIVE_TOOL_DIR=/$_prefix/bin
|
||||
-DLLVM_TABLEGEN=/usr/bin/llvm$_majorver-tblgen
|
||||
-DCLANG_TABLEGEN=/usr/bin/clang$_majorver-tblgen
|
||||
"
|
||||
# support stripping by placing abuild's expected stripcmd in $tmpdir/bin
|
||||
export PATH="$PATH:$tmpdir/bin"
|
||||
# we don't need build-base-$CTARGET_ARCH, LLVM/Clang has what is needed
|
||||
export BOOTSTRAP=nobase
|
||||
export CC=clang-$_majorver CXX=clang++-$_majorver
|
||||
# --sysroot is handled by CMAKE_SYSROOT in $_cmake_cross_options
|
||||
export CFLAGS="$BUILDCFLAGS" CXXFLAGS="$BUILDCXXFLAGS"
|
||||
export CPPFLAGS="$BUILDCPPFLAGS" LDFLAGS="$BUILDLDFLAGS"
|
||||
fi
|
||||
|
||||
# Internal binutils bfd plugin, so should not be linked to by other programs.
|
||||
# Only available under /usr/lib/bfd-plugins/LLVMgold-$_majorver.so and
|
||||
# $_prefix/lib/LLVMgold.so, so should not conflict with other versions.
|
||||
somask="LLVMgold.so"
|
||||
|
||||
_llvm_targets="-DLLVM_TARGETS_TO_BUILD=AMDGPU;BPF;WebAssembly"
|
||||
case "$CARCH" in
|
||||
arm*) _llvm_targets="$_llvm_targets;ARM" ;;
|
||||
loongarch64) _llvm_targets="$_llvm_targets;LoongArch";;
|
||||
ppc*) _llvm_targets="$_llvm_targets;PowerPC" ;;
|
||||
riscv64) _llvm_targets="$_llvm_targets;RISCV" ;;
|
||||
*) _llvm_targets="" ;;
|
||||
esac
|
||||
|
||||
prepare() {
|
||||
default_prepare
|
||||
|
||||
if [ "$CBUILD" != "$CHOST" ]; then
|
||||
mkdir -p "$tmpdir"/bin
|
||||
|
||||
ln -sv /usr/bin/llvm$_majorver-strip "$tmpdir"/bin/$CHOST-strip
|
||||
fi
|
||||
|
||||
cd llvm
|
||||
|
||||
# Known broken test on musl
|
||||
rm -v test/CodeGen/AArch64/wineh4.mir
|
||||
# https://github.com/llvm/llvm-project/issues/47657
|
||||
rm -v test/ExecutionEngine/Interpreter/intrinsics.ll
|
||||
|
||||
case "$CARCH" in
|
||||
x86|arm*)
|
||||
rm -v test/Object/macho-invalid.test \
|
||||
test/tools/llvm-size/radix.test \
|
||||
armv7|x86)
|
||||
rm -v test/tools/llvm-size/radix.test
|
||||
;;
|
||||
armhf)
|
||||
rm -v test/tools/llvm-size/radix.test \
|
||||
test/ExecutionEngine/frem.ll
|
||||
;;
|
||||
esac
|
||||
|
@ -114,30 +224,30 @@ build() {
|
|||
# Auto-detect it by guessing either.
|
||||
local ffi_include_dir="$(pkg-config --cflags-only-I libffi | sed 's|^-I||g')"
|
||||
|
||||
local targets= common_targets="AMDGPU;BPF;WebAssembly"
|
||||
case "$CARCH" in
|
||||
arm*) targets="-DLLVM_TARGETS_TO_BUILD=ARM;$common_targets";;
|
||||
loongarch64) targets="-DLLVM_TARGETS_TO_BUILD=LoongArch;$common_targets";;
|
||||
ppc64le) targets="-DLLVM_TARGETS_TO_BUILD=PowerPC;$common_targets";;
|
||||
riscv64) targets="-DLLVM_TARGETS_TO_BUILD=RISCV;$common_targets";;
|
||||
esac
|
||||
# Interferes with detection of compiler flags when building with Clang.
|
||||
# (For example, -fPIC won't be detected, which causes failures later on.)
|
||||
# This is due to an arch-specific -Wunused-command-line-argument warning,
|
||||
# but the archs affected may change in future versions of Clang.
|
||||
if $CC --version | grep -qi clang; then
|
||||
export CFLAGS="${CFLAGS//-fstack-clash-protection}"
|
||||
fi
|
||||
if $CXX --version | grep -qi clang; then
|
||||
export CXXFLAGS="${CXXFLAGS//-fstack-clash-protection}"
|
||||
fi
|
||||
|
||||
# NOTE: DO NOT change CMAKE_BUILD_TYPE! Buildmodes like None will enable
|
||||
# debug assertions for LLVM!
|
||||
cmake -B build -G Ninja -Wno-dev -S llvm \
|
||||
cmake -S llvm -B build -G Ninja -Wno-dev \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX=/$_prefix \
|
||||
-DCMAKE_INSTALL_RPATH=/$_prefix \
|
||||
\
|
||||
-DLLVM_DEFAULT_TARGET_TRIPLE="$CHOST" \
|
||||
-DLLVM_HOST_TRIPLE="$CHOST" \
|
||||
\
|
||||
-DCMAKE_INSTALL_RPATH=/$_prefix/lib \
|
||||
-DFFI_INCLUDE_DIR="$ffi_include_dir" \
|
||||
\
|
||||
-DLLVM_HOST_TRIPLE="$CHOST" \
|
||||
-DLLVM_APPEND_VC_REV=OFF \
|
||||
-DLLVM_BINUTILS_INCDIR=/usr/include \
|
||||
-DLLVM_BUILD_DOCS=OFF \
|
||||
-DLLVM_BUILD_EXAMPLES=OFF \
|
||||
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
|
||||
-DLLVM_BUILD_LLVM_DYLIB=ON \
|
||||
-DLLVM_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \
|
||||
-DLLVM_ENABLE_ASSERTIONS=OFF \
|
||||
|
@ -148,9 +258,9 @@ build() {
|
|||
-DLLVM_ENABLE_LIBCXX=OFF \
|
||||
-DLLVM_ENABLE_LIBEDIT=OFF \
|
||||
-DLLVM_ENABLE_PIC=ON \
|
||||
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra$_lld" \
|
||||
-DLLVM_ENABLE_RTTI=ON \
|
||||
-DLLVM_ENABLE_SPHINX=OFF \
|
||||
-DLLVM_ENABLE_TERMINFO=ON \
|
||||
-DLLVM_ENABLE_ZLIB=FORCE_ON \
|
||||
-DLLVM_ENABLE_ZSTD=FORCE_ON \
|
||||
-DLLVM_INCLUDE_BENCHMARKS=OFF \
|
||||
|
@ -159,8 +269,22 @@ build() {
|
|||
-DLLVM_INSTALL_UTILS=ON \
|
||||
-DLLVM_LINK_LLVM_DYLIB=ON \
|
||||
-DLLVM_USE_PERF=ON \
|
||||
$targets \
|
||||
$_cmake_cross_options
|
||||
\
|
||||
-DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang$_majorver \
|
||||
-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
|
||||
-DCLANG_ENABLE_ARCMT=OFF \
|
||||
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
|
||||
-DCLANG_INCLUDE_TESTS=OFF \
|
||||
-DCLANG_LINK_CLANG_DYLIB=ON \
|
||||
-DCLANG_PLUGIN_SUPPORT=ON \
|
||||
-DCLANG_SYSTEMZ_DEFAULT_ARCH=z196 \
|
||||
-DCLANG_VENDOR=Alpine \
|
||||
-DENABLE_LINKER_BUILD_ID=ON \
|
||||
-DLIBCLANG_BUILD_STATIC=ON \
|
||||
-DLLD_BUILD_SHARED_LIBS=ON \
|
||||
\
|
||||
$_cmake_cross_options \
|
||||
$_llvm_targets
|
||||
|
||||
cmake --build build
|
||||
|
||||
|
@ -168,166 +292,368 @@ build() {
|
|||
}
|
||||
|
||||
check() {
|
||||
LD_LIBRARY_PATH="$PWD/build/lib" \
|
||||
ninja -C build check-llvm
|
||||
}
|
||||
|
||||
package() {
|
||||
depends="$pkgname-linker-tools=$pkgver-r$pkgrel"
|
||||
|
||||
DESTDIR="$pkgdir" cmake --install build
|
||||
python3 llvm/utils/lit/setup.py install --root="$pkgdir"
|
||||
|
||||
cd "$pkgdir"/$_prefix
|
||||
# setuptools installs lit to /usr/bin, move it to $_prefix
|
||||
mv -v "$pkgdir"/usr/bin/lit "$pkgdir"/$_prefix/bin/lit
|
||||
ln -sv lit "$pkgdir"/$_prefix/bin/llvm-lit
|
||||
|
||||
# Symlink files from /usr/lib/llvm*/bin to /usr/bin.
|
||||
mkdir -p "$pkgdir"/usr/bin
|
||||
local name newname path
|
||||
for path in bin/*; do
|
||||
(cd "$pkgdir"/$_prefix
|
||||
local name newname path; for path in bin/*; do
|
||||
name=${path##*/}
|
||||
# Add version infix/suffix to the executable name.
|
||||
case "$name" in
|
||||
llvm-*) newname="llvm$_majorver-${name#llvm-}";;
|
||||
*) newname="$name$_majorver";;
|
||||
*-$_majorver) newname=$name ;;
|
||||
clang++) newname="$name-$_majorver" ;;
|
||||
clang-tblgen) newname="clang$_majorver-${name#clang-}" ;;
|
||||
count|llc|lli|not|opt) newname="$name$_majorver" ;;
|
||||
llvm-*) newname="llvm$_majorver-${name#llvm-}" ;;
|
||||
*) continue ;;
|
||||
esac
|
||||
# If this package provides=llvm (i.e. it's the default/latest
|
||||
# llvm package), omit version infix/suffix.
|
||||
if [ "$_default_llvm" = yes ]; then
|
||||
newname=$name
|
||||
fi
|
||||
case "$name" in
|
||||
FileCheck | obj2yaml | yaml2obj) continue;;
|
||||
esac
|
||||
ln -s ../lib/llvm$_majorver/bin/$name "$pkgdir"/usr/bin/$newname
|
||||
done
|
||||
ln -sv ../lib/llvm$_majorver/bin/$name "$pkgdir"/usr/bin/$newname
|
||||
done)
|
||||
|
||||
mkdir -p "$pkgdir"/usr/include "$pkgdir"/usr/lib/cmake
|
||||
|
||||
# symlink include to /usr/include/llvm$_llvmver
|
||||
ln -sfv ../lib/$pkgname/include "$pkgdir"/usr/include/$pkgname
|
||||
ln -sv ../lib/llvm$_majorver/include "$pkgdir"/usr/include/llvm$_majorver
|
||||
|
||||
# symlink cmake dir to system cmake
|
||||
ln -sfv ../$pkgname/lib/cmake/llvm "$pkgdir"/usr/lib/cmake/$pkgname
|
||||
# symlink cmake dirs to system cmake location, so find_package works
|
||||
local f; for f in clang ${_lld/;} llvm; do
|
||||
ln -sv ../llvm$_majorver/lib/cmake/$f "$pkgdir"/usr/lib/cmake/$f$_majorver
|
||||
done
|
||||
|
||||
local libllvm_soname="libLLVM.so.$_sover"
|
||||
local libllvm_soname2="libLLVM-$_majorver.so"
|
||||
|
||||
# libLLVM should be in /usr/lib. This is needed for binaries that are
|
||||
# dynamically linked with libLLVM, so they can find it on default path.
|
||||
mv -v "$pkgdir"/$_prefix/lib/$libllvm_soname "$pkgdir"/usr/lib/
|
||||
ln -sv $libllvm_soname "$pkgdir"/usr/lib/$libllvm_soname2
|
||||
|
||||
# And also symlink it back to the LLVM prefix.
|
||||
ln -sv ../../$libllvm_soname "$pkgdir"/$_prefix/lib/$libllvm_soname
|
||||
ln -sfv ../../$libllvm_soname "$pkgdir"/$_prefix/lib/$libllvm_soname2
|
||||
|
||||
# for bfd to work with clang -flto, you need to put the linker plugin in the bfd dir too,
|
||||
# not just usr/lib.
|
||||
mkdir -p "$pkgdir"/usr/lib/bfd-plugins
|
||||
ln -sv ../llvm$_majorver/lib/LLVMgold.so "$pkgdir"/usr/lib/bfd-plugins/LLVMgold-$_majorver.so
|
||||
|
||||
# also add a suffix-version variant of llvm-config, as that's what things normally check for
|
||||
ln -sv ../lib/llvm$_majorver/bin/llvm-config "$pkgdir"/usr/bin/llvm-config-$_majorver
|
||||
|
||||
# create system clang config
|
||||
# clang doesn't really have a way to set default -march abi options, so use the system config dir
|
||||
# see the clang UsersManual for how this config directory is parsed / fallback order.
|
||||
# this is set based on our gcc baseline. see the --with arguments in main/gcc.
|
||||
mkdir -p "$pkgdir"/etc/clang$_majorver
|
||||
# silent the unused-command-line-argument warning for -fstack-clash-protection,
|
||||
# which is in abuild's default.conf but unimplemented for some architectures.
|
||||
# (reference: https://maskray.me/blog/2023-08-25-clang-wunused-command-line-argument)
|
||||
cat > clang.cfg <<-EOF
|
||||
-fstack-clash-protection
|
||||
EOF
|
||||
cat > clang++.cfg <<-EOF
|
||||
@clang.cfg
|
||||
EOF
|
||||
|
||||
local arm32_enabled x86_enabled
|
||||
if [ -z "$_llvm_targets" ]; then
|
||||
arm32_enabled=true
|
||||
x86_enabled=true
|
||||
else
|
||||
case "$_llvm_targets" in
|
||||
*X86*) x86_enabled=true ;;
|
||||
*) x86_enabled=false ;;
|
||||
esac
|
||||
case "$_llvm_targets" in
|
||||
*ARM*) arm32_enabled=true ;;
|
||||
*) arm32_enabled=false ;;
|
||||
esac
|
||||
fi
|
||||
# clang defaults to pentium4 on i*86- triples.
|
||||
# see https://github.com/llvm/llvm-project/issues/61347
|
||||
$x86_enabled && cat > "$(arch_to_hostspec x86).cfg" <<-EOF
|
||||
-march=pentium-m -mfpmath=sse
|
||||
EOF
|
||||
# clang defaults to 'armv6' for armhf, i.e. no -zk.
|
||||
# -zk is also a deprecated name for -kz.
|
||||
$arm32_enabled && cat > "$(arch_to_hostspec armhf).cfg" <<-EOF
|
||||
-march=armv6kz
|
||||
-mfpu=vfp
|
||||
-mtune=arm1176jzf-s
|
||||
EOF
|
||||
# it's possible to do CHOST-clang.cfg and similar to make it per-tool
|
||||
# which is given priority over the separate target and driver configs
|
||||
mv -v ./*-linux-musl*.cfg "$pkgdir"/etc/clang$_majorver/ || :
|
||||
mv -v ./clang*.cfg "$pkgdir"/etc/clang$_majorver/
|
||||
|
||||
# delete things we don't want non-latest of
|
||||
rm -v "$pkgdir"/$_prefix/share/clang/bash-autocomplete.sh
|
||||
rm -v "$pkgdir"/$_prefix/share/clang/clang-*.el
|
||||
rm -v "$pkgdir"/$_prefix/share/clang/clang-format-bbedit.applescript
|
||||
|
||||
local clang_libs="
|
||||
libclang-cpp.so
|
||||
libclang-cpp.so.$_sover
|
||||
libclang.so
|
||||
libclang.so.$_sover
|
||||
libclang.so.$pkgver
|
||||
"
|
||||
for f in $clang_libs; do
|
||||
ln -sv ../lib/llvm$_majorver/lib/$f "$pkgdir"/usr/lib/$f
|
||||
done
|
||||
|
||||
(cd "$pkgdir"/$_prefix/lib
|
||||
for f in liblld*.so*; do
|
||||
ln -sv ../lib/llvm$_majorver/lib/$f "$pkgdir"/usr/lib/$f
|
||||
done)
|
||||
|
||||
mkdir -p "$pkgdir"/usr/lib/clang "$pkgdir"/usr/lib/ccache/bin
|
||||
|
||||
# compat symlink back to fix clang with -no-canonical-prefixes
|
||||
ln -sv ../llvm$_majorver/lib/clang/$_majorver "$pkgdir"/usr/lib/clang/$_majorver
|
||||
|
||||
# create ccache symlinks, for clang$_majorver-ccache subpackage
|
||||
ln -sv ../../../bin/ccache "$pkgdir"/usr/lib/ccache/bin/clang-$_majorver
|
||||
ln -sv ../../../bin/ccache "$pkgdir"/usr/lib/ccache/bin/clang++-$_majorver
|
||||
}
|
||||
|
||||
_gtest() {
|
||||
pkgdesc="LLVM $_majorver gtest static libraries"
|
||||
depends=""
|
||||
_common_subpkg
|
||||
amove "$_prefix"/lib/libLLVMTesting*.a \
|
||||
"$_prefix"/lib/libllvm_gtest*.a \
|
||||
"$_prefix"/include/llvm-gmock \
|
||||
"$_prefix"/include/llvm-gtest
|
||||
|
||||
amove \
|
||||
$_prefix/lib/libLLVMTesting*.a \
|
||||
$_prefix/lib/libllvm_gtest*.a \
|
||||
$_prefix/include/llvm-gmock \
|
||||
$_prefix/include/llvm-gtest
|
||||
}
|
||||
|
||||
static() {
|
||||
llvmstatic() {
|
||||
pkgdesc="LLVM $_majorver static libraries"
|
||||
depends=""
|
||||
_common_subpkg
|
||||
amove "$_prefix"/lib/*.a
|
||||
|
||||
amove $_prefix/lib/libLLVM*.a
|
||||
}
|
||||
|
||||
libs() {
|
||||
llvmlibs() {
|
||||
pkgdesc="LLVM $_majorver runtime library"
|
||||
depends=""
|
||||
local soname="libLLVM.so.${pkgver%.*}"
|
||||
local soname2="libLLVM-$_majorver.so"
|
||||
|
||||
mkdir -p "$subpkgdir"
|
||||
cd "$subpkgdir"
|
||||
|
||||
# libLLVM should be in /usr/lib. This is needed for binaries that are
|
||||
# dynamically linked with libLLVM, so they can find it on default path.
|
||||
mkdir -p "$subpkgdir"/usr/lib
|
||||
mv "$pkgdir"/$_prefix/lib/$soname "$subpkgdir"/usr/lib/
|
||||
ln -s $soname usr/lib/$soname2
|
||||
|
||||
# And also symlink it back to the LLVM prefix.
|
||||
mkdir -p $_prefix/lib
|
||||
ln -s ../../$soname $_prefix/lib/$soname
|
||||
ln -s ../../$soname $_prefix/lib/$soname2
|
||||
amove \
|
||||
usr/lib/libLLVM.so.$_sover \
|
||||
$_prefix/lib/libLLVM.so.$_sover
|
||||
}
|
||||
|
||||
linktools() {
|
||||
_common_subpkg
|
||||
pkgdesc="$pkgdesc (linker plugins)"
|
||||
|
||||
amove \
|
||||
$_prefix/lib/libLTO.so* \
|
||||
usr/lib/bfd-plugins/ \
|
||||
$_prefix/lib/LLVMgold* \
|
||||
|
||||
if [ "$_default_llvm" = yes ]; then
|
||||
ln -sfv llvm$_majorver/lib/LLVMgold.so "$subpkgdir"/usr/lib/
|
||||
ln -sfv llvm$_majorver/lib/libLTO.so "$subpkgdir"/usr/lib/
|
||||
|
||||
# for bfd to work with clang -flto, you need to put the linker plugin in the bfd dir too,
|
||||
# not just usr/lib.
|
||||
mkdir -p "$subpkgdir"/usr/lib/bfd-plugins/
|
||||
ln -sfv ../llvm$_majorver/lib/LLVMgold.so "$subpkgdir"/usr/lib/bfd-plugins/
|
||||
fi
|
||||
$_prefix/lib/libLTO.so*
|
||||
}
|
||||
|
||||
dev() {
|
||||
_common_subpkg
|
||||
default_dev
|
||||
cd "$subpkgdir"
|
||||
llvmdev() {
|
||||
pkgdesc="$pkgdesc (development files)"
|
||||
depends="$depends_dev"
|
||||
|
||||
amove \
|
||||
$_prefix/lib \
|
||||
$_prefix/bin/llvm-config
|
||||
usr/bin/llvm*config* \
|
||||
usr/include/llvm* \
|
||||
usr/lib/cmake/llvm* \
|
||||
usr/lib/libLLVM*.so \
|
||||
$_prefix/bin/llvm-config \
|
||||
$_prefix/include/llvm*/ \
|
||||
$_prefix/lib/cmake/llvm/ \
|
||||
$_prefix/lib/libLLVM*.so \
|
||||
$_prefix/lib/libRemarks*
|
||||
}
|
||||
|
||||
if [ "$_default_llvm" = yes ]; then
|
||||
ln -sf llvm$_majorver usr/lib/cmake/llvm
|
||||
ln -sf llvm$_majorver/lib/LLVMgold.so "$pkgdir"/usr/lib/
|
||||
ln -sf llvm$_majorver/lib/libLTO.so "$pkgdir"/usr/lib/
|
||||
fi
|
||||
_llvm_lit() {
|
||||
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites (llvm-lit)"
|
||||
depends="$pkgname-test-utils=$pkgver-r$pkgrel"
|
||||
|
||||
# also add a suffix-version variant of llvm-config, as that's what things normally check for
|
||||
mkdir -p "$subpkgdir"/usr/bin/
|
||||
ln -sfv ../lib/llvm$_majorver/bin/llvm-config "$subpkgdir"/usr/bin/llvm-config-$_majorver
|
||||
amove \
|
||||
usr/bin/llvm$_majorver-lit \
|
||||
usr/lib/python3*/site-packages/lit*/ \
|
||||
$_prefix/bin/lit \
|
||||
$_prefix/bin/llvm-lit
|
||||
}
|
||||
|
||||
_test_utils() {
|
||||
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites"
|
||||
depends="python3"
|
||||
_common_subpkg
|
||||
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites (binaries)"
|
||||
depends=""
|
||||
|
||||
local litver=$(python3 "$builddir"/llvm/utils/lit/setup.py --version 2>/dev/null \
|
||||
| sed 's/\.dev.*$//')
|
||||
test -n "$litver"
|
||||
provides="$provides lit=$litver-r$pkgrel"
|
||||
|
||||
amove usr/lib/$pkgname/bin/FileCheck \
|
||||
usr/lib/$pkgname/bin/count \
|
||||
usr/lib/$pkgname/bin/not \
|
||||
usr/lib/python* \
|
||||
usr/bin/lit
|
||||
|
||||
mv "$subpkgdir"/usr/bin/lit "$subpkgdir"/$_prefix/bin/lit
|
||||
ln -s lit "$subpkgdir"/$_prefix/bin/llvm-lit
|
||||
|
||||
if [ "$_default_llvm" = yes ]; then
|
||||
amove usr/bin/count usr/bin/not
|
||||
ln -s ../lib/llvm$_majorver/bin/lit "$subpkgdir"/usr/bin/lit
|
||||
else
|
||||
amove usr/bin/count$_majorver usr/bin/not$_majorver
|
||||
fi
|
||||
amove \
|
||||
usr/bin/count$_majorver \
|
||||
usr/bin/not$_majorver \
|
||||
$_prefix/bin/FileCheck \
|
||||
$_prefix/bin/count \
|
||||
$_prefix/bin/not
|
||||
}
|
||||
|
||||
_common_subpkg() {
|
||||
if [ "$_default_llvm" = yes ]; then
|
||||
replaces="llvm${subpkgname#"$pkgname"} llvm${_prevmajorver}${subpkgname#"$pkgname"}"
|
||||
provides="llvm${subpkgname#"$pkgname"}=$pkgver-r$pkgrel"
|
||||
fi
|
||||
_lld() {
|
||||
pkgdesc="$_llddesc"
|
||||
|
||||
amove \
|
||||
$_prefix/bin/*lld* \
|
||||
$_prefix/bin/wasm-ld
|
||||
}
|
||||
|
||||
lldlibs() {
|
||||
pkgdesc="$_llddesc (libraries)"
|
||||
|
||||
amove \
|
||||
usr/lib/liblld*.so.* \
|
||||
$_prefix/lib/liblld*.so.*
|
||||
}
|
||||
|
||||
llddev() {
|
||||
pkgdesc="$_llddesc (development files)"
|
||||
depends="lld$_majorver=$pkgver-r$pkgrel"
|
||||
|
||||
amove \
|
||||
usr/lib/cmake/lld$_majorver \
|
||||
usr/lib/liblld*.so \
|
||||
$_prefix/include/lld \
|
||||
$_prefix/lib/cmake/lld \
|
||||
$_prefix/lib/liblld*.so
|
||||
}
|
||||
|
||||
extra() {
|
||||
pkgdesc="Extra tools built using Clang's tooling APIs"
|
||||
|
||||
amove \
|
||||
$_prefix/bin/clang-apply-replacements* \
|
||||
$_prefix/bin/clang-change-namespace* \
|
||||
$_prefix/bin/clang-doc* \
|
||||
$_prefix/bin/clang-format* \
|
||||
$_prefix/bin/clang-include-cleaner* \
|
||||
$_prefix/bin/clang-include-fixer* \
|
||||
$_prefix/bin/clang-move* \
|
||||
$_prefix/bin/clang-offload-bundler* \
|
||||
$_prefix/bin/clang-pseudo* \
|
||||
$_prefix/bin/clang-query* \
|
||||
$_prefix/bin/clang-refactor* \
|
||||
$_prefix/bin/clang-rename* \
|
||||
$_prefix/bin/clang-reorder-fields* \
|
||||
$_prefix/bin/clang-repl* \
|
||||
$_prefix/bin/clang-scan-deps* \
|
||||
$_prefix/bin/clang-tidy* \
|
||||
$_prefix/bin/clangd* \
|
||||
$_prefix/bin/c-index-test* \
|
||||
$_prefix/bin/diagtool* \
|
||||
$_prefix/bin/find-all-symbols* \
|
||||
$_prefix/bin/git-clang-format* \
|
||||
$_prefix/bin/hmaptool* \
|
||||
$_prefix/bin/modularize* \
|
||||
$_prefix/bin/pp-trace* \
|
||||
$_prefix/bin/run-clang-tidy* \
|
||||
$_prefix/share/clang
|
||||
}
|
||||
|
||||
_clang() {
|
||||
pkgdesc="$_clangdesc"
|
||||
# the libraries should always exactly match, not just by soname
|
||||
depends="
|
||||
$pkgname-linker-tools=$pkgver-r$pkgrel
|
||||
$subpkgname-headers=$pkgver-r$pkgrel
|
||||
$subpkgname-libs=$pkgver-r$pkgrel
|
||||
$_depends_clang
|
||||
"
|
||||
|
||||
amove \
|
||||
etc/clang* \
|
||||
usr/bin/clang* \
|
||||
usr/lib/clang \
|
||||
$_prefix/bin/*-arch \
|
||||
$_prefix/bin/clang*
|
||||
}
|
||||
|
||||
clangdev() {
|
||||
pkgdesc="$_clangdesc (development files)"
|
||||
depends="clang$_majorver=$pkgver-r$pkgrel"
|
||||
|
||||
# move cmake to -dev
|
||||
amove \
|
||||
usr/lib/cmake/clang$_majorver \
|
||||
usr/lib/libclang*.so \
|
||||
$_prefix/include/clang*/ \
|
||||
$_prefix/lib/cmake/clang \
|
||||
$_prefix/lib/libclang*.so
|
||||
}
|
||||
|
||||
clangstatic() {
|
||||
pkgdesc="$_clangdesc (static library)"
|
||||
|
||||
amove \
|
||||
$_prefix/lib/libclang*.a \
|
||||
$_prefix/lib/libfindAllSymbols.a
|
||||
}
|
||||
|
||||
clanglibs() {
|
||||
pkgdesc="$_clangdesc (C++ interface)"
|
||||
|
||||
# this can fail depending on the symlinks and is already moved
|
||||
amove \
|
||||
usr/lib/libclang-cpp.so.* \
|
||||
$_prefix/lib/libclang-cpp.so.*
|
||||
}
|
||||
|
||||
libclang() {
|
||||
pkgdesc="$_clangdesc (C interface)"
|
||||
depends="clang$_majorver-headers=$pkgver-r$pkgrel"
|
||||
|
||||
# we add an extra subpackage for this so things that link to libclang don't
|
||||
# have to pull libclang-cpp too (separate)
|
||||
amove \
|
||||
usr/lib/libclang.so.* \
|
||||
$_prefix/lib/libclang.so.*
|
||||
}
|
||||
|
||||
headers() {
|
||||
pkgdesc="$_clangdesc (header files)"
|
||||
|
||||
amove $_prefix/lib/clang/$_majorver/include
|
||||
}
|
||||
|
||||
_ccache() {
|
||||
pkgdesc="$_clangdesc (ccache symlinks)"
|
||||
install_if="clang$_majorver=$pkgver-r$pkgrel ccache"
|
||||
|
||||
amove usr/lib/ccache/bin
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
25eeee9984c8b4d0fbc240df90f33cbb000d3b0414baff5c8982beafcc5e59e7ef18f6f85d95b3a5f60cb3d4cd4f877c80487b5768bc21bc833f107698ad93db llvm-project-18.1.8.src.tar.xz
|
||||
84ed6b165445d0cdb59daa59f612a7d960bf67b13a1b19bdd2a19d46548013e756faca6b8249cb6c60354f3a9aaef46652e5f531944c71294e46d2f7bfd8b832 0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
|
||||
f98a42e0ce6fef78487b49412d9961fc7013f17205d77956b4c0b23d3de1f7a282eca9551266b66a7243496cbfc2838bb95c4e0a009030163af090e9a8d6ed95 0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
|
||||
ef63d5e01440cff65c10b84b65099bbd539bae72065d5581a8d2409cf2d0d4410d5bb3f501273ab29ee65bf8f5d23653a074428c2711ff9209324de56b857f3f allocscore.patch
|
||||
1826a6877d0c9e93c2d6ce0b4f83fe1118b9449f82f1919b37be5fc6d7c11ae22e0c02a7d3e6e23ce41bbb07df2ff08124aa9172e254ef2b12ecbc80d9a674a9 fix-memory-mf_exec-on-aarch64.patch
|
||||
ebc0be314c129ef38f00c8c2be9d589658cae89ac8cda109e35933b5044e775a3d370c0c584d3e501e4d43167b8523d8c5e5a85653d8ebe853571697ae40fb35 install-prefix.patch
|
||||
2123f01d8075a15cf8c2d8091fc8c92cb99807b1d654af13b436690ddb55f3e893a494593b3c92aeab26e50db4e0500ac688129ab6bc11e4765c0308b90db101 llvm-stack-size.patch
|
||||
ce04c88e95282b2b1938c7b0014d5b4f8360f1f128fed706f5e6a2f3eabc3848c60ff63fe605e5eebc7b9b0669793b77f91a3f63b1c1562291ff69e7d951fd09 backport-miscompile-floating-point.patch
|
||||
48c17c5413c9cf75520353c2553a522ae47a7d1792ecd0c750fa4eb5798f3ef009ae439d75b734986411ad0b438d37a18cdb5493112d7f98496a3dc6feb6ca72 backport-riscv64-jitlink-fixes.patch
|
||||
bd51d487c46472963a350cd90f7d7a5d8a4494467716f4e4e3d21ba6be5f65c0e84f173a5bb8468fb68325e75401f08110f8886320d5caa9acd339d795b254bc fix-hexagon-tests.patch
|
||||
3cd5f0086034cfa79f01c9ab8c28c76e89fbda4758fb6f550c65da1026a97f69abc6172253b89cc6c9852ef5a4c02031abcadef7781aed6d6a3ec025eb4cbc15 llvm-riscv-xthreadmempair.patch
|
||||
5e67befcc470c605aa61ff2e0c63057e121633def720e5c67fb4ecdc4a5852bee6ca93fe9953531389dc43f79e1828a411f5a40eb70a686d47ab127153be0ade fix-macho-invalid-test.patch
|
||||
1826a6877d0c9e93c2d6ce0b4f83fe1118b9449f82f1919b37be5fc6d7c11ae22e0c02a7d3e6e23ce41bbb07df2ff08124aa9172e254ef2b12ecbc80d9a674a9 fix-memory-mf_exec-on-aarch64.patch
|
||||
6799218f1938e028d253f02e70af01ea300b3435e2bd9db35e38a669ea3c3fdab89b676c62c780007d900e7c187692efe4da3267b71f43028bdbd0478653fde1 gcc15-cstdint.patch
|
||||
510833875b190101a2bc466a7d3e17e820d4806345f350385c2e8e5112713fd864467f245e85f9b192b2c9b00c3fa33c5de773f98a38dfbb4ae80e158af19738 install-prefix.patch
|
||||
3cd5f0086034cfa79f01c9ab8c28c76e89fbda4758fb6f550c65da1026a97f69abc6172253b89cc6c9852ef5a4c02031abcadef7781aed6d6a3ec025eb4cbc15 llvm-riscv-xthreadmempair.patch
|
||||
2123f01d8075a15cf8c2d8091fc8c92cb99807b1d654af13b436690ddb55f3e893a494593b3c92aeab26e50db4e0500ac688129ab6bc11e4765c0308b90db101 llvm-stack-size.patch
|
||||
a45f078c4ddd5e1bece2e2e6795d4760a88dd3bb0921786d2f0650979268554e87e9190b42be1efa7e76e8d14a5a6db453dc367711576397e00fe647c9261791 skip-roundeven-tests.patch
|
||||
b5440db2b4ae8e35ef02b3c43a14a1341ef322f541ffd6556e2db00d1006c9e1487f5f8f78dae15d24f18b11a969626b73b21d1bc227a8889b93f99577b5913f 10-add-musl-triples.patch
|
||||
cf177cea6ad679a605f92936c39d12462595f554bca01eddf5700eee07fe636b53a961c142c3aab76a02e384a9fd2be328796bcc2e5175bb8acca485e3f981d7 30-Enable-stack-protector-by-default-for-Alpine-Linux.patch
|
||||
379443909e20ac392a8237c24c02c0f5da9bf8c176e7562da9212f6867fdd06e7bae21b5260cba3e55b9136f1d67275cc197ebb976b496bab52a3d9f74a37014 clang-001-fortify-include.patch
|
||||
89c00914c59cf3243a885430d708e099dac6ab7c01b1541fb4fea578fe20b623821bf123edddfa551a12f8e960c4b28ac18a007758a6fe4d9953bc4c7bd2c6e6 clang-002-fortify-enable.patch
|
||||
a8f5d2fca12fe0533f634284bbfc6857281a81b4f3a367d70c53f2186817ce2bdd1acf196a9200380f197b213b5f73db8404a17ca0c34cc990b60e110f06ebba clang-003-as-needed.patch
|
||||
56b362308a0a7050531a438cd1ee76ebbdaa6d0bd8019d9cb3a15de105bf1d17e74c19bffce8c09aac2ee05cede01e6ed665931ef593bc84804d645a6f818c15 LLD-add-build-shared-libs-option.patch
|
||||
"
|
||||
|
|
23
main/llvm18/LLD-add-build-shared-libs-option.patch
Normal file
23
main/llvm18/LLD-add-build-shared-libs-option.patch
Normal file
|
@ -0,0 +1,23 @@
|
|||
--- a/lld/CMakeLists.txt
|
||||
+++ b/lld/CMakeLists.txt
|
||||
@@ -160,6 +160,9 @@ if (LLD_USE_VTUNE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
+option(LLD_BUILD_SHARED_LIBS
|
||||
+ "Build lld libraries as shared libraries instead of static" OFF)
|
||||
+
|
||||
option(LLD_BUILD_TOOLS
|
||||
"Build the lld tools. If OFF, just generate build targets." ON)
|
||||
|
||||
--- a/lld/cmake/modules/AddLLD.cmake
|
||||
+++ b/lld/cmake/modules/AddLLD.cmake
|
||||
@@ -7,7 +7,7 @@ macro(add_lld_library name)
|
||||
""
|
||||
""
|
||||
${ARGN})
|
||||
- if(ARG_SHARED)
|
||||
+ if( LLD_BUILD_SHARED_LIBS OR ARG_SHARED )
|
||||
set(ARG_ENABLE_SHARED SHARED)
|
||||
endif()
|
||||
llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS})
|
348
main/llvm18/backport-miscompile-floating-point.patch
Normal file
348
main/llvm18/backport-miscompile-floating-point.patch
Normal file
|
@ -0,0 +1,348 @@
|
|||
Patch-Source: https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/-/blob/18/debian/patches/backport-miscompile-floating-point.diff
|
||||
|
||||
Upstream: https://github.com/llvm/llvm-project/commit/90c14748638f1e10e31173b145fdbb5c4529c922
|
||||
--
|
||||
Index: llvm-toolchain-18-18.1.8/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-18-18.1.8.orig/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
|
||||
+++ llvm-toolchain-18-18.1.8/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
|
||||
@@ -2168,7 +2168,8 @@ void SelectionDAGLegalize::ExpandFPLibCa
|
||||
Results.push_back(Tmp.first);
|
||||
Results.push_back(Tmp.second);
|
||||
} else {
|
||||
- SDValue Tmp = ExpandLibCall(LC, Node, false).first;
|
||||
+ bool IsSignedArgument = Node->getOpcode() == ISD::FLDEXP;
|
||||
+ SDValue Tmp = ExpandLibCall(LC, Node, IsSignedArgument).first;
|
||||
Results.push_back(Tmp);
|
||||
}
|
||||
}
|
||||
Index: llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/ldexp-libcall.ll
|
||||
===================================================================
|
||||
--- llvm-toolchain-18-18.1.8.orig/llvm/test/CodeGen/PowerPC/ldexp-libcall.ll
|
||||
+++ llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/ldexp-libcall.ll
|
||||
@@ -10,7 +10,7 @@ define float @call_ldexpf(float %a, i32
|
||||
; CHECK-NEXT: std r0, 48(r1)
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
||||
; CHECK-NEXT: .cfi_offset lr, 16
|
||||
-; CHECK-NEXT: clrldi r4, r4, 32
|
||||
+; CHECK-NEXT: extsw r4, r4
|
||||
; CHECK-NEXT: bl ldexpf
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: addi r1, r1, 32
|
||||
@@ -29,7 +29,7 @@ define double @call_ldexp(double %a, i32
|
||||
; CHECK-NEXT: std r0, 48(r1)
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
||||
; CHECK-NEXT: .cfi_offset lr, 16
|
||||
-; CHECK-NEXT: clrldi r4, r4, 32
|
||||
+; CHECK-NEXT: extsw r4, r4
|
||||
; CHECK-NEXT: bl ldexp
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: addi r1, r1, 32
|
||||
Index: llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/ldexp.ll
|
||||
===================================================================
|
||||
--- llvm-toolchain-18-18.1.8.orig/llvm/test/CodeGen/PowerPC/ldexp.ll
|
||||
+++ llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/ldexp.ll
|
||||
@@ -1,6 +1,7 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
|
||||
; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \
|
||||
; RUN: -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names < %s | FileCheck %s
|
||||
+; XFAIL: *
|
||||
|
||||
define float @ldexp_f32(i8 zeroext %x) {
|
||||
; CHECK-LABEL: ldexp_f32:
|
||||
@@ -59,22 +60,24 @@ define <2 x float> @ldexp_v2f32(<2 x flo
|
||||
; CHECK-NEXT: .cfi_offset v29, -48
|
||||
; CHECK-NEXT: .cfi_offset v30, -32
|
||||
; CHECK-NEXT: .cfi_offset v31, -16
|
||||
-; CHECK-NEXT: xxsldwi vs0, v2, v2, 3
|
||||
; CHECK-NEXT: li r3, 0
|
||||
+; CHECK-NEXT: xxsldwi vs0, v2, v2, 3
|
||||
; CHECK-NEXT: stxv v29, 32(r1) # 16-byte Folded Spill
|
||||
; CHECK-NEXT: xscvspdpn f1, vs0
|
||||
-; CHECK-NEXT: vextuwrx r4, r3, v3
|
||||
+; CHECK-NEXT: vextuwrx r3, r3, v3
|
||||
; CHECK-NEXT: stxv v30, 48(r1) # 16-byte Folded Spill
|
||||
; CHECK-NEXT: stxv v31, 64(r1) # 16-byte Folded Spill
|
||||
+; CHECK-NEXT: extsw r4, r3
|
||||
; CHECK-NEXT: vmr v31, v3
|
||||
; CHECK-NEXT: vmr v30, v2
|
||||
; CHECK-NEXT: bl ldexpf
|
||||
; CHECK-NEXT: nop
|
||||
-; CHECK-NEXT: xxswapd vs0, v30
|
||||
; CHECK-NEXT: li r3, 4
|
||||
+; CHECK-NEXT: xxswapd vs0, v30
|
||||
; CHECK-NEXT: xscvdpspn v29, f1
|
||||
; CHECK-NEXT: xscvspdpn f1, vs0
|
||||
-; CHECK-NEXT: vextuwrx r4, r3, v31
|
||||
+; CHECK-NEXT: vextuwrx r3, r3, v31
|
||||
+; CHECK-NEXT: extsw r4, r3
|
||||
; CHECK-NEXT: bl ldexpf
|
||||
; CHECK-NEXT: nop
|
||||
; CHECK-NEXT: xscvdpspn vs0, f1
|
||||
@@ -160,7 +163,7 @@ define half @ldexp_f16(half %arg0, i32 %
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
||||
; CHECK-NEXT: .cfi_offset lr, 16
|
||||
; CHECK-NEXT: xscvdphp f0, f1
|
||||
-; CHECK-NEXT: clrldi r4, r4, 32
|
||||
+; CHECK-NEXT: extsw r4, r4
|
||||
; CHECK-NEXT: mffprwz r3, f0
|
||||
; CHECK-NEXT: clrlwi r3, r3, 16
|
||||
; CHECK-NEXT: mtfprwz f0, r3
|
||||
Index: llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/negative-integer-fp-libcall.ll
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ llvm-toolchain-18-18.1.8/llvm/test/CodeGen/PowerPC/negative-integer-fp-libcall.ll
|
||||
@@ -0,0 +1,26 @@
|
||||
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
|
||||
+; RUN: llc -O1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
|
||||
+
|
||||
+; Test that a negative parameter smaller than 64 bits (e.g., int)
|
||||
+; is correctly implemented with sign-extension when passed to
|
||||
+; a floating point libcall.
|
||||
+
|
||||
+define double @ldexp_test(ptr %a, ptr %b) nounwind {
|
||||
+; CHECK-LABEL: ldexp_test:
|
||||
+; CHECK: # %bb.0:
|
||||
+; CHECK-NEXT: mflr 0
|
||||
+; CHECK-NEXT: stdu 1, -112(1)
|
||||
+; CHECK-NEXT: std 0, 128(1)
|
||||
+; CHECK-NEXT: lfd 1, 0(3)
|
||||
+; CHECK-NEXT: lwa 4, 0(4)
|
||||
+; CHECK-NEXT: bl ldexp
|
||||
+; CHECK-NEXT: nop
|
||||
+; CHECK-NEXT: addi 1, 1, 112
|
||||
+; CHECK-NEXT: ld 0, 16(1)
|
||||
+; CHECK-NEXT: mtlr 0
|
||||
+; CHECK-NEXT: blr
|
||||
+ %base = load double, ptr %a
|
||||
+ %exp = load i32, ptr %b
|
||||
+ %call = call double @llvm.ldexp.f64.i32(double %base, i32 signext %exp)
|
||||
+ ret double %call
|
||||
+}
|
||||
Index: llvm-toolchain-18-18.1.8/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
|
||||
===================================================================
|
||||
--- llvm-toolchain-18-18.1.8.orig/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
|
||||
+++ llvm-toolchain-18-18.1.8/llvm/test/CodeGen/X86/fold-int-pow2-with-fmul-or-fdiv.ll
|
||||
@@ -406,13 +406,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-SSE-NEXT: subq $72, %rsp
|
||||
; CHECK-SSE-NEXT: .cfi_def_cfa_offset 80
|
||||
; CHECK-SSE-NEXT: movdqa %xmm0, (%rsp) # 16-byte Spill
|
||||
-; CHECK-SSE-NEXT: pextrw $7, %xmm0, %edi
|
||||
+; CHECK-SSE-NEXT: pextrw $7, %xmm0, %eax
|
||||
+; CHECK-SSE-NEXT: movswl %ax, %edi
|
||||
; CHECK-SSE-NEXT: movss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-SSE-NEXT: callq ldexpf@PLT
|
||||
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
|
||||
; CHECK-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-SSE-NEXT: pextrw $6, %xmm0, %edi
|
||||
+; CHECK-SSE-NEXT: pextrw $6, %xmm0, %eax
|
||||
+; CHECK-SSE-NEXT: movswl %ax, %edi
|
||||
; CHECK-SSE-NEXT: movd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-SSE-NEXT: callq ldexpf@PLT
|
||||
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
|
||||
@@ -420,13 +422,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-SSE-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
|
||||
; CHECK-SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-SSE-NEXT: pextrw $5, %xmm0, %edi
|
||||
+; CHECK-SSE-NEXT: pextrw $5, %xmm0, %eax
|
||||
+; CHECK-SSE-NEXT: movswl %ax, %edi
|
||||
; CHECK-SSE-NEXT: movss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-SSE-NEXT: callq ldexpf@PLT
|
||||
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
|
||||
; CHECK-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-SSE-NEXT: pextrw $4, %xmm0, %edi
|
||||
+; CHECK-SSE-NEXT: pextrw $4, %xmm0, %eax
|
||||
+; CHECK-SSE-NEXT: movswl %ax, %edi
|
||||
; CHECK-SSE-NEXT: movd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-SSE-NEXT: callq ldexpf@PLT
|
||||
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
|
||||
@@ -436,13 +440,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-SSE-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
|
||||
; CHECK-SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-SSE-NEXT: pextrw $3, %xmm0, %edi
|
||||
+; CHECK-SSE-NEXT: pextrw $3, %xmm0, %eax
|
||||
+; CHECK-SSE-NEXT: movswl %ax, %edi
|
||||
; CHECK-SSE-NEXT: movss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-SSE-NEXT: callq ldexpf@PLT
|
||||
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
|
||||
; CHECK-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-SSE-NEXT: pextrw $2, %xmm0, %edi
|
||||
+; CHECK-SSE-NEXT: pextrw $2, %xmm0, %eax
|
||||
+; CHECK-SSE-NEXT: movswl %ax, %edi
|
||||
; CHECK-SSE-NEXT: movd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-SSE-NEXT: callq ldexpf@PLT
|
||||
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
|
||||
@@ -450,14 +456,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-SSE-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
|
||||
; CHECK-SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-SSE-NEXT: pextrw $1, %xmm0, %edi
|
||||
+; CHECK-SSE-NEXT: pextrw $1, %xmm0, %eax
|
||||
+; CHECK-SSE-NEXT: movswl %ax, %edi
|
||||
; CHECK-SSE-NEXT: movss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-SSE-NEXT: callq ldexpf@PLT
|
||||
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
|
||||
; CHECK-SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-SSE-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
; CHECK-SSE-NEXT: movd %xmm0, %eax
|
||||
-; CHECK-SSE-NEXT: movzwl %ax, %edi
|
||||
+; CHECK-SSE-NEXT: movswl %ax, %edi
|
||||
; CHECK-SSE-NEXT: movd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-SSE-NEXT: callq ldexpf@PLT
|
||||
; CHECK-SSE-NEXT: callq __truncsfhf2@PLT
|
||||
@@ -476,13 +483,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX2-NEXT: subq $72, %rsp
|
||||
; CHECK-AVX2-NEXT: .cfi_def_cfa_offset 80
|
||||
; CHECK-AVX2-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill
|
||||
-; CHECK-AVX2-NEXT: vpextrw $7, %xmm0, %edi
|
||||
+; CHECK-AVX2-NEXT: vpextrw $7, %xmm0, %eax
|
||||
+; CHECK-AVX2-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX2-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX2-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
|
||||
; CHECK-AVX2-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX2-NEXT: vpextrw $6, %xmm0, %edi
|
||||
+; CHECK-AVX2-NEXT: vpextrw $6, %xmm0, %eax
|
||||
+; CHECK-AVX2-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX2-NEXT: vmovd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX2-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
|
||||
@@ -490,13 +499,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX2-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
|
||||
; CHECK-AVX2-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX2-NEXT: vpextrw $5, %xmm0, %edi
|
||||
+; CHECK-AVX2-NEXT: vpextrw $5, %xmm0, %eax
|
||||
+; CHECK-AVX2-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX2-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX2-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
|
||||
; CHECK-AVX2-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX2-NEXT: vpextrw $4, %xmm0, %edi
|
||||
+; CHECK-AVX2-NEXT: vpextrw $4, %xmm0, %eax
|
||||
+; CHECK-AVX2-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX2-NEXT: vmovd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX2-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
|
||||
@@ -506,13 +517,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX2-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
|
||||
; CHECK-AVX2-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX2-NEXT: vpextrw $3, %xmm0, %edi
|
||||
+; CHECK-AVX2-NEXT: vpextrw $3, %xmm0, %eax
|
||||
+; CHECK-AVX2-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX2-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX2-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
|
||||
; CHECK-AVX2-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX2-NEXT: vpextrw $2, %xmm0, %edi
|
||||
+; CHECK-AVX2-NEXT: vpextrw $2, %xmm0, %eax
|
||||
+; CHECK-AVX2-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX2-NEXT: vmovd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX2-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
|
||||
@@ -520,14 +533,15 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX2-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
|
||||
; CHECK-AVX2-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX2-NEXT: vpextrw $1, %xmm0, %edi
|
||||
+; CHECK-AVX2-NEXT: vpextrw $1, %xmm0, %eax
|
||||
+; CHECK-AVX2-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX2-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX2-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
|
||||
; CHECK-AVX2-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX2-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
; CHECK-AVX2-NEXT: vmovd %xmm0, %eax
|
||||
-; CHECK-AVX2-NEXT: movzwl %ax, %edi
|
||||
+; CHECK-AVX2-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX2-NEXT: vmovd {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX2-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX2-NEXT: callq __truncsfhf2@PLT
|
||||
@@ -546,7 +560,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX512F-NEXT: subq $72, %rsp
|
||||
; CHECK-AVX512F-NEXT: .cfi_def_cfa_offset 80
|
||||
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill
|
||||
-; CHECK-AVX512F-NEXT: vpextrw $7, %xmm0, %edi
|
||||
+; CHECK-AVX512F-NEXT: vpextrw $7, %xmm0, %eax
|
||||
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
|
||||
@@ -554,7 +569,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX512F-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
|
||||
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX512F-NEXT: vpextrw $6, %xmm0, %edi
|
||||
+; CHECK-AVX512F-NEXT: vpextrw $6, %xmm0, %eax
|
||||
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
|
||||
@@ -564,7 +580,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX512F-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
|
||||
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX512F-NEXT: vpextrw $5, %xmm0, %edi
|
||||
+; CHECK-AVX512F-NEXT: vpextrw $5, %xmm0, %eax
|
||||
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
|
||||
@@ -572,7 +589,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX512F-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
|
||||
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX512F-NEXT: vpextrw $4, %xmm0, %edi
|
||||
+; CHECK-AVX512F-NEXT: vpextrw $4, %xmm0, %eax
|
||||
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
|
||||
@@ -584,7 +602,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX512F-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
|
||||
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX512F-NEXT: vpextrw $3, %xmm0, %edi
|
||||
+; CHECK-AVX512F-NEXT: vpextrw $3, %xmm0, %eax
|
||||
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
|
||||
@@ -592,7 +611,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX512F-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
|
||||
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX512F-NEXT: vpextrw $2, %xmm0, %edi
|
||||
+; CHECK-AVX512F-NEXT: vpextrw $2, %xmm0, %eax
|
||||
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
|
||||
@@ -602,7 +622,8 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX512F-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
|
||||
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
-; CHECK-AVX512F-NEXT: vpextrw $1, %xmm0, %edi
|
||||
+; CHECK-AVX512F-NEXT: vpextrw $1, %xmm0, %eax
|
||||
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
|
||||
@@ -611,7 +632,7 @@ define <8 x half> @fmul_pow2_ldexp_8xhal
|
||||
; CHECK-AVX512F-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
|
||||
; CHECK-AVX512F-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
|
||||
; CHECK-AVX512F-NEXT: vmovd %xmm0, %eax
|
||||
-; CHECK-AVX512F-NEXT: movzwl %ax, %edi
|
||||
+; CHECK-AVX512F-NEXT: movswl %ax, %edi
|
||||
; CHECK-AVX512F-NEXT: vmovss {{.*#+}} xmm0 = [8.192E+3,0.0E+0,0.0E+0,0.0E+0]
|
||||
; CHECK-AVX512F-NEXT: callq ldexpf@PLT
|
||||
; CHECK-AVX512F-NEXT: vcvtps2ph $4, %xmm0, %xmm0
|
143
main/llvm18/backport-riscv64-jitlink-fixes.patch
Normal file
143
main/llvm18/backport-riscv64-jitlink-fixes.patch
Normal file
|
@ -0,0 +1,143 @@
|
|||
Patch-Source-1: https://github.com/llvm/llvm-project/commit/3d67cf681a728e4cf0ab9947c0dd07539dda8b74
|
||||
Patch-Source-2: https://github.com/llvm/llvm-project/commit/78f39dc70c1feaea5130b90ea3fb7b3ddd62446b
|
||||
--
|
||||
From 3d67cf681a728e4cf0ab9947c0dd07539dda8b74 Mon Sep 17 00:00:00 2001
|
||||
From: Min-Yih Hsu <min.hsu@sifive.com>
|
||||
Date: Fri, 16 Feb 2024 16:19:56 -0800
|
||||
Subject: [PATCH] [JITLink] Always unmap standard segments in
|
||||
InProcessMemoryManager::deallocate (#81943)
|
||||
|
||||
Right now InProcessMemoryManager only releases a standard segment (via
|
||||
sys::Memory::releaseMappedMemory) in `deallocate` when there is a
|
||||
DeallocAction associated, leaving residual memory pages in the process
|
||||
until termination.
|
||||
Despite being a de facto memory leak, it won't cause a major issue if
|
||||
users only create a single LLJIT instance per process, which is the most
|
||||
common use cases. It will, however, drain virtual memory pages if we
|
||||
create thousands of ephemeral LLJIT instances in the same process.
|
||||
|
||||
This patch fixes this issue by releasing every standard segments
|
||||
regardless of the attached DeallocAction.
|
||||
---
|
||||
llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
|
||||
index 474a0b5160bcb..dacf0e6c8aa4f 100644
|
||||
--- a/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
|
||||
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
|
||||
@@ -449,8 +449,7 @@ void InProcessMemoryManager::deallocate(std::vector<FinalizedAlloc> Allocs,
|
||||
for (auto &Alloc : Allocs) {
|
||||
auto *FA = Alloc.release().toPtr<FinalizedAllocInfo *>();
|
||||
StandardSegmentsList.push_back(std::move(FA->StandardSegments));
|
||||
- if (!FA->DeallocActions.empty())
|
||||
- DeallocActionsList.push_back(std::move(FA->DeallocActions));
|
||||
+ DeallocActionsList.push_back(std::move(FA->DeallocActions));
|
||||
FA->~FinalizedAllocInfo();
|
||||
FinalizedAllocInfos.Deallocate(FA);
|
||||
}
|
||||
--
|
||||
From 78f39dc70c1feaea5130b90ea3fb7b3ddd62446b Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Hahnfeld <hahnjo@hahnjo.de>
|
||||
Date: Mon, 12 Feb 2024 19:45:52 +0100
|
||||
Subject: [PATCH] [JITLink][RISCV] Use hashmap to find PCREL_HI20 edge (#78849)
|
||||
|
||||
As noted in issues #68594 and #73935, `JITLink/RISCV/ELF_ehframe.s`
|
||||
fails with libstdc++'s expensive checks because `getRISCVPCRelHi20`
|
||||
calls `std::equal_range` on the edges which may not be ordered by their
|
||||
offset. Instead let `ELFJITLinker_riscv` build a hashmap of all edges
|
||||
with type `R_RISCV_PCREL_HI20` that can be looked up in constant time.
|
||||
|
||||
Closes #73935
|
||||
---
|
||||
.../lib/ExecutionEngine/JITLink/ELF_riscv.cpp | 68 ++++++++++---------
|
||||
1 file changed, 35 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
|
||||
index 2fcdfcf9c0669..0cf548ede9389 100644
|
||||
--- a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
|
||||
+++ b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
|
||||
@@ -133,38 +133,6 @@ const uint8_t
|
||||
namespace llvm {
|
||||
namespace jitlink {
|
||||
|
||||
-static Expected<const Edge &> getRISCVPCRelHi20(const Edge &E) {
|
||||
- using namespace riscv;
|
||||
- assert((E.getKind() == R_RISCV_PCREL_LO12_I ||
|
||||
- E.getKind() == R_RISCV_PCREL_LO12_S) &&
|
||||
- "Can only have high relocation for R_RISCV_PCREL_LO12_I or "
|
||||
- "R_RISCV_PCREL_LO12_S");
|
||||
-
|
||||
- const Symbol &Sym = E.getTarget();
|
||||
- const Block &B = Sym.getBlock();
|
||||
- orc::ExecutorAddrDiff Offset = Sym.getOffset();
|
||||
-
|
||||
- struct Comp {
|
||||
- bool operator()(const Edge &Lhs, orc::ExecutorAddrDiff Offset) {
|
||||
- return Lhs.getOffset() < Offset;
|
||||
- }
|
||||
- bool operator()(orc::ExecutorAddrDiff Offset, const Edge &Rhs) {
|
||||
- return Offset < Rhs.getOffset();
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- auto Bound =
|
||||
- std::equal_range(B.edges().begin(), B.edges().end(), Offset, Comp{});
|
||||
-
|
||||
- for (auto It = Bound.first; It != Bound.second; ++It) {
|
||||
- if (It->getKind() == R_RISCV_PCREL_HI20)
|
||||
- return *It;
|
||||
- }
|
||||
-
|
||||
- return make_error<JITLinkError>(
|
||||
- "No HI20 PCREL relocation type be found for LO12 PCREL relocation type");
|
||||
-}
|
||||
-
|
||||
static uint32_t extractBits(uint32_t Num, unsigned Low, unsigned Size) {
|
||||
return (Num & (((1ULL << Size) - 1) << Low)) >> Low;
|
||||
}
|
||||
@@ -184,9 +152,43 @@ class ELFJITLinker_riscv : public JITLinker<ELFJITLinker_riscv> {
|
||||
public:
|
||||
ELFJITLinker_riscv(std::unique_ptr<JITLinkContext> Ctx,
|
||||
std::unique_ptr<LinkGraph> G, PassConfiguration PassConfig)
|
||||
- : JITLinker(std::move(Ctx), std::move(G), std::move(PassConfig)) {}
|
||||
+ : JITLinker(std::move(Ctx), std::move(G), std::move(PassConfig)) {
|
||||
+ JITLinkerBase::getPassConfig().PostAllocationPasses.push_back(
|
||||
+ [this](LinkGraph &G) { return gatherRISCVPCRelHi20(G); });
|
||||
+ }
|
||||
|
||||
private:
|
||||
+ DenseMap<std::pair<const Block *, orc::ExecutorAddrDiff>, const Edge *>
|
||||
+ RelHi20;
|
||||
+
|
||||
+ Error gatherRISCVPCRelHi20(LinkGraph &G) {
|
||||
+ for (Block *B : G.blocks())
|
||||
+ for (Edge &E : B->edges())
|
||||
+ if (E.getKind() == R_RISCV_PCREL_HI20)
|
||||
+ RelHi20[{B, E.getOffset()}] = &E;
|
||||
+
|
||||
+ return Error::success();
|
||||
+ }
|
||||
+
|
||||
+ Expected<const Edge &> getRISCVPCRelHi20(const Edge &E) const {
|
||||
+ using namespace riscv;
|
||||
+ assert((E.getKind() == R_RISCV_PCREL_LO12_I ||
|
||||
+ E.getKind() == R_RISCV_PCREL_LO12_S) &&
|
||||
+ "Can only have high relocation for R_RISCV_PCREL_LO12_I or "
|
||||
+ "R_RISCV_PCREL_LO12_S");
|
||||
+
|
||||
+ const Symbol &Sym = E.getTarget();
|
||||
+ const Block &B = Sym.getBlock();
|
||||
+ orc::ExecutorAddrDiff Offset = Sym.getOffset();
|
||||
+
|
||||
+ auto It = RelHi20.find({&B, Offset});
|
||||
+ if (It != RelHi20.end())
|
||||
+ return *It->second;
|
||||
+
|
||||
+ return make_error<JITLinkError>("No HI20 PCREL relocation type be found "
|
||||
+ "for LO12 PCREL relocation type");
|
||||
+ }
|
||||
+
|
||||
Error applyFixup(LinkGraph &G, Block &B, const Edge &E) const {
|
||||
using namespace riscv;
|
||||
using namespace llvm::support;
|
|
@ -5,14 +5,14 @@ Subject: [PATCH 1/4] clang: add fortify include paths for musl triplets
|
|||
|
||||
When we have fortify headers this lets them get included.
|
||||
---
|
||||
lib/Driver/ToolChains/Linux.cpp | 12 ++++++++----
|
||||
clang/lib/Driver/ToolChains/Linux.cpp | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
|
||||
index 7fcdcf125..d5df4a240 100644
|
||||
--- a/lib/Driver/ToolChains/Linux.cpp
|
||||
+++ b/lib/Driver/ToolChains/Linux.cpp
|
||||
@@ -622,10 +622,14 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
||||
diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
|
||||
index 4300a2bdf..ea42426ff 100644
|
||||
--- a/clang/lib/Driver/ToolChains/Linux.cpp
|
||||
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
|
||||
@@ -663,10 +663,14 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
||||
if (getTriple().getOS() == llvm::Triple::RTEMS)
|
||||
return;
|
||||
|
||||
|
@ -31,6 +31,3 @@ index 7fcdcf125..d5df4a240 100644
|
|||
|
||||
addExternCSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/usr/include"));
|
||||
|
||||
--
|
||||
2.38.0
|
||||
|
|
@ -5,15 +5,15 @@ Subject: [PATCH 2/4] clang: enable fortify by default on optimizing musl
|
|||
targets
|
||||
|
||||
---
|
||||
lib/Frontend/InitPreprocessor.cpp | 5 +++++
|
||||
clang/lib/Frontend/InitPreprocessor.cpp | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp
|
||||
index 20bfbf144..9095c0f2f 100644
|
||||
--- a/lib/Frontend/InitPreprocessor.cpp
|
||||
+++ b/lib/Frontend/InitPreprocessor.cpp
|
||||
@@ -1288,6 +1288,11 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
|
||||
Builder.defineMacro("__GLIBCXX_BITSIZE_INT_N_0", "128");
|
||||
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
|
||||
index 1b91c86f9..6a43a0242 100644
|
||||
--- a/clang/lib/Frontend/InitPreprocessor.cpp
|
||||
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
|
||||
@@ -1361,6 +1361,11 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
|
||||
#undef TARGET_OS
|
||||
}
|
||||
|
||||
+ // Enable fortify by default on musl when optimizing, but not with asan
|
|
@ -9,10 +9,10 @@ Subject: [PATCH 3/4] clang: use --as-needed by default
|
|||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
index f203cae1d..9e181a79a 100644
|
||||
--- a/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -560,6 +560,13 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
index 3015a7291..a8f334975 100644
|
||||
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -539,6 +539,13 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
bool NeedsSanitizerDeps = addSanitizerRuntimes(ToolChain, Args, CmdArgs);
|
||||
bool NeedsXRayDeps = addXRayRuntime(ToolChain, Args, CmdArgs);
|
||||
addLinkerCompressDebugSectionsOption(ToolChain, Args, CmdArgs);
|
||||
|
@ -25,7 +25,7 @@ index f203cae1d..9e181a79a 100644
|
|||
+
|
||||
AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
|
||||
|
||||
addHIPRuntimeLibArgs(ToolChain, Args, CmdArgs);
|
||||
addHIPRuntimeLibArgs(ToolChain, C, Args, CmdArgs);
|
||||
--
|
||||
2.38.0
|
||||
|
16
main/llvm18/fix-macho-invalid-test.patch
Normal file
16
main/llvm18/fix-macho-invalid-test.patch
Normal file
|
@ -0,0 +1,16 @@
|
|||
Patch-Source: https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/73161#note_444390
|
||||
Upstream-Issue: https://github.com/llvm/llvm-project/issues/56746
|
||||
|
||||
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
|
||||
index 812b2c0..33f2575 100644
|
||||
--- a/llvm/lib/Object/MachOObjectFile.cpp
|
||||
+++ b/llvm/lib/Object/MachOObjectFile.cpp
|
||||
@@ -192,7 +192,7 @@ static Expected<MachOObjectFile::LoadCommandInfo>
|
||||
getLoadCommandInfo(const MachOObjectFile &Obj, const char *Ptr,
|
||||
uint32_t LoadCommandIndex) {
|
||||
if (auto CmdOrErr = getStructOrErr<MachO::load_command>(Obj, Ptr)) {
|
||||
- if (CmdOrErr->cmdsize + Ptr > Obj.getData().end())
|
||||
+ if (CmdOrErr->cmdsize > Obj.getData().end() - Ptr)
|
||||
return malformedError("load command " + Twine(LoadCommandIndex) +
|
||||
" extends past end of file");
|
||||
if (CmdOrErr->cmdsize < 8)
|
|
@ -11,7 +11,7 @@ also see: https://reviews.llvm.org/D29969
|
|||
this is supposedly fixed now, but for some reason it still isn't
|
||||
--- a/llvm/cmake/modules/CMakeLists.txt
|
||||
+++ b/llvm/cmake/modules/CMakeLists.txt
|
||||
@@ -41,6 +41,8 @@
|
||||
@@ -42,6 +42,8 @@ endif()
|
||||
#
|
||||
|
||||
set(LLVM_CONFIG_CODE "
|
||||
|
@ -20,12 +20,12 @@ this is supposedly fixed now, but for some reason it still isn't
|
|||
# LLVM_BUILD_* values available only from LLVM build tree.
|
||||
set(LLVM_BUILD_BINARY_DIR \"${LLVM_BINARY_DIR}\")
|
||||
set(LLVM_BUILD_LIBRARY_DIR \"${LLVM_LIBRARY_DIR}\")
|
||||
@@ -109,8 +111,6 @@
|
||||
#
|
||||
@@ -115,8 +117,6 @@ file(COPY .
|
||||
# Generate LLVMConfig.cmake for the install tree.
|
||||
#
|
||||
-
|
||||
-find_prefix_from_config(LLVM_CONFIG_CODE LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
|
||||
-find_prefix_from_config(LLVM_CONFIG_CODE LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PACKAGE_DIR}")
|
||||
-
|
||||
extend_path(LLVM_CONFIG_MAIN_INCLUDE_DIR "\${LLVM_INSTALL_PREFIX}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
# This is the same as the above because the handwritten and generated headers
|
||||
# are combined in one directory at install time.
|
||||
|
|
22
main/llvm18/skip-roundeven-tests.patch
Normal file
22
main/llvm18/skip-roundeven-tests.patch
Normal file
|
@ -0,0 +1,22 @@
|
|||
https://github.com/llvm/llvm-project/issues/47657
|
||||
|
||||
--- a/llvm/test/ExecutionEngine/Interpreter/intrinsics.ll
|
||||
+++ b/llvm/test/ExecutionEngine/Interpreter/intrinsics.ll
|
||||
@@ -13,8 +13,6 @@
|
||||
declare double @llvm.trunc.f64(double)
|
||||
declare float @llvm.round.f32(float)
|
||||
declare double @llvm.round.f64(double)
|
||||
-declare float @llvm.roundeven.f32(float)
|
||||
-declare double @llvm.roundeven.f64(double)
|
||||
declare float @llvm.copysign.f32(float, float)
|
||||
declare double @llvm.copysign.f64(double, double)
|
||||
|
||||
@@ -31,8 +29,6 @@
|
||||
%trunc64 = call double @llvm.trunc.f64(double 0.000000e+00)
|
||||
%round32 = call float @llvm.round.f32(float 0.000000e+00)
|
||||
%round64 = call double @llvm.round.f64(double 0.000000e+00)
|
||||
- %roundeven32 = call float @llvm.roundeven.f32(float 0.000000e+00)
|
||||
- %roundeven64 = call double @llvm.roundeven.f64(double 0.000000e+00)
|
||||
%copysign32 = call float @llvm.copysign.f32(float 0.000000e+00, float 0.000000e+00)
|
||||
%copysign64 = call double @llvm.copysign.f64(double 0.000000e+00, double 0.000000e+00)
|
||||
ret i32 0
|
Loading…
Add table
Add a link
Reference in a new issue