blob: ee1df94c3bd0ef99e298c01cc8cc0851f8ed98f7 (
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
156
157
158
|
#!/usr/bin/env bash
set -ex
X_ROOT=/tmp/mingw
X_DOWNLOADS=$X_ROOT/downloads
X_BUILD=$X_ROOT/build
X_DEST=$X_ROOT/dest
X_CROSS=$X_ROOT/cross
# Use all processors and collect output nicely
X_MAKE_OPTS="-j$(nproc) -O"
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
# A helper function to setup common directory structure for each package.
#
# Source archives are downloaded to $X_DOWNLOADS. The archives are extracted
# to $X_BUILD/PKG_NAME so that sources are usually available at
# $X_BUILD/PKG_NAME/PKG_NAME-PKG_VERSION. A build directory is created at
# $X_BUILD/PKG_NAME/bld.
function prepare {
local PKG_NAME=$1
local PKG_VERSION=$2
local PKG_SOURCE=$3
local PKG_FILENAME=$4
rm -rf $X_BUILD/$PKG_NAME
mkdir -pv $X_DOWNLOADS $X_BUILD/$PKG_NAME
cd $X_DOWNLOADS
if [ ! -f $PKG_FILENAME ]; then
wget $PKG_SOURCE
fi
cd $X_BUILD/$PKG_NAME
tar xf $X_DOWNLOADS/$PKG_FILENAME
mkdir bld
}
### BUILD THE CROSS COMPILER
prepare binutils 2.36.1 https://ftpmirror.gnu.org/binutils/binutils-2.36.1.tar.xz binutils-2.36.1.tar.xz
cd bld
../binutils-2.36.1/configure --target=x86_64-w64-mingw32 --prefix=$X_CROSS --with-sysroot=$X_CROSS \
--disable-multilib --disable-nls --disable-shared
make $X_MAKE_OPTS all "CFLAGS=-O3" "LDFLAGS=-s"
make $X_MAKE_OPTS install
export PATH=$PATH:$X_CROSS/bin
prepare mingw-w64 9.0.0 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v9.0.0.tar.bz2 mingw-w64-v9.0.0.tar.bz2
cd bld
# We need to install headers first, so use --without-crt here.
../mingw-w64-v9.0.0/configure --host=x86_64-w64-mingw32 --prefix=$X_CROSS/x86_64-w64-mingw32 \
--with-sysroot=$X_CROSS/x86_64-w64-mingw32 --disable-lib32 --enable-wildcard --disable-shared --without-crt
cd mingw-w64-headers
make $X_MAKE_OPTS install
[ -e $X_CROSS/mingw ] || ln -sv $X_CROSS/x86_64-w64-mingw32 $X_CROSS/mingw
mkdir -pv $X_CROSS/x86_64-w64-mingw32/lib
[ -e $X_CROSS/x86_64-w64-mingw32/lib64 ] || ln -sv $X_CROSS/x86_64-w64-mingw32/lib $X_CROSS/x86_64-w64-mingw32/lib64
prepare gcc 11.2.0 https://ftpmirror.gnu.org/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz gcc-11.2.0.tar.xz
(cd gcc-11.2.0 && ./contrib/download_prerequisites --directory=$X_DOWNLOADS)
cd bld
../gcc-11.2.0/configure --enable-languages=c,c++ --target=x86_64-w64-mingw32 --disable-multilib \
--prefix=$X_CROSS --with-sysroot=$X_CROSS --disable-libstdcxx-pch --disable-libstdcxx-verbose \
--disable-nls --disable-shared --disable-win32-registry --enable-threads=posix --enable-libgomp
make $X_MAKE_OPTS all-gcc
make $X_MAKE_OPTS install-gcc
# Now we can build the rest of mingw-w64 (crt + winpthreads).
cd $X_BUILD/mingw-w64/bld
../mingw-w64-v9.0.0/configure --host=x86_64-w64-mingw32 --prefix=$X_CROSS/x86_64-w64-mingw32 \
--with-sysroot=$X_CROSS/x86_64-w64-mingw32 --disable-lib32 --enable-wildcard \
--disable-shared --with-libraries=winpthreads
make $X_MAKE_OPTS "CFLAGS=-s -O3"
make $X_MAKE_OPTS install
cd $X_BUILD/gcc/bld
make $X_MAKE_OPTS "CFLAGS=-g0 -O3" "CXXFLAGS=-g0 -O3" \
"CFLAGS_FOR_TARGET=-g0 -O3" "CXXFLAGS_FOR_TARGET=-g0 -O3" \
"BOOT_CFLAGS=-g0 -O3" "BOOT_CXXFLAGS=-g0 -O3"
make $X_MAKE_OPTS install
# These symlinks are not needed anymore.
rm $X_CROSS/mingw
rm $X_CROSS/x86_64-w64-mingw32/lib64
# ### BUILD THE NATIVE COMPILER
prepare binutils 2.36.1 https://ftpmirror.gnu.org/binutils/binutils-2.36.1.tar.xz binutils-2.36.1.tar.xz
cd bld
../binutils-2.36.1/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=$X_DEST \
--with-sysroot=$X_DEST --disable-multilib --disable-nls --disable-shared
make $X_MAKE_OPTS all "CFLAGS=-O3" "LDFLAGS=-s"
make $X_MAKE_OPTS install
prepare gcc 11.2.0 https://ftpmirror.gnu.org/gcc/gcc-11.2.0/gcc-11.2.0.tar.xz gcc-11.2.0.tar.xz
(
cd gcc-11.2.0
./contrib/download_prerequisites --directory=$X_DOWNLOADS
mkdir -p winsup/mingw
cd winsup/mingw
# Note that this needs to point to the cross compilers include directory
[ -e include ] || ln -s $X_CROSS/x86_64-w64-mingw32/include include
)
prepare mingw-w64 9.0.0 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v9.0.0.tar.bz2 mingw-w64-v9.0.0.tar.bz2
cd bld
../mingw-w64-v9.0.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 \
--prefix=$X_DEST/x86_64-w64-mingw32 --with-sysroot=$X_DEST/x86_64-w64-mingw32 \
--disable-lib32 --enable-wildcard --disable-shared --without-crt
cd mingw-w64-headers
make $X_MAKE_OPTS
make $X_MAKE_OPTS install
[ -e $X_DEST/mingw ] || ln -s $X_DEST/x86_64-w64-mingw32 $X_DEST/mingw
[ -e $X_DEST/x86_64-w64-mingw32/lib64 ] || ln -s $X_DEST/x86_64-w64-mingw32/lib $X_DEST/x86_64-w64-mingw32/lib64
cd $X_BUILD/gcc/bld
../gcc-11.2.0/configure --enable-languages=c,c++ --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 \
--disable-multilib --prefix=$X_DEST --with-sysroot=$X_DEST --disable-libstdcxx-pch \
--disable-libstdcxx-verbose --disable-nls --disable-shared --disable-win32-registry \
--enable-threads=posix --enable-libgomp
make $X_MAKE_OPTS all-gcc
make $X_MAKE_OPTS install-gcc
cd $X_BUILD/mingw-w64/bld
../mingw-w64-v9.0.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 \
--prefix=$X_DEST/x86_64-w64-mingw32 --with-sysroot=$X_DEST/x86_64-w64-mingw32 \
--disable-lib32 --enable-wildcard --disable-shared --with-libraries=winpthreads \
--with-tools=all
make $X_MAKE_OPTS "CFLAGS=-s -O3"
make $X_MAKE_OPTS install
cd $X_BUILD/gcc/bld
make $X_MAKE_OPTS clean
make $X_MAKE_OPTS "CFLAGS=-g0 -O3" "CXXFLAGS=-g0 -O3" "CFLAGS_FOR_TARGET=-g0 -O3" "CXXFLAGS_FOR_TARGET=-g0 -O3" "BOOT_CFLAGS=-g0 -O3" "BOOT_CXXFLAGS=-g0 -O3"
make $X_MAKE_OPTS install
# These symlinks are not needed anymore.
rm -v $X_DEST/mingw
rm -v $X_DEST/x86_64-w64-mingw32/lib64
# https://github.com/msys2/MINGW-packages/issues/7890
# https://github.com/msys2/MINGW-packages/pull/8248
rm -v $X_DEST/lib/bfd-plugins/libdep.a
### BUILD EXTRA STUFF
prepare gdb 10.2 https://ftpmirror.gnu.org/gnu/gdb/gdb-10.2.tar.xz gdb-10.2.tar.xz
# Hack around undefined reference to BCryptGenRandom by defining HAVE_LIB_BCRYPT to 0.
cp -v $SCRIPT_DIR/gdb-gnulib-import-m4-getrandom.m4 gdb-10.2/gnulib/import/m4/getrandom.m4
(cd gdb-10.2/gnulib && autoreconf --force --install --verbose)
cd bld
../gdb-10.2/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=$X_DEST --disable-nls
make $X_MAKE_OPTS "CFLAGS=-O3" "CXXFLAGS=-O3" "LDFLAGS=-s"
make $X_MAKE_OPTS install
cd $X_DEST
7zr a $X_ROOT/mingw.7z .
|