blob: bd3825ddac3801daa3fe24bcf4332daa09abe676 (
about) (
plain)
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
|
# Contributor: Wojtek Kosior <kwojtus@protonmail.com>
# TODO Maybe enable more languages? And pack them separately?
_target=arm-linux-gnueabi
pkgname=${_target}-gcc
pkgver=6.3.0
pkgrel=1
pkgdesc="The GNU Compiler Collection - cross compiler for ARM GNU/Linux EABI target"
arch=('i686' 'x86_64')
license=('GPL-3' 'LGPL-3' 'custom:GCC-Exception-3.1' 'FDL-1.3')
url="https://gcc.gnu.org"
groups=('cross-devel')
depends=("${_target}-binutils>=2.28" "${_target}-glibc" 'libmpc')
makedepends=('gcc-ada' 'doxygen' "gcc-source=${pkgver}")
# Check()ing a cross-compiler would require using an emulator (qemu), I believe.
# For now - leave checkdepends commented-out
# checkdepends=('dejagnu' 'inetutils')
options=('!emptydirs' 'staticlibs' '!strip')
source=(COPYING.DOC)
sha512sums=('bea1788b2bdc84f470e459114b871cf4ee991718964a63e18adde65116806d7676484cb30857cf74dece5eef5f96a015ee4a21900e019623e5d3484868b28b7f')
prepare() {
cd "${srcdir}"
prepare-gcc-source .
# Do not run fixincludes
sed -i 's@\./fixinc\.sh@-c true@' gcc-${pkgver}/gcc/Makefile.in
# hack! - some configure tests for header files using "$CPP $CPPFLAGS"
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" gcc-${pkgver}/{libiberty,gcc}/configure
mkdir gcc_build
}
build() {
cd "${srcdir}/gcc_build"
# using -pipe causes spurious test-suite failures
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565
CFLAGS=${CFLAGS/-pipe/}
CXXFLAGS=${CXXFLAGS/-pipe/}
# libmpx seems to be some intel stuff - x86 only
"${srcdir}/gcc-${pkgver}/configure" \
--prefix=/usr \
--libdir=/usr/lib \
--libexecdir=/usr/libexec \
--with-local-prefix=/usr/${_target} \
--with-sysroot=/usr/${_target} \
--with-build-sysroot=/usr/${_target} \
--with-as=/usr/bin/${_target}-as \
--with-ld=/usr/bin/${_target}-ld \
--with-native-system-header-dir=/include \
--with-bugurl=https://issues.hyperbola.info/ \
--enable-languages=c,c++,lto \
--enable-shared \
--enable-threads=posix \
`[[ $_target =~ (i686)|(x86_64) ]] &&
echo --enable-libmpx` \
--with-system-zlib \
--with-isl \
--enable-__cxa_atexit \
--disable-libunwind-exceptions \
--enable-clocale=gnu \
--disable-libstdcxx-pch \
--disable-libssp \
--enable-gnu-unique-object \
--enable-linker-build-id \
--enable-lto \
--enable-plugin \
--enable-install-libiberty \
--with-linker-hash-style=gnu \
--enable-gnu-indirect-function \
--disable-multilib \
--disable-werror \
--enable-checking=release \
--disable-nls \
--target=${_target}
make
}
# maybe check() using qemu?
package() {
cd "${srcdir}/gcc_build"
make DESTDIR="${pkgdir}" install-gcc \
install-target-{libgcc,libstdc++-v3,libgomp,libquadmath}
# TODO I'm not sure about this stripping. Everybody seems to be doing it a different way...
# I commented out all 2>/dev/null to be able to see what's going on. Uncomment them once
# everything works as it should :)
# strip target binaries
find "${pkgdir}/usr/lib/gcc/${_target}/" "${pkgdir}/usr/${_target}/lib" \
-type f -and \( -name \*.a -or -name \*.o \) \
-exec ${_target}-strip $STRIP_STATIC '{}' + 2>/dev/null
find "${pkgdir}/usr/lib/gcc/${_target}/" "${pkgdir}/usr/${_target}/lib" \
-not -name 'libgcc_s.so' -name \*.so -type f \
-exec ${_target}-strip $STRIP_SHARED '{}' + 2>/dev/null
# strip host binaries
find "${pkgdir}/usr/bin/" "${pkgdir}/usr/lib/gcc/${_target}/" \
-type f -executable -exec strip $STRIP_BINARIES '{}' + 2>/dev/null
# many packages expect this symlink
ln -s "${_target}-gcc" "${pkgdir}/usr/bin/${_target}-cc"
# POSIX conformance launcher scripts for c89 and c99
cat > "${pkgdir}/usr/bin/${_target}-c89" <<"EOF"
#!/bin/sh
fl="-std=c89"
for opt; do
case "$opt" in
-ansi|-std=c89|-std=iso9899:1990) fl="";;
-std=*) echo "`basename $0` called with non ANSI/ISO C option $opt" >&2
exit 1;;
esac
done
exec gcc $fl ${1+"$@"}
EOF
sed -i "s|exec gcc|exec ${_target}-gcc|" "${pkgdir}/usr/bin/${_target}-c89"
cat > "${pkgdir}/usr/bin/${_target}-c99" <<"EOF"
#!/bin/sh
fl="-std=c99"
for opt; do
case "$opt" in
-std=c99|-std=iso9899:1999) fl="";;
-std=*) echo "`basename $0` called with non ISO C99 option $opt" >&2
exit 1;;
esac
done
exec gcc $fl ${1+"$@"}
EOF
sed -i "s|exec gcc|exec ${_target}-gcc|" "${pkgdir}/usr/bin/${_target}-c99"
chmod 755 "${pkgdir}/usr/bin/${_target}"-c{8,9}9
# Remove man documents that conflict with host version
rm -rf ${pkgdir}/usr/share/man/man7
# Remove unused dirs
rm -rf ${pkgdir}/usr/share/{info,gcc-${pkgver}}
# Add licenses
install -m755 -d "${pkgdir}/usr/share/licenses/${_target}-gcc"
install -m644 "${srcdir}/gcc-${pkgver}"/COPYING{3{,.LIB},.RUNTIME} "${srcdir}/COPYING.DOC" \
"${pkgdir}/usr/share/licenses/${_target}-gcc"
}
|