Line 0
Link Here
|
|
|
1 |
# Copyright 1999-2016 Gentoo Foundation |
2 |
# Distributed under the terms of the GNU General Public License v2 |
3 |
# $Id$ |
4 |
|
5 |
EAPI=5 |
6 |
|
7 |
PYTHON_COMPAT=( python2_7 ) |
8 |
inherit eutils check-reqs flag-o-matic multilib pax-utils prefix \ |
9 |
python-any-r1 toolchain-funcs |
10 |
|
11 |
DESCRIPTION="Low Level Virtual Machine" |
12 |
HOMEPAGE="http://llvm.org/" |
13 |
SRC_URI="http://llvm.org/releases/${PV}/${P}.src.tar.gz |
14 |
clang? ( http://llvm.org/releases/${PV}/compiler-rt-3.4.src.tar.gz |
15 |
http://llvm.org/releases/${PV}/cfe-${PV}.src.tar.gz ) |
16 |
https://dev.gentoo.org/~mgorny/dist/${PN}-3.4-manpages.tar.bz2" |
17 |
|
18 |
LICENSE="UoI-NCSA" |
19 |
SLOT="0/3.4" |
20 |
KEYWORDS="~ppc-macos ~x64-macos ~x86-macos" |
21 |
IUSE="clang +libffi kernel_Darwin" |
22 |
|
23 |
COMMON_DEPEND=" |
24 |
sys-libs/zlib:0= |
25 |
libffi? ( >=virtual/libffi-3.0.13-r1:0= )" |
26 |
DEPEND="${COMMON_DEPEND} |
27 |
dev-lang/perl |
28 |
>=sys-devel/make-3.81 |
29 |
>=sys-devel/flex-2.5.4 |
30 |
>=sys-devel/bison-1.875d |
31 |
|| ( >=sys-devel/gcc-3.0 >=sys-devel/gcc-apple-4.2.1 >=sys-devel/llvm-3.3 |
32 |
( >=sys-freebsd/freebsd-lib-9.1-r10 sys-libs/libcxx ) |
33 |
) |
34 |
|| ( >=sys-devel/binutils-2.18 >=sys-devel/binutils-apple-5.1 ) |
35 |
libffi? ( virtual/pkgconfig ) |
36 |
${PYTHON_DEPS}" |
37 |
RDEPEND="${COMMON_DEPEND} |
38 |
clang? ( !<=sys-devel/clang-${PV}-r99 |
39 |
!>=sys-devel/clang-9999 )" |
40 |
PDEPEND="clang? ( =sys-devel/clang-${PV}-r100 )" |
41 |
|
42 |
S=${WORKDIR}/${P}.src |
43 |
|
44 |
pkg_pretend() { |
45 |
# in megs |
46 |
# !clang !debug !multitarget -O2 400 |
47 |
# !clang !debug multitarget -O2 550 |
48 |
# clang !debug !multitarget -O2 950 |
49 |
# clang !debug multitarget -O2 1200 |
50 |
# !clang debug multitarget -O2 5G |
51 |
# clang !debug multitarget -O0 -g 12G |
52 |
# clang debug multitarget -O2 16G |
53 |
# clang debug multitarget -O0 -g 14G |
54 |
|
55 |
local build_size=550 |
56 |
use clang && build_size=1200 |
57 |
|
58 |
if is-flagq '-g?(gdb)?([1-9])'; then |
59 |
ewarn "The C++ compiler -g option is known to increase the size of the package" |
60 |
ewarn "considerably. If you run out of space, please consider removing it." |
61 |
ewarn |
62 |
|
63 |
(( build_size *= 10 )) |
64 |
fi |
65 |
|
66 |
local CHECKREQS_DISK_BUILD=${build_size}M |
67 |
check-reqs_pkg_pretend |
68 |
} |
69 |
|
70 |
pkg_setup() { |
71 |
pkg_pretend |
72 |
} |
73 |
|
74 |
src_unpack() { |
75 |
default |
76 |
|
77 |
rm -f "${S}"/tools/clang "${S}"/projects/compiler-rt \ |
78 |
|| die "symlinks removal failed" |
79 |
|
80 |
if use clang; then |
81 |
mv "${WORKDIR}"/cfe-${PV}.src "${S}"/tools/clang \ |
82 |
|| die "clang source directory move failed" |
83 |
mv "${WORKDIR}"/compiler-rt-3.4 "${S}"/projects/compiler-rt \ |
84 |
|| die "compiler-rt source directory move failed" |
85 |
fi |
86 |
} |
87 |
|
88 |
src_prepare() { |
89 |
epatch "${FILESDIR}"/${PN}-3.2-nodoctargz.patch |
90 |
epatch "${FILESDIR}"/${PN}-3.4-gentoo-install.patch |
91 |
|
92 |
if use clang; then |
93 |
# Automatically select active system GCC's libraries, bugs #406163 and #417913 |
94 |
epatch "${FILESDIR}"/clang-3.1-gentoo-runtime-gcc-detection-v3.patch |
95 |
|
96 |
epatch "${FILESDIR}"/clang-3.4-gentoo-install.patch |
97 |
epatch "${FILESDIR}"/clang-3.4-darwin_build_fix.patch |
98 |
epatch "${FILESDIR}"/clang-3.4-darwin_prefix-include-paths.patch |
99 |
eprefixify tools/clang/lib/Frontend/InitHeaderSearch.cpp |
100 |
fi |
101 |
|
102 |
if use prefix && use clang; then |
103 |
sed -i -e "/^CFLAGS /s@-Werror@-I${EPREFIX}/usr/include@" \ |
104 |
projects/compiler-rt/make/platform/clang_*.mk || die |
105 |
fi |
106 |
|
107 |
local sub_files=( |
108 |
Makefile.config.in |
109 |
Makefile.rules |
110 |
tools/llvm-config/llvm-config.cpp |
111 |
) |
112 |
use clang && sub_files+=( |
113 |
tools/clang/lib/Driver/Tools.cpp |
114 |
tools/clang/tools/scan-build/scan-build |
115 |
) |
116 |
|
117 |
# unfortunately ./configure won't listen to --mandir and the-like, so take |
118 |
# care of this. |
119 |
# note: we're setting the main libdir intentionally. |
120 |
# where per-ABI is appropriate, we use $(GENTOO_LIBDIR) make. |
121 |
einfo "Fixing install dirs" |
122 |
sed -e "s,@libdir@,$(get_libdir),g" \ |
123 |
-e "s,@PF@,${PF},g" \ |
124 |
-e "s,@EPREFIX@,${EPREFIX},g" \ |
125 |
-i "${sub_files[@]}" \ |
126 |
|| die "install paths sed failed" |
127 |
|
128 |
if use clang; then |
129 |
# constantly fails for a long time, likely due to our patches |
130 |
rm tools/clang/test/Driver/cross-linux.c || die |
131 |
fi |
132 |
|
133 |
# User patches |
134 |
epatch_user |
135 |
|
136 |
python_setup |
137 |
} |
138 |
|
139 |
multilib_src_configure() { |
140 |
# disable timestamps since they confuse ccache |
141 |
local conf_flags=( |
142 |
--disable-timestamps |
143 |
--enable-keep-symbols |
144 |
--enable-shared |
145 |
--with-optimize-option= |
146 |
--enableoptimized |
147 |
--disable-assertions |
148 |
--disable-expensive-checks |
149 |
--disable-terminfo |
150 |
$(use_enable libffi) |
151 |
|
152 |
--enable-bindings=none |
153 |
--enable-targets=host |
154 |
|
155 |
ac_cv_prog_XML2CONFIG="" |
156 |
) |
157 |
|
158 |
if use clang; then |
159 |
conf_flags+=( |
160 |
--with-clang-resource-dir=../lib/clang/${PV} |
161 |
) |
162 |
fi |
163 |
|
164 |
if use libffi; then |
165 |
local CPPFLAGS=${CPPFLAGS} |
166 |
append-cppflags "$(pkg-config --cflags libffi)" |
167 |
fi |
168 |
|
169 |
# llvm prefers clang over gcc, so we may need to force that |
170 |
tc-export CC CXX |
171 |
|
172 |
ECONF_SOURCE=${S} \ |
173 |
econf "${conf_flags[@]}" |
174 |
} |
175 |
|
176 |
src_compile() { |
177 |
LLVM_MAKEARGS=( |
178 |
VERBOSE=1 |
179 |
REQUIRES_RTTI=1 |
180 |
GENTOO_LIBDIR=$(get_libdir) |
181 |
) |
182 |
|
183 |
emake "${LLVM_MAKEARGS[@]}" |
184 |
|
185 |
pax-mark m Release/bin/llvm-rtdyld |
186 |
pax-mark m Release/bin/lli |
187 |
pax-mark m Release/bin/lli-child-target |
188 |
} |
189 |
|
190 |
src_install() { |
191 |
emake "${LLVM_MAKEARGS[@]}" DESTDIR="${D}" install |
192 |
|
193 |
if ! use clang; then |
194 |
rm "${WORKDIR}"/${PN}-3.4-manpages/clang.1 || die |
195 |
fi |
196 |
doman "${WORKDIR}"/${PN}-3.4-manpages/*.1 |
197 |
|
198 |
# Fix install_names on Darwin. The build system is too complicated |
199 |
# to just fix this, so we correct it post-install |
200 |
local lib= f= odylib= ndylib= libpv=${PV} |
201 |
if [[ ${CHOST} == *-darwin* ]] ; then |
202 |
eval $(grep PACKAGE_VERSION= configure) |
203 |
[[ -n ${PACKAGE_VERSION} ]] && libpv=${PACKAGE_VERSION} |
204 |
libpvminor=${libpv%.[0-9]*} |
205 |
for lib in lib{EnhancedDisassembly,LLVM-${libpv},LTO,profile_rt,clang}.dylib LLVMHello.dylib clang/${libpv}/lib/darwin/libclang_rt.asan_{osx,iossim}_dynamic.dylib; do |
206 |
# libEnhancedDisassembly is Darwin10 only, so non-fatal |
207 |
# + omit clang libs if not enabled |
208 |
[[ -f ${ED}/usr/lib/${lib} ]] || continue |
209 |
|
210 |
ebegin "fixing install_name of $lib" |
211 |
install_name_tool \ |
212 |
-id "${EPREFIX}"/usr/lib/${lib} \ |
213 |
"${ED}"/usr/lib/${lib} |
214 |
eend $? |
215 |
done |
216 |
for f in "${ED}"/usr/bin/* "${ED}"/usr/lib/lib*.dylib "${ED}"/usr/lib/clang/${libpv}/lib/darwin/*.dylib ; do |
217 |
# omit clang libs if not enabled |
218 |
[[ -f "${f}" ]] || continue |
219 |
|
220 |
scanmacho -BF'%n#f' "${f}" | tr ',' '\n' | \ |
221 |
while read odylib ; do |
222 |
ndylib= |
223 |
case ${odylib} in |
224 |
*/libclang.dylib) |
225 |
ndylib="${EPREFIX}"/usr/lib/libclang.dylib |
226 |
;; |
227 |
*/libLLVM-${libpv}.dylib) |
228 |
ndylib="${EPREFIX}"/usr/lib/libLLVM-${libpv}.dylib |
229 |
;; |
230 |
*/libLLVM-${libpvminor}.dylib) |
231 |
ndylib="${EPREFIX}"/usr/lib/libLLVM-${libpvminor}.dylib |
232 |
;; |
233 |
*/libLTO.dylib) |
234 |
ndylib="${EPREFIX}"/usr/lib/libLTO.dylib |
235 |
;; |
236 |
esac |
237 |
if [[ -n ${ndylib} ]] ; then |
238 |
ebegin "fixing install_name reference to ${odylib} of ${f##*/}" |
239 |
install_name_tool \ |
240 |
-change "${odylib}" "${ndylib}" \ |
241 |
"${f}" |
242 |
eend $? |
243 |
fi |
244 |
done |
245 |
done |
246 |
fi |
247 |
} |