-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
template
161 lines (144 loc) · 5.02 KB
/
template
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# Template file for 'llvm12'
pkgname=llvm12
version=12.0.1
revision=4
build_wrksrc=llvm
build_style=cmake
configure_args="
-DCMAKE_BUILD_TYPE=Release -Wno-dev
-DENABLE_LINKER_BUILD_ID=YES
-DLLDB_USE_SYSTEM_SIX=YES
-DLIBCXX_CXX_ABI=libcxxabi
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=YES
-DLIBCXXABI_USE_LLVM_UNWINDER=YES
-DLIBCXXABI_ENABLE_STATIC_UNWINDER=YES
-DLIBOMP_ENABLE_SHARED=YES
-DLIBOMP_INSTALL_ALIASES=NO
-DLLVM_INCLUDE_DOCS=YES
-DLLVM_BUILD_DOCS=YES
-DLLVM_ENABLE_SPHINX=YES
-DSPHINX_WARNINGS_AS_ERRORS=NO
-DLLVM_INSTALL_UTILS=YES
-DLLVM_BUILD_LLVM_DYLIB=YES
-DLLVM_LINK_LLVM_DYLIB=YES
-DLLVM_ENABLE_RTTI=YES
-DLLVM_ENABLE_FFI=YES
-DLLVM_BINUTILS_INCDIR=/usr/include"
hostmakedepends="perl python3 zlib-devel libffi-devel swig python3-Sphinx
python3-recommonmark python3-sphinx-automodapi"
makedepends="python3-devel zlib-devel elfutils-devel libffi-devel libedit-devel
libxml2-devel binutils-devel"
depends="libllvm12>=${version}_${revision}"
short_desc="Low Level Virtual Machine"
maintainer="Orphaned <orphan@voidlinux.org>"
license="Apache-2.0"
homepage="https://www.llvm.org"
distfiles="https://github.com/llvm/llvm-project/releases/download/llvmorg-${version}/llvm-project-${version}.src.tar.xz"
checksum=129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e
lib32disabled=yes
python_version=3
if [ "$XBPS_TARGET_LIBC" = "musl" ]; then
configure_args+=" -DLIBCXX_HAS_MUSL_LIBC=YES"
makedepends+=" libexecinfo-devel"
depends+=" libexecinfo-devel"
fi
# "operand out of range" assembler failures
case "$XBPS_TARGET_MACHINE" in
ppc64*) ;;
ppc*) configure_args+=" -DCLANG_ENABLE_CLANGD=OFF" ;;
esac
post_patch() {
# update config.guess for better platform detection
cp $XBPS_COMMONDIR/environment/configure/automake/config.guess \
${wrksrc}/llvm/cmake
# fix linker failures on some archs
vsed -i 's,check_library_exists(gcc_s .*,set(LIBCXXABI_HAS_GCC_S_LIB ON),' \
${wrksrc}/libcxxabi/cmake/config-ix.cmake
vsed -i 's,check_library_exists(gcc .*,set(LIBCXXABI_HAS_GCC_LIB ON),' \
${wrksrc}/libcxxabi/cmake/config-ix.cmake
# need libssp_nonshared on some musl platforms (because of nodefaultlibs)
case "$XBPS_TARGET_MACHINE" in
ppc64*) ;;
ppc*-musl|i686-musl|mips*-musl)
vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
${wrksrc}/libunwind/src/CMakeLists.txt
vsed -i 's,^# Setup flags.$,add_library_flags(ssp_nonshared),' \
${wrksrc}/libcxxabi/src/CMakeLists.txt
vsed -i 's,#ssp,,' ${wrksrc}/libcxx/CMakeLists.txt
;;
esac
case "$XBPS_TARGET_MACHINE" in
x86_64-musl) # some sanitizer currently only on x86_64 stuff needs backtrace
vsed -i 's,# Set common link flags.,list(APPEND SANITIZER_COMMON_LINK_LIBS execinfo),' \
${wrksrc}/compiler-rt/CMakeLists.txt
;;
arm*-musl|i686-musl) # sanitizer code is broken since it duplicates some libc bits
vsed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' \
${wrksrc}/compiler-rt/cmake/config-ix.cmake
;;
esac
}
pre_configure() {
local triplet
# Vastly reduce size of debugging symbols:
CFLAGS=${CFLAGS/ -g/ -g1}
CXXFLAGS=${CXXFLAGS/ -g/ -g1}
# since gcc9, the build likes to blow up for ppc32 apparently because
# of clang being too large for a 24-bit relative call to the PLT, so
# optimize for size instead
case "$XBPS_TARGET_MACHINE" in
ppc64*) ;;
mips*-musl|ppc*) configure_args+=" -DVOID_CXX_OPT_FLAGS=-Os" ;;
esac
if [ "$CROSS_BUILD" ]; then
msg_normal "Building host tblgen\n"
mkdir -p build/HOST
cd build/HOST
CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
cmake ../.. -DCMAKE_BUILD_TYPE=Release
make ${makejobs} -C utils/TableGen
make ${makejobs} -C tools/clang/utils/TableGen
[ "$_lldb_enable" = "yes" ] && make ${makejobs} -C tools/lldb/utils/TableGen
configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/llvm-tblgen"
configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/llvm/build/HOST/bin/clang-tblgen"
cd ../..
fi
case "$XBPS_TARGET_MACHINE" in
i686*) _arch="X86";;
x86_64*) _arch="X86";;
armv5*) _arch="Armv5te";;
armv6*) _arch="Armv6";;
armv7*) _arch="Armv7";;
aarch64*) _arch="AArch64";;
mips*) _arch="Mips";;
ppc*) _arch="PowerPC";;
riscv64*) _arch="RISCV64";;
esac
triplet=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}
configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
configure_args+=" -DLLVM_HOST_TRIPLE=${triplet}"
configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${triplet}"
}
do_install() {
cd build
cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
# Required for multilib.
if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
for _header in llvm-config; do
mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
usr/include/llvm/Config ${_header}.h
done
fi
# Remove llvm-config-host in cross builds.
if [ "$CROSS_BUILD" ]; then
rm -f ${DESTDIR}/usr/bin/llvm-config-host
fi
}
libllvm12_package() {
short_desc+=" - runtime library"
pkg_install() {
vmove "usr/lib/libLLVM-*.so*"
}
}