summaryrefslogtreecommitdiffstats
path: root/MinGW-w64/build/MinGW-w64.SlackBuild
diff options
context:
space:
mode:
author Eric Hameleers <alien@slackware.com>2020-09-28 08:33:55 +0000
committer Eric Hameleers <alien@slackware.com>2020-09-28 08:33:55 +0000
commit66990ba52bdca6c1e102422629a29e31a6d22650 (patch)
treefd8648f4a0c381c46256d587cf44504e323af7ba /MinGW-w64/build/MinGW-w64.SlackBuild
parent05193ebb0ca827cfcfcfd5566835177a391b4b72 (diff)
downloadasb-66990ba52bdca6c1e102422629a29e31a6d22650.tar.gz
asb-66990ba52bdca6c1e102422629a29e31a6d22650.tar.xz
MinGW-w64: this builds a package on 32bit Slackware by omitting a custom build of the gcc toolchain.
Diffstat (limited to 'MinGW-w64/build/MinGW-w64.SlackBuild')
-rwxr-xr-xMinGW-w64/build/MinGW-w64.SlackBuild192
1 files changed, 132 insertions, 60 deletions
diff --git a/MinGW-w64/build/MinGW-w64.SlackBuild b/MinGW-w64/build/MinGW-w64.SlackBuild
index 29a2189f..b8d7ae41 100755
--- a/MinGW-w64/build/MinGW-w64.SlackBuild
+++ b/MinGW-w64/build/MinGW-w64.SlackBuild
@@ -23,9 +23,10 @@
# -----------------------------------------------------------------------------
#
# This script pays hommage to the work of Tk-Glitch <ti3nou at gmail dot com>
-# who is the author of '(Mostly) Portable GCC/MinGW', this SlackBuild is a
-# simplified version of his work. For more info, see the git homepage at
-# https://github.com/Frogging-Family/mostlyportable-gcc
+# who is the author of '(Mostly) Portable GCC/MinGW', this SlackBuild is an
+# adapted version of his work, adding support for a 32bit OS.
+# For more info, see the git homepage at:
+# https://github.com/Frogging-Family/mostlyportable-gcc
#
# -----------------------------------------------------------------------------
#
@@ -74,12 +75,63 @@ OSL=0.9.2
ISL=0.22.1
CLOOG=0.20.0
+# Automatically determine the architecture we're building on:
+if [ -z "$ARCH" ]; then
+ case "$(uname -m)" in
+ i?86) ARCH=i586 ;;
+ arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
+ # Unless $ARCH is already set, use uname -m for all other archs:
+ *) ARCH=$(uname -m) ;;
+ esac
+ export ARCH
+fi
+# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
+case "$ARCH" in
+ i?86) SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686"
+ SLKLDFLAGS=""; LIBDIRSUFFIX=""
+ MINGW_TARGETS="${ARCH}-w64-mingw32"
+ ;;
+ x86_64) SLKCFLAGS="-O2 -fPIC"
+ SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"
+ MINGW_TARGETS="i686-w64-mingw32 x86_64-w64-mingw32"
+ ;;
+ *) SLKCFLAGS=${SLKCFLAGS:-"-O2"}
+ SLKLDFLAGS=${SLKLDFLAGS:-""}; LIBDIRSUFFIX=${LIBDIRSUFFIX:-""}
+ MINGW_TARGETS="${ARCH}-w64-mingw32"
+ ;;
+esac
+TARGET=${ARCH}-slackware-linux
+
+# Attempting to compile our own support tools, binutils and gcc fails
+# on 32bit Slackware. When the build gets to gcc I run into the error:
+# "/tmp/mingw_gcc_bootstrap/bin/ld: cannot find -lc",
+# and I have not found a fix for this.
+# So, on 32bit Slackware we have use the system toolchain until I fix this:
+if [ "$ARCH" == "x86_64" ]; then
+ BUILD_GCC=${BUILD_GCC:-"YES"}
+else
+ BUILD_GCC=${BUILD_GCC:-"NO"}
+fi
+
# Tool capabilities:
GCC_EXCEPTIONS="dwarf2"
GCC_LANGUAGES="c,c++,lto"
MINGW_LANGUAGES="c,c++,lto,objc,obj-c++"
WIN32_THREADS="false"
+if [ "$ARCH" == "x86_64" ]; then
+ BINUTILS_TARGETS="x86_64-pep"
+ GCC_MULTI_ARCH="\
+ --with-arch-32=i686 \
+ --with-abi=m64 \
+ --with-multilib-list=m32,m64 \
+ --enable-multilib \
+ --enable-default-pie"
+else
+ BINUTILS_TARGETS="i386-efi-pe"
+ GCC_MULTI_ARCH="--disable-multilib"
+fi
+
# Arguments for the MinGW gcc compilation:
if [ "$GCC_EXCEPTIONS" == "dwarf2" ]; then
EXCEPTIONS_ARGS="--disable-sjlj-exceptions --with-dwarf2"
@@ -143,30 +195,6 @@ SRCURL[8]=" https://github.com/periscop/cloog/releases/download/cloog-${CLOOG}/c
## --- with a little luck, you won't have to edit below this point --- ##
##
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
-case "$ARCH" in
- i?86) SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686"
- SLKLDFLAGS=""; LIBDIRSUFFIX=""
- ;;
- x86_64) SLKCFLAGS="-O2 -fPIC"
- SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"
- ;;
- *) SLKCFLAGS=${SLKCFLAGS:-"-O2"}
- SLKLDFLAGS=${SLKLDFLAGS:-""}; LIBDIRSUFFIX=${LIBDIRSUFFIX:-""}
- ;;
-esac
-TARGET=${ARCH}-slackware-linux
-
# Exit the script on errors:
set -e
trap 'echo "$0 FAILED at line ${LINENO}" | tee $OUTPUT/error-${PRGNAM}.log' ERR
@@ -229,47 +257,57 @@ export CFLAGS="$SLKCFLAGS"
export CPPFLAGS="$SLKCFLAGS"
# Used in all compilations:
-MINGW_TARGETS="i686-w64-mingw32 x86_64-w64-mingw32"
COMMONCONFIG="--disable-shared --enable-static"
# Build the supporting tools first, then build a custom gcc for our platform
# and then build mingw-w64 binaries using our support tools and custom gcc:
function build_support_tools() {
- MY_DESTDIR=${1}
+ MY_DESTDIR="${1}"
+ MY_ARCH="${2:-""}"
+
+ [ -z "$MY_ARCH" ] && BUILD_ARGS="" || BUILD_ARGS="--build=$MY_ARCH"
# gmp:
+ echo "-- gmp --"
cd $TMP/tmp-$PRGNAM/gmp-${GMP}
./configure \
--prefix=${MY_DESTDIR} \
- ${COMMONCONFIG}
+ ${COMMONCONFIG} \
+ ${BUILD_ARGS}
make ${NUMJOBS} || make || exit 1
make install || exit 1
# mpfr:
+ echo "-- mpfr --"
cd $TMP/tmp-$PRGNAM/mpfr-${MPFR}
./configure \
--prefix=${MY_DESTDIR} \
--with-gmp=${MY_DESTDIR} \
- ${COMMONCONFIG}
+ ${COMMONCONFIG} \
+ ${BUILD_ARGS}
make ${NUMJOBS} || make || exit 1
make install || exit 1
# mpc:
+ echo "-- mpc --"
cd $TMP/tmp-$PRGNAM/mpc-${MPC}
./configure \
--prefix=${MY_DESTDIR} \
--with-gmp=${MY_DESTDIR} \
--with-mpfr=${MY_DESTDIR} \
- ${COMMONCONFIG}
+ ${COMMONCONFIG} \
+ ${BUILD_ARGS}
make ${NUMJOBS} || make || exit 1
make install || exit 1
# isl:
+ echo "-- isl --"
cd $TMP/tmp-$PRGNAM/isl-${ISL}
./configure \
--prefix=${MY_DESTDIR} \
- ${COMMONCONFIG}
+ ${COMMONCONFIG} \
+ ${BUILD_ARGS}
make ${NUMJOBS} || make || exit 1
make install || exit 1
@@ -279,6 +317,7 @@ function build_support_tools_mingw() {
MY_DESTDIR=${1}
# osl:
+ echo "-- osl --"
cd $TMP/tmp-$PRGNAM/osl-${OSL}
./configure \
--prefix=${MY_DESTDIR} \
@@ -288,6 +327,7 @@ function build_support_tools_mingw() {
make install || exit 1
# cloog:
+ echo "-- cloog --"
cd $TMP/tmp-$PRGNAM/cloog-${CLOOG}
./configure \
--prefix=${MY_DESTDIR} \
@@ -300,6 +340,7 @@ function build_support_tools_mingw() {
} # end build_support_tools_mingw
+if [ "$BUILD_GCC" == "YES" ]; then
#
# --- GCC ---
#
@@ -318,9 +359,10 @@ chmod -R u+w,go+r-w,a+rX-st *
export PATH="${GCC_BOOTSTRAP_PATH}/bin:${GCC_BOOTSTRAP_PATH}/lib:${GCC_BOOTSTRAP_PATH}/include:${PATH}"
# Build the support tools:
-build_support_tools ${GCC_BOOTSTRAP_PATH}
+build_support_tools ${GCC_BOOTSTRAP_PATH} ${TARGET}
# binutils:
+echo "-- binutils --"
mkdir -p $TMP/tmp-$PRGNAM/binutils-build && cd $TMP/tmp-$PRGNAM/binutils-build
$TMP/tmp-$PRGNAM/binutils-${BINUTILS}/configure \
--prefix=${GCC_BOOTSTRAP_PATH} \
@@ -331,7 +373,7 @@ $TMP/tmp-$PRGNAM/binutils-${BINUTILS}/configure \
--enable-lto \
--enable-plugins \
--enable-relro \
- --enable-targets=x86_64-pep \
+ --enable-targets=${BINUTILS_TARGETS} \
--enable-threads \
--disable-gdb \
--disable-werror \
@@ -344,12 +386,26 @@ make install prefix=${GCC_BOOTSTRAP_PATH} tooldir=${GCC_BOOTSTRAP_PATH} || exit
# Remove unwanted files:
rm -f ${GCC_BOOTSTRAP_PATH}/share/man/man1/{dlltool,nlmconv,windres,windmc}*
+#if [ "$ARCH" != "x86_64" ]; then
+# # Create symlinks to c and math libraries to prevent 'ld: can not find -lc':
+# ln -sf /usr/lib/libc.so ${GCC_BOOTSTRAP_PATH}/lib/
+# ln -sf /usr/lib/libc.a ${GCC_BOOTSTRAP_PATH}/lib/
+# ln -sf /usr/lib/libm.so ${GCC_BOOTSTRAP_PATH}/lib/
+# ln -sf /usr/lib/libpthread.so ${GCC_BOOTSTRAP_PATH}/lib/
+ #ln -sf /usr/lib/libpthread.a ${GCC_BOOTSTRAP_PATH}/lib/
+#fi
+
# gcc:
+echo "-- gcc --"
mkdir -p $TMP/tmp-$PRGNAM/gcc-build && cd $TMP/tmp-$PRGNAM/gcc-build
+LDFLAGS="$LDFLAGS -Wl,--library-path=/usr/lib$LIBDIRSUFFIX" \
$TMP/tmp-$PRGNAM/gcc-${GCC}/configure \
+ ${GCC_MULTI_ARCH} \
--prefix=${GCC_BOOTSTRAP_PATH} \
--with-pkgversion='alienBOB' \
+ --with-build-sysroot='/' \
--enable-languages=${GCC_LANGUAGES} \
+ --enable-multiarch \
--disable-bootstrap \
--with-gcc-major-version-only \
--enable-linker-build-id \
@@ -366,14 +422,8 @@ $TMP/tmp-$PRGNAM/gcc-${GCC}/configure \
--enable-gnu-unique-object \
--disable-vtable-verify \
--enable-plugin \
- --enable-default-pie \
--with-target-system-zlib=auto \
--with-system-zlib \
- --enable-multiarch \
- --with-arch-32=i686 \
- --with-abi=m64 \
- --with-multilib-list=m32,m64 \
- --enable-multilib \
--disable-werror \
--enable-checking=release \
--with-fpmath=sse \
@@ -389,20 +439,24 @@ $TMP/tmp-$PRGNAM/gcc-${GCC}/configure \
--target=${TARGET} \
|| exit 1
+
make ${NUMJOBS} || make || exit 1
make install || exit 1
ln -s gcc ${GCC_BOOTSTRAP_PATH}/bin/cc
#libgcc:
+echo "-- libgcc --"
cd $TMP/tmp-$PRGNAM/gcc-build
make -C ${TARGET}/libgcc install
-make -C ${TARGET}/32/libgcc install
make -C libcpp install
make -C gcc install-po
make -C ${TARGET}/libgcc install-shared
-make -C ${TARGET}/32/libgcc install-shared
rm -f ${GCC_BOOTSTRAP_PATH}/lib/gcc/${TARGET}/${GCC}/libgcc_eh.a
-rm -f ${GCC_BOOTSTRAP_PATH}/lib/gcc/${TARGET}/${GCC}/32/libgcc_eh.a
+if [ "$ARCH" == "x86_64" ]; then
+ make -C ${TARGET}/32/libgcc install
+ make -C ${TARGET}/32/libgcc install-shared
+ rm -f ${GCC_BOOTSTRAP_PATH}/lib/gcc/${TARGET}/${GCC}/32/libgcc_eh.a
+fi
for lib in \
libatomic \
libgomp \
@@ -413,18 +467,22 @@ for lib in \
libvtv; do
make -C ${TARGET}/$lib install-toolexeclibLTLIBRARIES
done
-for lib in \
- libatomic \
- libgomp \
- libitm \
- libquadmath \
- libsanitizer/{a,l,ub}san \
- libstdc++-v3/src \
- libvtv; do
- make -C ${TARGET}/32/$lib install-toolexeclibLTLIBRARIES
-done
+if [ "$ARCH" == "x86_64" ]; then
+ for lib in \
+ libatomic \
+ libgomp \
+ libitm \
+ libquadmath \
+ libsanitizer/{a,l,ub}san \
+ libstdc++-v3/src \
+ libvtv; do
+ make -C ${TARGET}/32/$lib install-toolexeclibLTLIBRARIES
+ done
+fi
make -C ${TARGET}/libstdc++-v3/po install
+fi # End $BUILD_GCC == YES
+
#
# --- MINGW ---
#
@@ -441,13 +499,18 @@ chown -R root:root *
chmod -R u+w,go+r-w,a+rX-st *
# Make the process use our tools as they get built:
-export PATH="${GCC_BOOTSTRAP_PATH}/bin:${GCC_BOOTSTRAP_PATH}/lib:${GCC_BOOTSTRAP_PATH}/include:${MINGW_OUTPUT_PATH}/bin:${MINGW_OUTPUT_PATH}/lib:${MINGW_OUTPUT_PATH}/include:${PATH}"
+if [ "$BUILD_GCC" == "YES" ]; then
+ export PATH="${GCC_BOOTSTRAP_PATH}/bin:${GCC_BOOTSTRAP_PATH}/lib:${GCC_BOOTSTRAP_PATH}/include:${MINGW_OUTPUT_PATH}/bin:${MINGW_OUTPUT_PATH}/lib:${MINGW_OUTPUT_PATH}/include:${PATH}"
+else
+ export PATH="${MINGW_OUTPUT_PATH}/bin:${MINGW_OUTPUT_PATH}/lib:${MINGW_OUTPUT_PATH}/include:${PATH}"
+fi
# Re-build the support tools, this time targeting MinGW:
-build_support_tools ${MINGW_OUTPUT_PATH}
+build_support_tools ${MINGW_OUTPUT_PATH} ${TARGET}
build_support_tools_mingw ${MINGW_OUTPUT_PATH}
# mingw-w64-binutils:
+echo "-- mingw-w64-binutils --"
cd $TMP/tmp-$PRGNAM/binutils-${BINUTILS}
# Do not install libiberty:
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
@@ -473,12 +536,14 @@ for _target in ${MINGW_TARGETS}; do
done
# binutils docs:
+echo "-- binutils-docs --"
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/binutils
( cd $TMP/tmp-$PRGNAM/binutils-${BINUTILS}
cp -a $BINUTILS_DOCS $PKG/usr/doc/$PRGNAM-$VERSION/binutils/ || true
)
# mingw-w64-headers:
+echo "-- mingw-w64-headers --"
for _target in ${MINGW_TARGETS}; do
echo -e "Configuring ${_target} headers"
mkdir -p $TMP/tmp-$PRGNAM/headers-${_target} && cd $TMP/tmp-$PRGNAM/headers-${_target}
@@ -499,6 +564,7 @@ for _target in ${MINGW_TARGETS}; do
done
# mingw-w64-headers-bootstrap:
+echo "-- mingw-w64-headers-bootstrap --"
_dummystring="/* Dummy header, which gets overriden, if winpthread library gets installed. */"
mkdir -p $TMP/tmp-$PRGNAM/dummy/ && cd $TMP/tmp-$PRGNAM//dummy
echo "${_dummystring}" > pthread_signal.h
@@ -514,6 +580,7 @@ done
cp -r $TMP/tmp-$PRGNAM/gcc-${GCC} $TMP/tmp-$PRGNAM/gcc-${GCC}-base
# mingw-w64-gcc-base:
+echo "-- mingw-w64-gcc-base --"
# Do not install libiberty:
sed -i 's/install_to_$(INSTALL_DEST) //' $TMP/tmp-$PRGNAM/gcc-${GCC}-base/libiberty/Makefile.in
for _target in ${MINGW_TARGETS}; do
@@ -547,12 +614,13 @@ for _target in ${MINGW_TARGETS}; do
done
# mingw-w64-crt:
+echo "-- mingw-w64-crt --"
for _target in ${MINGW_TARGETS}; do
echo -e "Building ${_target} CRT"
- if [ "${_target}" == "i686-w64-mingw32" ]; then
- _crt_configure_args="--disable-lib64 --enable-lib32"
- elif [ "${_target}" == "x86_64-w64-mingw32" ]; then
+ if [ "${_target}" == "x86_64-w64-mingw32" ]; then
_crt_configure_args="--disable-lib32 --enable-lib64"
+ else
+ _crt_configure_args="--disable-lib64 --enable-lib32"
fi
mkdir -p $TMP/tmp-$PRGNAM/crt-${_target} && cd $TMP/tmp-$PRGNAM/crt-${_target}
$TMP/tmp-$PRGNAM/mingw-w64-${MINGW}/mingw-w64-crt/configure \
@@ -569,6 +637,7 @@ for _target in ${MINGW_TARGETS}; do
done
# mingw-w64-winpthreads:
+echo "-- mingw-w64-winpthreads --"
for _target in ${MINGW_TARGETS}; do
echo -e "Building ${_target} winpthreads..."
mkdir -p $TMP/tmp-$PRGNAM/winpthreads-build-${_target} && cd $TMP/tmp-$PRGNAM/winpthreads-build-${_target}
@@ -585,12 +654,14 @@ for _target in ${MINGW_TARGETS}; do
done
# mingw-w64 docs:
+echo "-- mingw-w64-docs --"
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/mingw-w64
( cd $TMP/tmp-$PRGNAM/mingw-w64-${MINGW}
cp -a $MINGW_DOCS $PKG/usr/doc/$PRGNAM-$VERSION/mingw-w64/ || true
)
# mingw-w64-gcc:
+echo "-- mingw-w64-gcc --"
for _target in ${MINGW_TARGETS}; do
mkdir -p $TMP/tmp-$PRGNAM/gcc-build-${_target} && cd $TMP/tmp-$PRGNAM/gcc-build-${_target}
$TMP/tmp-$PRGNAM/gcc-${GCC}/configure \
@@ -639,9 +710,10 @@ rm -rf ${MINGW_OUTPUT_PATH}/share
rm -f ${MINGW_OUTPUT_PATH}/lib/libcc1.*
# Create lto plugin link:
mkdir -p ${MINGW_OUTPUT_PATH}/lib/bfd-plugins
-ln -sf ../gcc/x86_64-w64-mingw32/${GCC}/liblto_plugin.so ${MINGW_OUTPUT_PATH}/lib/bfd-plugins/liblto_plugin.so
+ln -sf ../gcc/${ARCH}-w64-mingw32/${GCC}/liblto_plugin.so ${MINGW_OUTPUT_PATH}/lib/bfd-plugins/liblto_plugin.so
# gcc docs:
+echo "-- gcc-docs --"
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION/gcc
( cd $TMP/tmp-$PRGNAM/gcc-${GCC}
cp -a $GCC_DOCS $PKG/usr/doc/$PRGNAM-$VERSION/gcc/ || true