Skip to content

Commit 3a90404

Browse files
committed
Support 7.2.0
1 parent 9be9f46 commit 3a90404

File tree

2 files changed

+372
-2
lines changed

2 files changed

+372
-2
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,12 @@ Currently supported djgpp-version :
8282
* 6.3.0
8383
* 6.4.0
8484
* 7.1.0
85+
* 7.2.0
8586

86-
For example, to build DJGPP for gcc 7.1.0 :
87+
For example, to build DJGPP for gcc 7.2.0 :
8788

8889
```
89-
./build-djgpp.sh 7.1.0
90+
./build-djgpp.sh 7.2.0
9091
```
9192

9293
It will download all necessary files, build DJGPP compiler and binutils, and install it.

script/7.2.0

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

0 commit comments

Comments
 (0)