@@ -10,36 +10,56 @@ unset CFLAGS
1010
1111
1212DEPS=` pwd` /deps
13- TOOLS =` pwd` /out
13+ OUT_DIR =` pwd`
1414
1515source scripts/adjustEnvVars.sh || exit $?
1616
1717
18- mkdir -p $TOOLS / $ TARGET &&
19- ln -sfn . $TOOLS / $ TARGET /usr || exit 1
18+ mkdir -p $TARGET &&
19+ ln -sfn . $TARGET /usr || exit 1
2020
2121if [[ $BITS = 64 ]]; then
22- ln -sfn lib $TOOLS / $ TARGET /lib64 || exit 2
22+ ln -sfn lib $TARGET /lib64 || exit 2
2323fi
2424
2525
26+ # Clean object dir and return the input error
27+ function err(){
28+ rmStep $STEP_DIR
29+ exit $1
30+ }
31+
32+
33+ #
34+ # Define steps paths
35+ #
36+
37+ KERNEL_HEADERS=$OUT_DIR /$TARGET /include/linux
38+ OBJ_BINUTILS=$OBJECTS /binutils
39+ OBJ_GCC_STATIC=$OBJECTS /gcc_static
40+ OBJ_MUSL=$OBJECTS /musl
41+ OBJ_GCC_FINAL=$OBJECTS /gcc_final
42+
43+
2644#
2745# Linux kernel headers
2846#
2947
3048SRC_DIR=$DEPS /linux
31- OBJ_DIR= $TOOLS / $TARGET /include/linux
49+ STEP_DIR= $KERNEL_HEADERS
3250
33- if [[ ! -d $OBJ_DIR ]]; then
51+ if [[ ! -d $STEP_DIR ]]; then
3452 echo -e " ${WHT} Extracting Linux headers${CLR} "
3553
54+ rmStep $OBJ_BINUTILS
55+
3656 (
3757 cd $SRC_DIR
3858
3959 # Extract headers
40- $MAKE mrproper &&
41- $MAKE ARCH=$ARCH headers_check &&
42- $MAKE ARCH=$ARCH INSTALL_HDR_PATH=$TOOLS /$TARGET headers_install || exit 10
60+ $MAKE mrproper &&
61+ $MAKE ARCH=$ARCH headers_check &&
62+ $MAKE ARCH=$ARCH INSTALL_HDR_PATH=$OUT_DIR /$TARGET headers_install || exit 10
4363 ) || err $?
4464
4565 echo -e " ${GRN} Successfully extracted Linux headers${CLR} "
5171#
5272
5373SRC_DIR=$DEPS /binutils
54- OBJ_DIR= $OBJECTS /binutils
74+ STEP_DIR= $OBJ_BINUTILS
5575
56- if [[ ! -d $OBJ_DIR ]]; then
76+ if [[ ! -d $STEP_DIR ]]; then
5777 echo -e " ${WHT} Compiling binutils${CLR} "
5878
59- mkdir -p $OBJ_DIR || exit 20
79+ rmStep $OBJ_GCC_STATIC
6080
6181 (
62- cd $OBJ_DIR
82+ mkdir -p $STEP_DIR &&
83+ cd $STEP_DIR || exit 20
6384
6485 # Configure
65- $SRC_DIR /configure \
66- --silent \
67- --prefix=$TOOLS \
68- --target=$TARGET \
69- --with-sysroot=$TOOLS /$TARGET \
70- --disable-werror \
71- --disable-nls \
72- --disable-multilib || exit 21
86+ $SRC_DIR /configure \
87+ --silent \
88+ --prefix=$OUT_DIR \
89+ --target=$TARGET \
90+ --with-sysroot=$OUT_DIR /$TARGET \
91+ --disable-werror \
92+ --disable-nls \
93+ --disable-multilib || exit 21
7394
7495 # Compile
7596 $MAKE configure-host && $MAKE || exit 22
87108#
88109
89110SRC_DIR=$DEPS /gcc
90- OBJ_DIR= $OBJECTS /gcc
111+ STEP_DIR= $OBJ_GCC_STATIC
91112
92- if [[ ! -d $OBJ_DIR ]]; then
113+ if [[ ! -d $STEP_DIR ]]; then
93114 echo -e " ${WHT} Compiling GCC static${CLR} "
94115
95- mkdir -p $OBJ_DIR || exit 30
96-
97- # Remove old musl object files
98- rm -rf $OBJECTS /musl || exit 31
116+ rmStep $OBJ_MUSL
99117
100118 (
101- cd $OBJ_DIR
119+ mkdir -p $STEP_DIR &&
120+ cd $STEP_DIR || exit 30
102121
103122 # Configure
104123 $SRC_DIR /configure \
105124 --silent \
106- --prefix=$TOOLS \
125+ --prefix=$OUT_DIR \
107126 --build=$HOST \
108127 --host=$HOST \
109128 --target=$TARGET \
110- --with-sysroot=$TOOLS /$TARGET \
129+ --with-sysroot=$OUT_DIR /$TARGET \
111130 --disable-nls \
112131 --disable-shared \
113132 --disable-target-libsanitizer \
@@ -139,7 +158,7 @@ if [[ ! -d $OBJ_DIR ]]; then
139158
140159 # Remove object files to allow generation of final version
141160 # [ToDo] Check if we can be able to generate them on different folders
142- rm -rf $OBJ_DIR || exit 35
161+ # rm -rf $STEP_DIR || exit 35
143162
144163 echo -e " ${GRN} Successfully compiled GCC static${CLR} "
145164fi
150169#
151170
152171SRC_DIR=$DEPS /musl
153- OBJ_DIR= $OBJECTS /musl
172+ STEP_DIR= $OBJ_MUSL
154173
155- if [[ ! -d $OBJ_DIR ]]; then
174+ if [[ ! -d $STEP_DIR ]]; then
156175 echo -e " ${WHT} Compiling musl${CLR} "
157176
158- mkdir -p $OBJ_DIR || exit 40
177+ rmStep $OBJ_GCC_FINAL
159178
160179 (
161- # cd $OBJ_DIR
180+ PATH=` pwd` /bin:$PATH # Use the just generated cross-compiler ONLY for musl
181+
182+ mkdir -p $STEP_DIR || exit 40
183+ # cd $STEP_DIR
162184 cd $SRC_DIR && $MAKE clean # musl don't support out-of-tree builds yet
163185
164186 # Configure
@@ -173,7 +195,7 @@ if [[ ! -d $OBJ_DIR ]]; then
173195 CROSS_COMPILE=" $TARGET -" $MAKE || exit 42
174196
175197 # Install
176- DESTDIR=$TOOLS /$TARGET $MAKE install || exit 43
198+ DESTDIR=$OUT_DIR /$TARGET $MAKE install || exit 43
177199 ) || err $?
178200
179201 echo -e " ${GRN} Successfully compiled musl${CLR} "
185207#
186208
187209SRC_DIR=$DEPS /gcc
188- OBJ_DIR= $OBJECTS /gcc
210+ STEP_DIR= $OBJ_GCC_FINAL
189211
190- if [[ ! -d $OBJ_DIR ]]; then
212+ if [[ ! -d $STEP_DIR ]]; then
191213 echo -e " ${WHT} Compiling GCC final${CLR} "
192214
193- mkdir -p $OBJ_DIR || exit 50
194-
195215 (
196- cd $OBJ_DIR
216+ mkdir -p $STEP_DIR &&
217+ cd $STEP_DIR || exit 50
197218
198219 # Configure
199220 $SRC_DIR /configure \
200221 --silent \
201- --prefix=$TOOLS \
222+ --prefix=$OUT_DIR \
202223 --build=$HOST \
203224 --host=$HOST \
204225 --target=$TARGET \
205- --with-sysroot=$TOOLS /$TARGET \
226+ --with-sysroot=$OUT_DIR /$TARGET \
206227 --disable-nls \
207228 --disable-static \
208229 --enable-c99 \
@@ -230,4 +251,21 @@ if [[ ! -d $OBJ_DIR ]]; then
230251fi
231252
232253
233- rm -rf $TOOLS /include || exit 60
254+ #
255+ # Remove empty includes and generated docs
256+ #
257+
258+ rm -rf include &&
259+ rm -rf {,share}/{info,man,doc} || exit 60
260+
261+
262+ #
263+ # Strip libraries and binaries
264+ #
265+
266+ strip --strip-debug {,$TARGET /}lib/* & >> /dev/null
267+ strip --strip-unneeded {,$TARGET /}bin/* & >> /dev/null
268+
269+ strip --strip-unneeded libexec/gcc/$TARGET /* /* {,/* } & >> /dev/null
270+
271+ exit 0 # Ignore errors from `strip`
0 commit comments