Skip to content

Commit e09ce87

Browse files
committed
Support 8.3.0
1 parent 763dbbc commit e09ce87

File tree

1 file changed

+399
-0
lines changed

1 file changed

+399
-0
lines changed

script/8.3.0

+399
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,399 @@
1+
#!/usr/bin/env bash
2+
3+
unset CDPATH
4+
5+
# target directory
6+
DJGPP_PREFIX=${DJGPP_PREFIX-/usr/local/djgpp}
7+
8+
# enabled languages
9+
#ENABLE_LANGUAGES=${ENABLE_LANGUAGES-c,c++,f95,objc,obj-c++}
10+
ENABLE_LANGUAGES=${ENABLE_LANGUAGES-c,c++}
11+
12+
#DJGPP_DOWNLOAD_BASE="ftp://ftp.delorie.com/pub"
13+
#DJGPP_DOWNLOAD_BASE="http://www.delorie.com/pub"
14+
DJGPP_DOWNLOAD_BASE="http://www.mirrorservice.org/sites/ftp.delorie.com/pub"
15+
16+
#FTPMIRROR_GNU_DOWNLOAD_BASE="http://ftpmirror.gnu.org"
17+
FTPMIRROR_GNU_DOWNLOAD_BASE="http://www.mirrorservice.org/sites/ftp.gnu.org/gnu"
18+
19+
#FTP_GNU_DOWNLOAD_BASE="http://ftp.gnu.org/gnu"
20+
FTP_GNU_DOWNLOAD_BASE="http://www.mirrorservice.org/sites/ftp.gnu.org/gnu"
21+
22+
# source tarball versions
23+
BINUTILS_VERSION=230
24+
DJCRX_VERSION=205
25+
DJLSR_VERSION=205
26+
DJDEV_VERSION=205
27+
28+
GCC_VERSION=8.3.0
29+
GCC_VERSION_SHORT=8.30
30+
GMP_VERSION=6.1.2
31+
MPFR_VERSION=4.0.2
32+
MPC_VERSION=1.1.0
33+
AUTOCONF_VERSION=2.64
34+
AUTOMAKE_VERSION=1.11.6
35+
36+
CC=gcc
37+
CXX=g++
38+
39+
# use gmake under FreeBSD
40+
if [ `uname` = "FreeBSD" ]; then
41+
MAKE=gmake
42+
CC=clang
43+
CXX=clang++
44+
else
45+
MAKE=make
46+
fi
47+
#CFLAGS="-O2 -g $CFLAGS -std=gnu11"
48+
49+
export CC CXX CFLAGS MAKE
50+
51+
# tarball location
52+
BINUTILS_ARCHIVE="${DJGPP_DOWNLOAD_BASE}/djgpp/deleted/v2gnu/bnu${BINUTILS_VERSION}s.zip"
53+
DJCRX_ARCHIVE="${DJGPP_DOWNLOAD_BASE}/djgpp/current/v2/djcrx${DJCRX_VERSION}.zip"
54+
DJLSR_ARCHIVE="${DJGPP_DOWNLOAD_BASE}/djgpp/current/v2/djlsr${DJLSR_VERSION}.zip"
55+
DJDEV_ARCHIVE="${DJGPP_DOWNLOAD_BASE}/djgpp/current/v2/djdev${DJDEV_VERSION}.zip"
56+
57+
DJCROSS_GCC_ARCHIVE="${DJGPP_DOWNLOAD_BASE}/djgpp/rpms/djcross-gcc-${GCC_VERSION}/djcross-gcc-${GCC_VERSION}.tar.bz2"
58+
GCC_ARCHIVE="${FTPMIRROR_GNU_DOWNLOAD_BASE}/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz"
59+
GMP_ARCHIVE="${FTPMIRROR_GNU_DOWNLOAD_BASE}/gmp/gmp-${GMP_VERSION}.tar.xz"
60+
MPFR_ARCHIVE="${FTPMIRROR_GNU_DOWNLOAD_BASE}/mpfr/mpfr-${MPFR_VERSION}.tar.xz"
61+
MPC_ARCHIVE="${FTPMIRROR_GNU_DOWNLOAD_BASE}/mpc/mpc-${MPC_VERSION}.tar.gz"
62+
AUTOCONF_ARCHIVE="${FTP_GNU_DOWNLOAD_BASE}/autoconf/autoconf-${AUTOCONF_VERSION}.tar.xz"
63+
AUTOMAKE_ARCHIVE="${FTP_GNU_DOWNLOAD_BASE}/automake/automake-${AUTOMAKE_VERSION}.tar.xz"
64+
65+
# check required programs
66+
REQ_PROG_LIST="${CXX} ${CC} unzip bison flex ${MAKE} makeinfo patch"
67+
68+
# MinGW doesn't have curl, so we use wget.
69+
if uname|grep "^MINGW32" > /dev/null; then
70+
USE_WGET=1
71+
fi
72+
73+
# use curl or wget?
74+
if [ ! -z $USE_WGET ]; then
75+
REQ_PROG_LIST+=" wget"
76+
else
77+
REQ_PROG_LIST+=" curl"
78+
fi
79+
80+
for REQ_PROG in $REQ_PROG_LIST; do
81+
if ! which $REQ_PROG > /dev/null; then
82+
echo "$REQ_PROG not installed"
83+
exit 1
84+
fi
85+
done
86+
87+
# check GNU sed is installed or not.
88+
# It is for OSX, which doesn't ship with GNU sed.
89+
if ! sed --version 2>/dev/null |grep "GNU sed" > /dev/null ;then
90+
echo GNU sed is not installed, need to download.
91+
SED_VERSION=4.2.2
92+
SED_ARCHIVE="${FTP_GNU_DOWNLOAD_BASE}/sed/sed-${SED_VERSION}.tar.bz2"
93+
else
94+
SED_ARCHIVE=""
95+
fi
96+
97+
# check zlib is installed
98+
if ! ${CC} test-zlib.c -o test-zlib -lz; then
99+
echo "zlib not installed"
100+
exit 1
101+
fi
102+
rm test-zlib 2>/dev/null
103+
rm test-zlib.exe 2>/dev/null
104+
105+
# djcross-gcc-X.XX-tar.* maybe moved from /djgpp/rpms/ to /djgpp/deleted/rpms/ directory.
106+
OLD_DJCROSS_GCC_ARCHIVE=${DJCROSS_GCC_ARCHIVE/rpms\//deleted\/rpms\/}
107+
108+
# download source files
109+
ARCHIVE_LIST="$BINUTILS_ARCHIVE $DJCRX_ARCHIVE $DJLSR_ARCHIVE $DJDEV_ARCHIVE
110+
$SED_ARCHIVE $DJCROSS_GCC_ARCHIVE $OLD_DJCROSS_GCC_ARCHIVE $GCC_ARCHIVE
111+
$GMP_ARCHIVE $MPFR_ARCHIVE $MPC_ARCHIVE
112+
$AUTOCONF_ARCHIVE $AUTOMAKE_ARCHIVE"
113+
114+
echo "Download source files..."
115+
mkdir -p download || exit 1
116+
cd download
117+
118+
for ARCHIVE in $ARCHIVE_LIST; do
119+
FILE=`basename $ARCHIVE`
120+
if ! [ -f $FILE ]; then
121+
echo "Download $ARCHIVE ..."
122+
if [ ! -z $USE_WGET ]; then
123+
DL_CMD="wget -U firefox $ARCHIVE"
124+
else
125+
DL_CMD="curl -f $ARCHIVE -L -o $FILE"
126+
fi
127+
echo "Command : $DL_CMD"
128+
if ! eval $DL_CMD; then
129+
if [ "$ARCHIVE" == "$DJCROSS_GCC_ARCHIVE" ]; then
130+
echo "$FILE maybe moved to deleted/ directory."
131+
else
132+
rm $FILE
133+
echo "Download $ARCHIVE failed."
134+
exit 1
135+
fi
136+
fi
137+
fi
138+
done
139+
cd ..
140+
141+
# create target directory, check writable.
142+
echo "Make prefix directory : $DJGPP_PREFIX"
143+
mkdir -p $DJGPP_PREFIX
144+
145+
if ! [ -d $DJGPP_PREFIX ]; then
146+
echo "Unable to create prefix directory"
147+
exit 1
148+
fi
149+
150+
if ! [ -w $DJGPP_PREFIX ]; then
151+
echo "prefix directory is not writable."
152+
exit 1
153+
fi
154+
155+
# make build dir
156+
echo "Make build dir"
157+
rm -rf build || exit 1
158+
mkdir -p build || exit 1
159+
cd build
160+
161+
# build binutils
162+
echo "Building binutils"
163+
mkdir bnu${BINUTILS_VERSION}s
164+
cd bnu${BINUTILS_VERSION}s
165+
unzip ../../download/bnu${BINUTILS_VERSION}s.zip || exit 1
166+
cd gnu/binutils-* || exit
167+
168+
# exec permission of some files are not set, fix it.
169+
for EXEC_FILE in install-sh missing; do
170+
echo "chmod a+x $EXEC_FILE"
171+
chmod a+x $EXEC_FILE || exit 1
172+
done
173+
174+
sh ./configure \
175+
--prefix=$DJGPP_PREFIX \
176+
--target=i586-pc-msdosdjgpp \
177+
--program-prefix=i586-pc-msdosdjgpp- \
178+
--disable-werror \
179+
--disable-nls \
180+
|| exit 1
181+
182+
${MAKE} configure-bfd || exit 1
183+
${MAKE} -C bfd stmp-lcoff-h || exit 1
184+
${MAKE} || exit 1
185+
186+
if [ ! -z $MAKE_CHECK ]; then
187+
echo "Run ${MAKE} check"
188+
${MAKE} check || exit 1
189+
fi
190+
191+
${MAKE} install || exit 1
192+
193+
cd ../../..
194+
# binutils done
195+
196+
# prepare djcrx
197+
echo "Prepare djcrx"
198+
mkdir djcrx${DJCRX_VERSION}
199+
cd djcrx${DJCRX_VERSION}
200+
unzip ../../download/djcrx${DJCRX_VERSION}.zip || exit 1
201+
patch -p1 -u < ../../patch/patch-djcrx205.txt || exit 1
202+
203+
cd src/stub
204+
${CC} -O2 stubify.c -o stubify || exit 1
205+
${CC} -O2 stubedit.c -o stubedit || exit 1
206+
207+
cd ../..
208+
209+
mkdir -p $DJGPP_PREFIX/i586-pc-msdosdjgpp/sys-include || exit 1
210+
cp -rp include/* $DJGPP_PREFIX/i586-pc-msdosdjgpp/sys-include/ || exit 1
211+
cp -rp lib $DJGPP_PREFIX/i586-pc-msdosdjgpp/ || exit 1
212+
cp -p src/stub/stubify $DJGPP_PREFIX/i586-pc-msdosdjgpp/bin/ || exit 1
213+
cp -p src/stub/stubedit $DJGPP_PREFIX/i586-pc-msdosdjgpp/bin/ || exit 1
214+
215+
cd ..
216+
# djcrx done
217+
218+
# build gcc
219+
tar -xjvf ../download/djcross-gcc-${GCC_VERSION}.tar.bz2 || exit 1
220+
cd djcross-gcc-${GCC_VERSION}/
221+
222+
BUILDDIR=`pwd`
223+
224+
echo "Building autoconf"
225+
cd $BUILDDIR
226+
tar xJf ../../download/autoconf-${AUTOCONF_VERSION}.tar.xz || exit 1
227+
cd autoconf-${AUTOCONF_VERSION}/
228+
./configure --prefix=$BUILDDIR/tmpinst || exit 1
229+
${MAKE} all install || exit 1
230+
231+
echo "Building automake"
232+
cd $BUILDDIR
233+
tar xJf ../../download/automake-${AUTOMAKE_VERSION}.tar.xz || exit 1
234+
cd automake-${AUTOMAKE_VERSION}/
235+
PATH="$BUILDDIR//tmpinst/bin:$PATH" \
236+
./configure --prefix=$BUILDDIR/tmpinst || exit 1
237+
PATH="$BUILDDIR//tmpinst/bin:$PATH" \
238+
${MAKE} all install || exit 1
239+
240+
# build GNU sed if needed.
241+
SED=sed
242+
if [ ! -z $SED_VERSION ]; then
243+
echo "Building sed"
244+
cd $BUILDDIR
245+
tar xjf ../../download/sed-${SED_VERSION}.tar.bz2 || exit 1
246+
cd sed-${SED_VERSION}/
247+
./configure --prefix=$BUILDDIR/tmpinst || exit 1
248+
${MAKE} all install || exit 1
249+
SED=$BUILDDIR/tmpinst/bin/sed
250+
fi
251+
252+
cd $BUILDDIR
253+
tar xJf ../../download/gmp-${GMP_VERSION}.tar.xz || exit 1
254+
tar xJf ../../download/mpfr-${MPFR_VERSION}.tar.xz || exit 1
255+
tar xzf ../../download/mpc-${MPC_VERSION}.tar.gz || exit 1
256+
257+
# gcc 4.8 or above unpack-gcc.sh needs to be patched for OSX
258+
# patch from :
259+
# ( cd gnu && tar xf $top/$archive $tar_param && echo $archive >$top/s-sources )
260+
# to :
261+
# ( cd gnu && tar xJf $top/$archive && echo $archive >$top/s-sources )
262+
echo "Patch unpack-gcc.sh"
263+
$SED -i "s/\(cd gnu && tar x\)\(f [^ ]* \)\([^ ]* \)/\1J\2/" unpack-gcc.sh || exit 1
264+
if [ `uname` = "FreeBSD" ]; then
265+
# The --verbose option is not recognized by BSD patch
266+
$SED -i 's/patch --verbose/patch/' unpack-gcc.sh || exit 1
267+
fi
268+
269+
echo "Running unpack-gcc.sh"
270+
PATH="$BUILDDIR/tmpinst/bin:$PATH" sh unpack-gcc.sh --no-djgpp-source ../../download/gcc-${GCC_VERSION}.tar.xz || exit 1
271+
272+
# patch gnu/gcc-X.XX/gcc/doc/gcc.texi
273+
echo "Patch gcc/doc/gcc.texi"
274+
cd gnu/gcc-*/gcc/doc || exit 1
275+
$SED -i "s/[^^]@\(\(tex\)\|\(end\)\)/\n@\1/g" gcc.texi || exit 1
276+
cd -
277+
278+
# copy stubify programs
279+
cp $DJGPP_PREFIX/i586-pc-msdosdjgpp/bin/stubify $BUILDDIR/tmpinst/bin
280+
281+
echo "Building gmp"
282+
cd $BUILDDIR/gmp-*/
283+
# On some systems, building gmp will fail if CFLAGS is set.
284+
# Unset CFLAGS during building gmp.
285+
env -u CFLAGS ./configure --enable-fat --prefix=$BUILDDIR/tmpinst --enable-static --disable-shared || exit 1
286+
${MAKE} all || exit 1
287+
if [ ! -z $MAKE_CHECK ]; then
288+
echo "Run ${MAKE} check"
289+
${MAKE} check || exit 1
290+
fi
291+
${MAKE} install || exit 1
292+
293+
echo "Building mpfr"
294+
cd $BUILDDIR/mpfr-${MPFR_VERSION}/
295+
./configure --prefix=$BUILDDIR/tmpinst --with-gmp=$BUILDDIR/tmpinst --enable-static --disable-shared || exit 1
296+
${MAKE} all || exit 1
297+
if [ ! -z $MAKE_CHECK ]; then
298+
echo "Run ${MAKE} check"
299+
${MAKE} check || exit 1
300+
fi
301+
${MAKE} install || exit 1
302+
303+
echo "Building mpc"
304+
cd $BUILDDIR/mpc-${MPC_VERSION}/
305+
./configure --prefix=$BUILDDIR/tmpinst --with-gmp=$BUILDDIR/tmpinst --with-mpfr=$BUILDDIR/tmpinst --enable-static --disable-shared || exit 1
306+
${MAKE} all || exit 1
307+
if [ ! -z $MAKE_CHECK ]; then
308+
echo "Run ${MAKE} check"
309+
${MAKE} check || exit 1
310+
fi
311+
${MAKE} install || exit 1
312+
313+
echo "Building gcc"
314+
cd $BUILDDIR/
315+
316+
mkdir djcross
317+
cd djcross
318+
319+
PATH="$BUILDDIR//tmpinst/bin:$PATH" \
320+
../gnu/gcc-${GCC_VERSION_SHORT}/configure \
321+
--target=i586-pc-msdosdjgpp \
322+
--program-prefix=i586-pc-msdosdjgpp- \
323+
--prefix=$DJGPP_PREFIX \
324+
--disable-nls \
325+
--disable-plugin \
326+
--disable-lto \
327+
--enable-lto \
328+
--enable-libstdcxx-filesystem-ts \
329+
--enable-libquadmath-support \
330+
--with-gmp=$BUILDDIR/tmpinst \
331+
--with-mpfr=$BUILDDIR/tmpinst \
332+
--with-mpc=$BUILDDIR/tmpinst \
333+
--enable-version-specific-runtime-libs \
334+
--enable-languages=${ENABLE_LANGUAGES} \
335+
|| exit 1
336+
337+
${MAKE} j=4 "PATH=$BUILDDIR/tmpinst/bin:$PATH" || exit 1
338+
339+
${MAKE} install-strip || exit 1
340+
341+
echo "Copy long name executables to short name."
342+
(
343+
cd $DJGPP_PREFIX || exit 1
344+
SHORT_NAME_LIST="gcc g++ c++ addr2line c++filt cpp size strings"
345+
for SHORT_NAME in $SHORT_NAME_LIST; do
346+
if [ -f bin/i586-pc-msdosdjgpp-gcc ]; then
347+
cp bin/i586-pc-msdosdjgpp-$SHORT_NAME i586-pc-msdosdjgpp/bin/$SHORT_NAME
348+
fi
349+
done
350+
) || exit 1
351+
352+
# gcc done
353+
354+
# build djlsr (for dxegen / exe2coff)
355+
echo "Prepare djlsr"
356+
cd $BUILDDIR
357+
cd ..
358+
rm -rf djlsr${DJLSR_VERSION}
359+
mkdir djlsr${DJLSR_VERSION}
360+
cd djlsr${DJLSR_VERSION}
361+
unzip ../../download/djlsr${DJLSR_VERSION}.zip || exit 1
362+
unzip -o ../../download/djdev${DJDEV_VERSION}.zip "include/*/*" || exit 1
363+
unzip -o ../../download/djdev${DJDEV_VERSION}.zip "include/*" || exit 1
364+
patch -p1 -u < ../../patch/patch-djlsr205.txt || exit 1
365+
if [ "$CC" == "gcc" ]; then
366+
echo "Building DXE tools."
367+
cd src
368+
PATH=$DJGPP_PREFIX/bin/:$PATH make || exit 1
369+
cp dxe/dxegen dxe/dxe3gen dxe/dxe3res $DJGPP_PREFIX/i586-pc-msdosdjgpp/bin/ || exit 1
370+
cd ..
371+
else
372+
echo "Building DXE tools requires gcc, skip."
373+
fi
374+
cd src/stub
375+
${CC} -o exe2coff exe2coff.c || exit 1
376+
cp -p exe2coff $DJGPP_PREFIX/i586-pc-msdosdjgpp/bin/ || exit 1
377+
cd ../../..
378+
# djlsr done
379+
380+
# copy setenv script
381+
(cd $BUILDDIR/../../setenv/ && ./copyfile.sh $DJGPP_PREFIX) || exit 1
382+
383+
echo "Testing DJGPP."
384+
cd $BUILDDIR
385+
cd ..
386+
echo "Use DJGPP to build a test C program."
387+
$DJGPP_PREFIX/bin/i586-pc-msdosdjgpp-gcc ../hello.c -o hello || exit 1
388+
389+
for x in $(echo $ENABLE_LANGUAGES | tr "," " ")
390+
do
391+
case $x in
392+
c++)
393+
echo "Use DJGPP to build a test C++ program."
394+
$DJGPP_PREFIX/bin/i586-pc-msdosdjgpp-c++ ../hello-cpp.cpp -o hello-cpp || exit 1
395+
;;
396+
esac
397+
done
398+
399+
echo "build-djgpp.sh done."

0 commit comments

Comments
 (0)