itnew post: pcc + musl cross-compiler - monochromatic - monochromatic blog: http://blog.z3bra.org Err z3bra.org 70 hgit clone git://z3bra.org/monochromatic URL:git://z3bra.org/monochromatic z3bra.org 70 1Log /scm/monochromatic/log.gph z3bra.org 70 1Files /scm/monochromatic/files.gph z3bra.org 70 1Refs /scm/monochromatic/refs.gph z3bra.org 70 i--- Err z3bra.org 70 1commit 7f2589bdb6500984bbc4717aadf3d189685bdfc5 /scm/monochromatic/commit/7f2589bdb6500984bbc4717aadf3d189685bdfc5.gph z3bra.org 70 1parent 41e38839b23d8ccea33dd48b439143889effbef9 /scm/monochromatic/commit/41e38839b23d8ccea33dd48b439143889effbef9.gph z3bra.org 70 hAuthor: z3bra URL:mailto:willyatmailoodotorg z3bra.org 70 iDate: Sun, 16 Aug 2015 19:53:58 +0200 Err z3bra.org 70 i Err z3bra.org 70 inew post: pcc + musl cross-compiler Err z3bra.org 70 i Err z3bra.org 70 iDiffstat: Err z3bra.org 70 i A 2015/08/cross-compiling-with-pcc-a… | 380 ++++++++++++++++++++++++++++++ Err z3bra.org 70 i M config.mk | 3 ++- Err z3bra.org 70 i M index.txt | 1 + Err z3bra.org 70 i Err z3bra.org 70 i3 files changed, 383 insertions(+), 1 deletion(-) Err z3bra.org 70 i--- Err z3bra.org 70 1diff --git a/2015/08/cross-compiling-with-pcc-and-musl.txt b/2015/08/cross-compiling-with-pcc-and-musl.txt /scm/monochromatic/file/2015/08/cross-compiling-with-pcc-and-musl.txt.gph z3bra.org 70 it@@ -0,0 +1,380 @@ Err z3bra.org 70 i+# [cross-compiling with PCC and musl](#) Err z3bra.org 70 i+## — 16 August, 2015 Err z3bra.org 70 i+ Err z3bra.org 70 i+I've recently been playing around with [PCC](http://pcc.ludd.ltu.se/) and Err z3bra.org 70 i+[musl](http://www.musl-libc.org/), and to make the process of compiling Err z3bra.org 70 i+softwares with them easier, I decided to setup a cross-compiler relying on both. Err z3bra.org 70 i+ Err z3bra.org 70 i+**TL;DR**: here is the full script. It will create your toolchain in `$HOME/cross/pcc-x86_64` and name the tools `x86_64-linux-musl-*`. Err z3bra.org 70 i+ Err z3bra.org 70 i+ #!/bin/sh -ex Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # Couple of useful links: Err z3bra.org 70 i+ # + http://pcc.ludd.ltu.se/cross-compiler/ Err z3bra.org 70 i+ # + http://wiki.osdev.org/Cross-Compiler_Successful_Builds Err z3bra.org 70 i+ # + https://git.framasoft.org/Ypnose/solyste/blob/master/scripts/create-crossenv Err z3bra.org 70 i+ # + http://kegel.com/crosstool/ Err z3bra.org 70 i+ # + https://github.com/GregorR/musl-cross/tree/master/patches Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # 0. download and extract sources Err z3bra.org 70 i+ # 1. patch everything that require patching Err z3bra.org 70 i+ # 2. install linux headers Err z3bra.org 70 i+ # 3. build binutils Err z3bra.org 70 i+ # 4. build musl Err z3bra.org 70 i+ # 5. build pcc with gcc Err z3bra.org 70 i+ # 6. add pkg-config wrapper Err z3bra.org 70 i+ Err z3bra.org 70 i+ # cross compiler environment Err z3bra.org 70 i+ MARCH=$(uname -m) Err z3bra.org 70 i+ TRIPLE=${TRIPLE:-${MARCH}-linux-musl} Err z3bra.org 70 i+ PREFIX=${PREFIX:-${HOME}/cross/pcc-${MARCH}} Err z3bra.org 70 i+ BLDDIR=${BLDDIR:-${HOME}/cross/build} Err z3bra.org 70 i+ SRCDIR=${SRCDIR:-${HOME}/cross/source} Err z3bra.org 70 i+ PATCHD=${PATCHD:-${HOME}/cross/patches} Err z3bra.org 70 i+ Err z3bra.org 70 i+ # compilation variables Err z3bra.org 70 i+ PATH="${PREFIX}/bin:${PATH}" Err z3bra.org 70 i+ CFLAGS="-Os -fomit-frame-pointer -pipe" Err z3bra.org 70 i+ CXXFLAGS="${CFLAGS}" Err z3bra.org 70 i+ CPPFLAGS="${CFLAGS}" Err z3bra.org 70 i+ LDFLAGS="-Wl,--as-needed" Err z3bra.org 70 i+ MAKEFLAGS="-j8" Err z3bra.org 70 i+ Err z3bra.org 70 i+ # versions Err z3bra.org 70 i+ PCCV=${PCCV:-1.1.0} Err z3bra.org 70 i+ BINV=${BINV:-2.25} Err z3bra.org 70 i+ MUSLV=${MUSLV:-1.1.10} Err z3bra.org 70 i+ KERNV=${KERNV:-4.1.4} Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ # source mirrors Err z3bra.org 70 i+ PCCMIRROR=ftp://pcc.ludd.ltu.se/pub/pcc-releases Err z3bra.org 70 i+ GNUMIRROR=ftp://ftp.gnu.org/gnu Err z3bra.org 70 i+ MUSLMIRROR=http://www.musl-libc.org/releases Err z3bra.org 70 i+ LINUXMIRROR=https://www.kernel.org/pub/linux/kernel/v4.x Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Preparing sources Err z3bra.org 70 i+ mkdir -p "${SRCDIR}" "${BLDDIR}" "${PREFIX}" Err z3bra.org 70 i+ cd "${SRCDIR}" Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # ┏━┓ Err z3bra.org 70 i+ # ┃┃┃ Err z3bra.org 70 i+ # ┗━┛╹ Err z3bra.org 70 i+ # Get all GNU tarballs Err z3bra.org 70 i+ grab_sources() { Err z3bra.org 70 i+ curl -# "${PCCMIRROR}/pcc-${PCCV}.tgz" | tar xz Err z3bra.org 70 i+ curl -# "${PCCMIRROR}/pcc-libs-${PCCV}.tgz" | tar xz Err z3bra.org 70 i+ curl -# "${GNUMIRROR}/binutils/binutils-${BINV}.tar.gz" | tar xz Err z3bra.org 70 i+ curl -# "${MUSLMIRROR}/musl-${MUSLV}.tar.gz" | tar xz Err z3bra.org 70 i+ curl -# "${LINUXMIRROR}/linux-${KERNV}.tar.xz" | tar xJ Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # ╺┓ Err z3bra.org 70 i+ # ┃ Err z3bra.org 70 i+ # ╺┻╸╹ Err z3bra.org 70 i+ # Patch all source trees. Err z3bra.org 70 i+ # This will take all patches in $PATCHD matching the programs Err z3bra.org 70 i+ patch_sources() { Err z3bra.org 70 i+ for DIR in $(find "${SRCDIR}" -maxdepth 1 -type d); do Err z3bra.org 70 i+ cd "${DIR}" Err z3bra.org 70 i+ cat "${PATCHD}/$(basename ${DIR})"-*.diff | patch -Np1 Err z3bra.org 70 i+ done Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # ┏━┓ Err z3bra.org 70 i+ # ┏━┛ Err z3bra.org 70 i+ # ┗━╸╹ Err z3bra.org 70 i+ # Get linux headers Err z3bra.org 70 i+ install_headers() { Err z3bra.org 70 i+ cd "${SRCDIR}/linux-${KERNV}" Err z3bra.org 70 i+ make ARCH=${MARCH} headers_check Err z3bra.org 70 i+ make ARCH=${MARCH} INSTALL_HDR_PATH=${PREFIX}/${TRIPLE} headers_install Err z3bra.org 70 i+ rm -r "${SRCDIR}/linux-${KERNV}" Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # ┏━┓ Err z3bra.org 70 i+ # ╺━┫ Err z3bra.org 70 i+ # ┗━┛╹ Err z3bra.org 70 i+ # Build binutils and install them to ${PREFIX} Err z3bra.org 70 i+ install_binutils() { Err z3bra.org 70 i+ mkdir -p "${BLDDIR}/binutils" Err z3bra.org 70 i+ cd "${BLDDIR}/binutils" Err z3bra.org 70 i+ ${SRCDIR}/binutils-${BINV}/configure --target=${TRIPLE} \ Err z3bra.org 70 i+ --prefix=${PREFIX} \ Err z3bra.org 70 i+ --with-sysroot=${PREFIX}/${TRIPLE} \ Err z3bra.org 70 i+ --disable-nls \ Err z3bra.org 70 i+ --disable-shared \ Err z3bra.org 70 i+ --disable-multilib Err z3bra.org 70 i+ make configure-host Err z3bra.org 70 i+ make LDFLAGS="${LDFLAGS} -all-static -static" Err z3bra.org 70 i+ make install Err z3bra.org 70 i+ rm -rf "${BLDDIR}/binutils" Err z3bra.org 70 i+ rm -rf "${SRCDIR}/binutils-${BINV}" Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # ╻ ╻ Err z3bra.org 70 i+ # ┗━┫ Err z3bra.org 70 i+ # ╹╹ Err z3bra.org 70 i+ # Build the musl libc Err z3bra.org 70 i+ install_musl() { Err z3bra.org 70 i+ cd "${SRCDIR}/musl-${MUSLV}" Err z3bra.org 70 i+ ./configure --prefix=${PREFIX}/${TRIPLE} \ Err z3bra.org 70 i+ --target=${TRIPLE} \ Err z3bra.org 70 i+ --disable-gcc-wrapper \ Err z3bra.org 70 i+ --disable-debug \ Err z3bra.org 70 i+ --disable-shared \ Err z3bra.org 70 i+ --disable-warning Err z3bra.org 70 i+ make LDFLAGS="${LDFLAGS}" Err z3bra.org 70 i+ make install Err z3bra.org 70 i+ rm -rf "${SRCDIR}/musl-${MUSLV}" Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # ┏━╸ Err z3bra.org 70 i+ # ┗━┓ Err z3bra.org 70 i+ # ┗━┛╹ Err z3bra.org 70 i+ # Build pcc linked against musl Err z3bra.org 70 i+ install_pcc() { Err z3bra.org 70 i+ mkdir -p "${BLDDIR}/pcc" Err z3bra.org 70 i+ mkdir -p "${BLDDIR}/pcc-libs" Err z3bra.org 70 i+ cd "${BLDDIR}/pcc" Err z3bra.org 70 i+ ${SRCDIR}/pcc-${PCCV}/configure --target=${TRIPLE} \ Err z3bra.org 70 i+ --with-libdir=${PREFIX}/${TRIPLE}/lib \ Err z3bra.org 70 i+ --with-incdir=${PREFIX}/${TRIPLE}/include \ Err z3bra.org 70 i+ --prefix=${PREFIX} Err z3bra.org 70 i+ Err z3bra.org 70 i+ make LDFLAGS="${LDFLAGS} -static" \ Err z3bra.org 70 i+ PCCLIBDIR=${PREFIX}/${TRIPLE}/pcc/lib \ Err z3bra.org 70 i+ PCCINCDIR=${PREFIX}/${TRIPLE}/pcc/include Err z3bra.org 70 i+ make PCCLIBDIR=${PREFIX}/${TRIPLE}/pcc/lib \ Err z3bra.org 70 i+ PCCINCDIR=${PREFIX}/${TRIPLE}/pcc/include \ Err z3bra.org 70 i+ install Err z3bra.org 70 i+ rm -rf "${BLDDIR}/pcc" Err z3bra.org 70 i+ rm -rf "${SRCDIR}/pcc-${PCCV}" Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # ┏━┓ Err z3bra.org 70 i+ # ┣━┓ Err z3bra.org 70 i+ # ┗━┛╹ Err z3bra.org 70 i+ # Build pcc libraries against musl Err z3bra.org 70 i+ install_pcc_libs() { Err z3bra.org 70 i+ cd "${BLDDIR}/pcc-libs" Err z3bra.org 70 i+ ${SRCDIR}/pcc-libs-${PCCV}/configure --target=${TRIPLE} \ Err z3bra.org 70 i+ --prefix=${PREFIX} Err z3bra.org 70 i+ Err z3bra.org 70 i+ make PCCLIBDIR=${PREFIX}/${TRIPLE}/pcc/lib \ Err z3bra.org 70 i+ PCCINCDIR=${PREFIX}/${TRIPLE}/pcc/include Err z3bra.org 70 i+ make PCCLIBDIR=${PREFIX}/${TRIPLE}/pcc/lib \ Err z3bra.org 70 i+ PCCINCDIR=${PREFIX}/${TRIPLE}/pcc/include \ Err z3bra.org 70 i+ install Err z3bra.org 70 i+ rm -rf "${BLDDIR}/pcc-libs" Err z3bra.org 70 i+ rm -rf "${SRCDIR}/pcc-libs-${PCCV}" Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ # Err z3bra.org 70 i+ # ┏━┓ Err z3bra.org 70 i+ # ┃ Err z3bra.org 70 i+ # ╹╹ Err z3bra.org 70 i+ # Add pkg-config wrapper Err z3bra.org 70 i+ install_pkgconfig() { Err z3bra.org 70 i+ cat << EOF > "${PREFIX}/bin/${TRIPLE}-pkg-config" Err z3bra.org 70 i+ #!/bin/sh Err z3bra.org 70 i+ export PKG_CONFIG_SYSROOT_DIR=${PREFIX}/${TRIPLE} Err z3bra.org 70 i+ export PKG_CONFIG_LIBDIR=${PREFIX}/${TRIPLE}/usr/lib/pkgconfig Err z3bra.org 70 i+ export PKG_CONFIG_PATH=\$PKG_CONFIG_LIBDIR Err z3bra.org 70 i+ Err z3bra.org 70 i+ exec pkg-config --static "\$@" Err z3bra.org 70 i+ EOF Err z3bra.org 70 i+ chmod 755 "${PREFIX}/bin/${TRIPLE}-pkg-config" Err z3bra.org 70 i+ } Err z3bra.org 70 i+ Err z3bra.org 70 i+ grab_sources Err z3bra.org 70 i+ patch_sources Err z3bra.org 70 i+ install_headers Err z3bra.org 70 i+ install_binutils Err z3bra.org 70 i+ install_musl Err z3bra.org 70 i+ install_pcc Err z3bra.org 70 i+ install_pcc_libs Err z3bra.org 70 i+ install_pkgconfig Err z3bra.org 70 i+ Err z3bra.org 70 i+ # clean environment Err z3bra.org 70 i+ rm -rf "${SRCDIR}" Err z3bra.org 70 i+ rm -rf "${BLDDIR}" Err z3bra.org 70 i+ rm -rf "${PREFIX}/share" Err z3bra.org 70 i+ rm -f "${PREFIX}/lib/libiberty.a" Err z3bra.org 70 i+ Err z3bra.org 70 i+ cat << EOF | tee ${PREFIX}/README Err z3bra.org 70 i+ TRIPLET : $TRIPLE Err z3bra.org 70 i+ PREFIX : $PREFIX Err z3bra.org 70 i+ PCC : $PCCV Err z3bra.org 70 i+ BINUTILS: $BINV Err z3bra.org 70 i+ MUSL : $MUSLV Err z3bra.org 70 i+ KERNEL : $KERNV Err z3bra.org 70 i+ EOF Err z3bra.org 70 i+ Err z3bra.org 70 i+The process is (in theory) pretty simple: Err z3bra.org 70 i+ Err z3bra.org 70 i+0. download and extract sources Err z3bra.org 70 i+1. patch everything Err z3bra.org 70 i+2. install linux headers Err z3bra.org 70 i+3. build binutils Err z3bra.org 70 i+4. build musl Err z3bra.org 70 i+5. build pcc/pcc-libs Err z3bra.org 70 i+6. (optionnal) add a pkg-config wrapper Err z3bra.org 70 i+ Err z3bra.org 70 i+### 1. grabbing sources Err z3bra.org 70 i+ Err z3bra.org 70 i+This part is pretty simple. You just need to choose which version of the Err z3bra.org 70 i+software you want to use. Here is my list at the time of writing: Err z3bra.org 70 i+ Err z3bra.org 70 i++ pcc : 1.1.0 Err z3bra.org 70 i++ binutils : 2.25 Err z3bra.org 70 i++ musl : 1.1.10 Err z3bra.org 70 i++ kernel : 4.1.4 Err z3bra.org 70 i+ Err z3bra.org 70 i+You can get the sources by following these links: Err z3bra.org 70 i+ Err z3bra.org 70 i+ftp://pcc.ludd.ltu.se/pub/pcc-releases Err z3bra.org 70 i+ftp://ftp.gnu.org/gnu Err z3bra.org 70 i+http://www.musl-libc.org/releases Err z3bra.org 70 i+https://www.kernel.org/pub/linux/kernel/v4.x Err z3bra.org 70 i+ Err z3bra.org 70 i+Once you have all your tarballs, extract them somewhere. Err z3bra.org 70 i+ Err z3bra.org 70 i+### 2. patch everything Err z3bra.org 70 i+ Err z3bra.org 70 i+Everything doesn't need patching, but when you're playing with musl, you'll Err z3bra.org 70 i+quickly realise how heavily softwares rely on the GNU libc. Err z3bra.org 70 i+ Err z3bra.org 70 i+GregorR did all the dirty job here, and provide Err z3bra.org 70 i+[patches](https://github.com/GregorR/musl-cross/tree/master/patches) for use Err z3bra.org 70 i+with cross-compilers to work with musl. Check what's in, and grab those you Err z3bra.org 70 i+might need. Err z3bra.org 70 i+ Err z3bra.org 70 i+The 1.1.0 version of pcc require some patching too, in order to work flawlessly Err z3bra.org 70 i+with an alternative libc. It *seems* to be fixed in 1.2.0 (DEVEL version), if Err z3bra.org 70 i+you're interrested. They fix the `configure` script to accept musl based Err z3bra.org 70 i+targets, and fix the default library pass of the compiler. Err z3bra.org 70 i+ Err z3bra.org 70 i+pcc-1.1.0-musl.diff Err z3bra.org 70 i+ Err z3bra.org 70 i+ diff -urN a/config.sub b/config.sub Err z3bra.org 70 i+ --- a/config.sub 2015-08-11 21:55:34.497619099 +0200 Err z3bra.org 70 i+ +++ b/config.sub 2015-08-11 21:56:21.652621262 +0200 Err z3bra.org 70 i+ @@ -120,7 +120,7 @@ Err z3bra.org 70 i+ # Here we must recognize all the valid KERNEL-OS combinations. Err z3bra.org 70 i+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` Err z3bra.org 70 i+ case $maybe_os in Err z3bra.org 70 i+ - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ Err z3bra.org 70 i+ + nto-qnx* | linux-gnu* | linux-dietlibc | linux-musl | linux-newlib* | linux-uclibc* | \ Err z3bra.org 70 i+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ Err z3bra.org 70 i+ storm-chaos* | os2-emx* | rtmk-nova*) Err z3bra.org 70 i+ os=-$maybe_os Err z3bra.org 70 i+ @@ -1289,6 +1289,9 @@ Err z3bra.org 70 i+ -linux-dietlibc) Err z3bra.org 70 i+ os=-linux-dietlibc Err z3bra.org 70 i+ ;; Err z3bra.org 70 i+ + -linux-musl) Err z3bra.org 70 i+ + os=-linux-musl Err z3bra.org 70 i+ + ;; Err z3bra.org 70 i+ -linux*) Err z3bra.org 70 i+ os=`echo $os | sed -e 's|linux|linux-gnu|'` Err z3bra.org 70 i+ ;; Err z3bra.org 70 i+ Err z3bra.org 70 i+pcc-libs-1.1.0-musl.diff Err z3bra.org 70 i+ diff -urN a/config.sub b/config.sub Err z3bra.org 70 i+ --- a/config.sub 2015-08-11 21:55:34.497619099 +0200 Err z3bra.org 70 i+ +++ b/config.sub 2015-08-11 21:56:21.652621262 +0200 Err z3bra.org 70 i+ @@ -120,7 +120,7 @@ Err z3bra.org 70 i+ # Here we must recognize all the valid KERNEL-OS combinations. Err z3bra.org 70 i+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` Err z3bra.org 70 i+ case $maybe_os in Err z3bra.org 70 i+ - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ Err z3bra.org 70 i+ + nto-qnx* | linux-gnu* | linux-dietlibc | linux-musl | linux-newlib* | linux-uclibc* | \ Err z3bra.org 70 i+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ Err z3bra.org 70 i+ storm-chaos* | os2-emx* | rtmk-nova*) Err z3bra.org 70 i+ os=-$maybe_os Err z3bra.org 70 i+ @@ -1289,6 +1289,9 @@ Err z3bra.org 70 i+ -linux-dietlibc) Err z3bra.org 70 i+ os=-linux-dietlibc Err z3bra.org 70 i+ ;; Err z3bra.org 70 i+ + -linux-musl) Err z3bra.org 70 i+ + os=-linux-musl Err z3bra.org 70 i+ + ;; Err z3bra.org 70 i+ -linux*) Err z3bra.org 70 i+ os=`echo $os | sed -e 's|linux|linux-gnu|'` Err z3bra.org 70 i+ ;; Err z3bra.org 70 i+ Err z3bra.org 70 i+pcc-1.1.0-deflibdirs.diff Err z3bra.org 70 i+ Err z3bra.org 70 i+ diff -urN a/cc/cc/cc.c b/cc/cc/cc.c Err z3bra.org 70 i+ --- a/cc/cc/cc.c 2015-08-16 16:00:18.867457413 +0200 Err z3bra.org 70 i+ +++ b/cc/cc/cc.c 2015-08-16 16:03:28.963466133 +0200 Err z3bra.org 70 i+ @@ -207,9 +207,9 @@ Err z3bra.org 70 i+ #endif Err z3bra.org 70 i+ #ifndef DEFLIBDIRS /* default library search paths */ Err z3bra.org 70 i+ #ifdef MULTIARCH_PATH Err z3bra.org 70 i+ -#define DEFLIBDIRS { "/usr/lib/", 0 } Err z3bra.org 70 i+ +#define DEFLIBDIRS { LIBDIR, 0 } Err z3bra.org 70 i+ #else Err z3bra.org 70 i+ -#define DEFLIBDIRS { "/usr/lib/", "/usr/lib/" MULTIARCH_PATH "/", 0 } Err z3bra.org 70 i+ +#define DEFLIBDIRS { LIBDIR, LIBDIR MULTIARCH_PATH "/", 0 } Err z3bra.org 70 i+ #endif Err z3bra.org 70 i+ #endif Err z3bra.org 70 i+ #ifndef DEFLIBS /* default libraries included */ Err z3bra.org 70 i+ diff -urN a/os/linux/ccconfig.h b/os/linux/ccconfig.h Err z3bra.org 70 i+ --- a/os/linux/ccconfig.h 2015-08-16 16:00:18.873457413 +0200 Err z3bra.org 70 i+ +++ b/os/linux/ccconfig.h 2015-08-16 16:05:23.446471384 +0200 Err z3bra.org 70 i+ @@ -48,9 +48,9 @@ Err z3bra.org 70 i+ "-D__amd64", "-D__LP64__", "-D_LP64", NULL, } Err z3bra.org 70 i+ #define DYNLINKER { "-dynamic-linker", "/lib64/ld-linux-x86-64.so.2", NULL } Err z3bra.org 70 i+ #ifndef MULTIARCH_PATH Err z3bra.org 70 i+ -#define DEFLIBDIRS { "/usr/lib64/", 0 } Err z3bra.org 70 i+ +#define DEFLIBDIRS { LIBDIR, 0 } Err z3bra.org 70 i+ #else Err z3bra.org 70 i+ -#define DEFLIBDIRS { "/usr/lib64/", "/usr/lib/" MULTIARCH_PATH "/", 0 } Err z3bra.org 70 i+ +#define DEFLIBDIRS { LIBDIR, LIBDIR MULTIARCH_PATH "/", 0 } Err z3bra.org 70 i+ #endif Err z3bra.org 70 i+ #elif defined(mach_mips) Err z3bra.org 70 i+ #define CPPMDADD { "-D__mips__", NULL, } Err z3bra.org 70 i+ Err z3bra.org 70 i+### 3,4,5,6. build everything Err z3bra.org 70 i+ Err z3bra.org 70 i+For this part, just check the appropriate sections in the original script. You Err z3bra.org 70 i+might want to enable shared libraries, or avoid compiling everything statically, Err z3bra.org 70 i+so tweak it however you want. Err z3bra.org 70 i+ Err z3bra.org 70 i+For PCC, the `PCCINCDIR` and `PCCLIBDIR` are important, as they will tell the Err z3bra.org 70 i+compiler where are the PCC libraries. The `--with-incdir` and `--with-libdir` Err z3bra.org 70 i+parameters are used to tell the compiler where to search for default libraries, Err z3bra.org 70 i+so make sure you set them properly. Err z3bra.org 70 i+ Err z3bra.org 70 i+### Enjoy! Err z3bra.org 70 i+ Err z3bra.org 70 i+You compiler should be ready to go! You can test it by running the following Err z3bra.org 70 i+snippet: Err z3bra.org 70 i+ Err z3bra.org 70 i+ $ echo 'main(){}' > dummy.c Err z3bra.org 70 i+ $ PATH="$HOME/cross/pcc-x86_64/bin:$PATH"; export PATH Err z3bra.org 70 i+ $ x86_64-linux-musl-pcc dummy.c Err z3bra.org 70 i+ Err z3bra.org 70 i+For the sake of the experience, I also built a gcc cross-compiler using the same Err z3bra.org 70 i+method, and tested both compilers on the [libressl](http://www.libressl.org) Err z3bra.org 70 i+code base. The packages are simply tar.bz2 archives of libressl installed on a Err z3bra.org 70 i+chroot (so there are only the libressl files): Err z3bra.org 70 i+ Err z3bra.org 70 i+ $ du -h libressl-*.pkg Err z3bra.org 70 i+ 8.1M libressl-gcc-2.1.6.pkg Err z3bra.org 70 i+ 8.9M libressl-glibc-2.1.6.pkg Err z3bra.org 70 i+ 4.4M libressl-pcc-2.1.6.pkg Err z3bra.org 70 i+ Err z3bra.org 70 i+Looks like we have a winner! Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 i+ Err z3bra.org 70 1diff --git a/config.mk b/config.mk /scm/monochromatic/file/config.mk.gph z3bra.org 70 it@@ -27,7 +27,8 @@ PAGES = index.html \ Err z3bra.org 70 i 2015/02/do-you-gopher.html \ Err z3bra.org 70 i 2015/03/under-wendys-dress.html \ Err z3bra.org 70 i 2015/04/the-wrong-sysadmin.html \ Err z3bra.org 70 i- 2015/06/vomiting-colors.html Err z3bra.org 70 i+ 2015/06/vomiting-colors.html \ Err z3bra.org 70 i+ 2015/08/cross-compiling-with-pcc-and-musl.html Err z3bra.org 70 i Err z3bra.org 70 i FEEDS = rss/feed.xml Err z3bra.org 70 i EXTRA = css img vid data errors favicon.ico Err z3bra.org 70 1diff --git a/index.txt b/index.txt /scm/monochromatic/file/index.txt.gph z3bra.org 70 it@@ -1,3 +1,4 @@ Err z3bra.org 70 i+* 0x0018 - [cross-compiling with PCC and musl](/2015/08/cross-compiling-with-pcc-and-musl.html) Err z3bra.org 70 i * 0x0017 - [Vomiting colors](/2015/06/vomiting-colors.html) Err z3bra.org 70 i * 0x0016 - [The wrong sysadmin](/2015/04/the-wrong-sysadmin.html) Err z3bra.org 70 i * 0x0015 - [Under Wendy's dress](/2015/03/under-wendys-dress.html) Err z3bra.org 70 .