| 3 |
3 |
|
| 4 |
4 |
EAPI=8
|
| 5 |
5 |
|
| 6 |
|
inherit cmake flag-o-matic toolchain-funcs
|
|
6 |
RUST_MIN_VER="1.95"
|
|
7 |
inherit cargo toolchain-funcs
|
| 7 |
8 |
|
| 8 |
9 |
DESCRIPTION="A Modern Linker"
|
| 9 |
10 |
HOMEPAGE="https://github.com/rui314/mold"
|
| ... | ... | |
| 14 |
15 |
SRC_URI="https://github.com/rui314/mold/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
|
| 15 |
16 |
# -alpha: alpha support was dropped upstream:
|
| 16 |
17 |
# https://github.com/rui314/mold/commit/3711ddb95e23c12991f6b8c7bfeba4f1421d19d4
|
| 17 |
|
KEYWORDS="-alpha amd64 ~arm ~arm64 ~loong ~ppc ~riscv ~sparc ~x86"
|
|
18 |
KEYWORDS="-alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~riscv ~sparc ~x86"
|
| 18 |
19 |
fi
|
| 19 |
20 |
|
| 20 |
21 |
# mold (MIT)
|
| ... | ... | |
| 22 |
23 |
# - siphash ( MIT CC0-1.0 )
|
| 23 |
24 |
LICENSE="MIT BSD-2 CC0-1.0"
|
| 24 |
25 |
SLOT="0"
|
| 25 |
|
IUSE="debug mimalloc test"
|
| 26 |
|
|
|
26 |
IUSE="test"
|
| 27 |
27 |
RESTRICT="!test? ( test )"
|
| 28 |
28 |
|
| 29 |
29 |
RDEPEND="
|
| 30 |
30 |
app-arch/zstd:=
|
| 31 |
|
>=dev-cpp/tbb-2021.7.0-r1:=
|
| 32 |
|
dev-libs/blake3:=
|
| 33 |
|
dev-libs/xxhash:=
|
| 34 |
31 |
virtual/zlib:=
|
| 35 |
|
mimalloc? ( >=dev-libs/mimalloc-3:= )
|
| 36 |
32 |
"
|
| 37 |
33 |
DEPEND="${RDEPEND}"
|
| 38 |
34 |
BDEPEND="
|
|
35 |
virtual/pkgconfig
|
| 39 |
36 |
test? ( llvm-core/clang:* )
|
| 40 |
37 |
"
|
| 41 |
38 |
|
| 42 |
|
pkg_pretend() {
|
| 43 |
|
# Requires a c++20 compiler, see #831473
|
| 44 |
|
if [[ ${MERGE_TYPE} != binary ]]; then
|
| 45 |
|
if tc-is-gcc && [[ $(gcc-major-version) -lt 10 ]]; then
|
| 46 |
|
die "${PN} needs at least gcc 10"
|
| 47 |
|
elif tc-is-clang && [[ $(clang-major-version) -lt 12 ]]; then
|
| 48 |
|
die "${PN} needs at least clang 12"
|
| 49 |
|
fi
|
|
39 |
src_unpack() {
|
|
40 |
if [[ ${PV} == 9999 ]] ; then
|
|
41 |
git-r3_src_unpack
|
|
42 |
cargo_live_src_unpack
|
|
43 |
else
|
|
44 |
cargo_src_unpack
|
| 50 |
45 |
fi
|
| 51 |
46 |
}
|
| 52 |
47 |
|
| 53 |
48 |
src_prepare() {
|
| 54 |
|
# remove unused vendored deps to be sure we don't use them
|
| 55 |
|
# do this before running cmake_src_prepare to avoid warnings
|
| 56 |
|
# being picked up by tinderbox etc. (#964723)
|
| 57 |
|
# we keep rust-demangle for now as this isn't packaged in gentoo
|
| 58 |
|
rm -rf third-party/{blake3,mimalloc,tbb,xxhash,zlib,zstd} || die
|
| 59 |
|
|
| 60 |
|
cmake_src_prepare
|
| 61 |
|
|
| 62 |
|
# use dev-libs/xxhash instead of vendored lib
|
| 63 |
|
sed -i 's#../third-party/xxhash/##' lib/lib.h || die
|
|
49 |
default
|
| 64 |
50 |
|
| 65 |
51 |
# Needs unpackaged dwarfdump
|
| 66 |
|
rm test/{{dead,compress}-debug-sections,compressed-debug-info}.sh || die
|
|
52 |
rm tests/{{dead,compress}-debug-sections,compressed-debug-info}.sh || die
|
| 67 |
53 |
|
| 68 |
54 |
# Heavy tests, need qemu
|
| 69 |
|
rm test/gdb-index-{compress-output,dwarf{2,3,4,5}}.sh || die
|
| 70 |
|
rm test/lto-{archive,dso,gcc,llvm,version-script}.sh || die
|
|
55 |
rm tests/gdb-index-{compress-output,dwarf{2,3,4,5}}.sh || die
|
|
56 |
rm tests/lto-{archive,dso,gcc,llvm,version-script}.sh || die
|
| 71 |
57 |
|
| 72 |
58 |
# Sandbox sadness
|
| 73 |
|
rm test/run.sh || die
|
|
59 |
rm tests/run.sh || die
|
| 74 |
60 |
sed -i 's|`pwd`/mold-wrapper.so|"& ${LD_PRELOAD}"|' \
|
| 75 |
|
test/mold-wrapper{,2}.sh || die
|
|
61 |
tests/mold-wrapper{,2}.sh || die
|
| 76 |
62 |
|
| 77 |
63 |
# Fails if binutils errors out on textrels by default
|
| 78 |
|
rm test/textrel.sh test/textrel2.sh || die
|
|
64 |
rm tests/textrel.sh tests/textrel2.sh || die
|
|
65 |
|
|
66 |
# Fails with -mno-direct-extern-access
|
|
67 |
rm tests/copyrel-{protected,alignment,norelro}.sh tests/nocopyreloc.sh || die
|
|
68 |
# TODO
|
|
69 |
rm tests/abs-reloc-promotion.sh tests/arch-x86_64-z-dynamic-undefined-weak.sh || die
|
|
70 |
rm tests/linker-script-group-as-needed.sh tests/gdb-index-dwarf64.sh || die
|
|
71 |
rm tests/mold-wrapper2.sh || die
|
| 79 |
72 |
|
| 80 |
73 |
# Don't let the default linker config affect the tests, bug #974439
|
| 81 |
|
sed -e 's:\(clang\|clang\+\+\):\1 --no-default-config:' -i test/*.sh || die
|
|
74 |
sed -e 's:\(clang\|clang\+\+\):\1 --no-default-config:' -i tests/*.sh || die
|
| 82 |
75 |
|
| 83 |
76 |
# static-pie tests require glibc built with static-pie support
|
| 84 |
77 |
if ! has_version -d 'sys-libs/glibc[static-pie(+)]'; then
|
| 85 |
|
rm test/{,ifunc-}static-pie.sh || die
|
|
78 |
rm tests/{,ifunc-}static-pie.sh || die
|
| 86 |
79 |
fi
|
| 87 |
80 |
}
|
| 88 |
81 |
|
| 89 |
82 |
src_configure() {
|
| 90 |
|
use debug || append-cppflags "-DNDEBUG"
|
|
83 |
export ZSTD_SYS_USE_PKG_CONFIG=1
|
| 91 |
84 |
|
| 92 |
|
local mycmakeargs=(
|
| 93 |
|
-DBUILD_TESTING=$(usex test)
|
| 94 |
|
-DMOLD_LTO=OFF # Should be up to the user to decide this with CXXFLAGS.
|
| 95 |
|
-DMOLD_USE_MIMALLOC=$(usex mimalloc)
|
| 96 |
|
-DMOLD_USE_SYSTEM_MIMALLOC=$(usex mimalloc)
|
| 97 |
|
-DMOLD_USE_SYSTEM_TBB=ON
|
|
85 |
local myfeatures=(
|
|
86 |
mold/system-allocator
|
| 98 |
87 |
)
|
| 99 |
88 |
|
| 100 |
|
if use test ; then
|
| 101 |
|
mycmakeargs+=(
|
| 102 |
|
-DMOLD_ENABLE_QEMU_TESTS=OFF
|
| 103 |
|
)
|
| 104 |
|
fi
|
| 105 |
|
|
| 106 |
|
cmake_src_configure
|
|
89 |
cargo_src_configure
|
| 107 |
90 |
}
|
| 108 |
91 |
|
| 109 |
92 |
src_test() {
|
| 110 |
93 |
export TEST_CC="$(tc-getCC)" TEST_GCC="$(tc-getCC)" \
|
| 111 |
94 |
TEST_CXX="$(tc-getCXX)" TEST_GXX="$(tc-getCXX)"
|
| 112 |
|
cmake_src_test
|
|
95 |
cargo_src_test
|
| 113 |
96 |
}
|
| 114 |
97 |
|
| 115 |
98 |
src_install() {
|
| 116 |
|
dobin "${BUILD_DIR}"/${PN}
|
| 117 |
|
|
| 118 |
|
# https://bugs.gentoo.org/872773
|
| 119 |
|
insinto /usr/$(get_libdir)/mold
|
| 120 |
|
doins "${BUILD_DIR}"/${PN}-wrapper.so
|
|
99 |
dobin "$(cargo_target_dir)"/${PN}
|
| 121 |
100 |
|
| 122 |
|
dodoc docs/{design,execstack}.md
|
| 123 |
|
doman docs/${PN}.1
|
|
101 |
doman docs/mold.1
|
|
102 |
dodoc docs/mold.md
|
| 124 |
103 |
|
| 125 |
104 |
dosym ${PN} /usr/bin/ld.${PN}
|
| 126 |
105 |
dosym ${PN} /usr/bin/ld64.${PN}
|