blob: 192585b20cab271dc420188adad31914b16e3180 (
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
|
# Maintainer: Chris Severance aur.severach aATt spamgourmet dott com
# Contributor: Florian Pritz <bluewind@xinu.at>
set -u
pkgname='lib32-libstdc++5'
pkgver='3.3.6'
pkgrel='9'
pkgdesc='Legacy GNU Standard C++ library version 3 (32 bit)'
arch=('x86_64')
url='http://gcc.gnu.org'
license=('GPL-2.0-or-later' 'LGPL-2.0-or-later')
depends=('lib32-gcc-libs' 'lib32-glibc')
makedepends=('gcc-multilib' 'binutils' 'bash')
options=('!buildflags')
source=(
"https://gcc.gnu.org/pub/gcc/releases/gcc-${pkgver}/gcc-"{core,g++}"-${pkgver}.tar.bz2"
'gcc-3.4.3-no_multilib_amd64.patch'
)
md5sums=('18c52e6fb8966b7700665dca289d077f'
'6b3d00b8d079805be1b895f7f6ce47a0'
'8504bb22dae9d49e8b6d70d7e6910f1b')
sha256sums=('4f9bee8ac57711508d6b8031d5ecfefc16fcf37ec81568b3f8344ef5f4cdfeb6'
'7ee9fdf2771084c4933bb0a31d2fd9bfe8df746f9f47d76562b7a9e302a29d92'
'dc2dc473071887ff6129c121950052398ed7c6fa1075ed839376030772068857')
prepare() {
set -u
cd "gcc-${pkgver}"
# fix lib64 lib32 paths. During testing these folders were found to be wrong
# but since the patch isn't needed being wrong isn't wrong.
#patch -Nup1 -i "${srcdir}/gcc-3.4.3-no_multilib_amd64.patch"
local _pt
for _pt in "${source[@]%%::*}"; do
_pt="${_pt##*/}"
if [[ "${_pt}" = *.patch ]]; then
set +u; msg2 "Patch ${_pt}"; set -u
patch -Nup1 -i "${srcdir}/${_pt}"
fi
done
#cd ..; cp -pr "gcc-${pkgver}" 'a'; ln -s "gcc-${pkgver}" 'b'; false
# diff -pNaru5 'a' 'b' > "0000-$RANDOM.patch"
# Patches are the wrong way to do this
sed -e '# gcc-3.4.6-ucontext.patch' \
-e 's:\bstruct ucontext\b:ucontext_t:g' \
-e '# siginfo.patch' \
-e 's:\bstruct siginfo\b:siginfo_t:g' \
-i $(grep --include 'linux*.h' -lrFe $'struct ucontext\nstruct siginfo' gcc/config/)
# fix build issue with recent gcc
sed -e "s#O_CREAT#O_CREAT, 0666#" -i 'gcc/collect2.c'
# No fixincludes
sed -e 's@\./fixinc\.sh@-c true@' \
-e '# Clean up some warnings that arent our business' \
-e 's:-Wstrict-prototypes::g' \
-e 's:-Wtraditional::g' \
-e 's:-pedantic::g' \
-e 's:-Wall::g' \
-i 'gcc/Makefile.in'
sed -e 's:-Wall -Wtraditional -pedantic::g' -i 'libiberty/configure'
# crtstuff.c as 32 bit including the hidden assembler code
sed -e 's:^FLAGS_FOR_TARGET = :&-m32 -march=i686 -Wa,--32 :g' -i Makefile.{tpl,in}
# Easiest way to convince the system it's running i686 without using configure --build --host
sed -e 's:^UNAME_MACHINE=.*$:UNAME_MACHINE=i386:g' -i 'config.guess'
set +u
}
build(){
set -u
#export CC="gcc -m32"
#export CPP="cpp -m32"
#export CXX="g++ -m32"
# These must be export for all the configure inside make
# Can't add any warning removal flags that xgcc doesn't support
export CFLAGS='-march=i686 -m32 -O2 -pipe'
export CPPFLAGS="${CFLAGS}"
export CXXFLAGS="${CFLAGS}"
export SHELL='/usr/bin/bash' # doesn't work with fish
mkdir -p 'gcc-build'
cd 'gcc-build'
if [ ! -s 'Makefile' ]; then
# https://www.linuxquestions.org/questions/slackware-14/explaining-build-host-target-509739/
# Fixed by UNAME_MACHINE above
local _copts=(
#--build='i686-pc-linux-gnu'
#--host='i686-pc-linux-gnu'
--enable-__cxa_atexit
--enable-languages='c++'
--enable-multilib
--enable-shared
--enable-threads='posix'
--libdir='/usr/lib32'
--prefix='/usr'
)
export CC='gcc -Wno-implicit-int -Wno-implicit-function-declaration -Wno-incompatible-pointer-types -Wno-int-conversion' # https://gcc.gnu.org/gcc-14/porting_to.html
../gcc-${pkgver}/configure "${_copts[@]}"
fi
# We build the full multilib libstdc++5 here, no idea how to restrict
# the build process to the 32 bit version only.
nice make 'all-target-libstdc++-v3' BOOT_CFLAGS="${CFLAGS}" STAGE1_CFLAGS='-O'
set +u
}
package() {
set -u
cd 'gcc-build'
make DESTDIR="${pkgdir}" 'install-target-libstdc++-v3'
# Only install the lib32 files
rm -rf "${pkgdir}/usr"/{include,share,lib}
rm -f "${pkgdir}/usr/lib32"/*.a
rm -f "${pkgdir}/usr/lib32/libstdc++.so"
set +u
}
set +u
|