Skip to content

Instantly share code, notes, and snippets.

@samm-git
Last active November 13, 2023 17:51
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samm-git/7470fbfedcc61f67af31e2df042e3810 to your computer and use it in GitHub Desktop.
Save samm-git/7470fbfedcc61f67af31e2df042e3810 to your computer and use it in GitHub Desktop.
FreeBSD crossbuild with GCC on Linux host
FROM ubuntu:latest
RUN apt-get update
# install dependencies
RUN apt-get install --yes gcc g++ bison make wget xz-utils
# Compile binutils
RUN mkdir /build && cd /build && \
wget https://ftp.gnu.org/gnu/binutils/binutils-2.29.tar.xz && \
tar -xf binutils-2.29.tar.xz && cd binutils-2.29 && \
./configure --enable-libssp --enable-gold --enable-ld \
--target=x86_64-pc-freebsd10 --prefix=/opt/cross-freebsd && make -j4 && \
make install && \
rm -rf /build && mkdir /build
# Get FreeBSD libs/headers, extract and fix broken links
RUN cd /build/ && \
wget http://ftp.plusline.de/FreeBSD/releases/amd64/10.4-RELEASE/base.txz && \
cd /opt/cross-freebsd/x86_64-pc-freebsd10 && \
tar -xf /build/base.txz ./lib/ ./usr/lib/ ./usr/include/ && \
cd /opt/cross-freebsd/x86_64-pc-freebsd10/usr/lib && \
find . -xtype l|xargs ls -l|grep ' /lib/' \
| awk '{print "ln -sf /opt/cross-freebsd/x86_64-pc-freebsd10"$11 " " $9}' \
| /bin/sh && \
rm -rf /build && mkdir /build
# Compile GMP
RUN cd /build && \
wget https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.xz && \
tar -xf gmp-6.1.2.tar.xz && \
cd gmp-6.1.2 && \
./configure --prefix=/opt/cross-freebsd --enable-shared --enable-static \
--enable-fft --enable-cxx --host=x86_64-pc-freebsd10 && \
make -j4 && make install && \
rm -rf /build && mkdir /build
# Compile MPFR
RUN cd /build && \
wget https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.6.tar.xz && tar -xf mpfr-3.1.6.tar.xz && \
cd mpfr-3.1.6 && \
./configure --prefix=/opt/cross-freebsd --with-gnu-ld --enable-static \
--enable-shared --with-gmp=/opt/cross-freebsd --host=x86_64-pc-freebsd10 && \
make -j4 && make install && \
rm -rf /build && mkdir /build
# Compile MPC
RUN cd /build && \
wget https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz && tar -xf mpc-1.0.3.tar.gz && \
cd mpc-1.0.3 && \
./configure --prefix=/opt/cross-freebsd --with-gnu-ld --enable-static \
--enable-shared --with-gmp=/opt/cross-freebsd \
--with-mpfr=/opt/cross-freebsd --host=x86_64-pc-freebsd10 && \
make -j4 && make install && \
rm -rf /build && mkdir /build
# 1. Configure GCC
# 2. Fix GCC for the failed aligned_alloc detection
# 3. Build and install
RUN cd /build && \
wget https://ftp.gnu.org/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.xz && \
tar xf gcc-7.2.0.tar.xz && \
cd gcc-7.2.0 && mkdir build && cd build && \
../configure --without-headers --with-gnu-as --with-gnu-ld --disable-nls \
--enable-languages=c,c++ --enable-libssp --enable-gold --enable-ld \
--disable-libitm --disable-libquadmath --target=x86_64-pc-freebsd10 \
--prefix=/opt/cross-freebsd --with-gmp=/opt/cross-freebsd \
--with-mpc=/opt/cross-freebsd --with-mpfr=/opt/cross-freebsd --disable-libgomp \
--with-sysroot=/opt/cross-freebsd/x86_64-pc-freebsd10 \
--with-build-sysroot=/opt/cross-freebsd/x86_64-pc-freebsd10 && \
cd /build/gcc-7.2.0 && \
echo '#define HAVE_ALIGNED_ALLOC 1' >> libstdc++-v3/config.h.in && \
cd /build/gcc-7.2.0/build && \
make -j4 && make install && \
rm -rf /build
## Configure run
## ./configure CC=/opt/cross-freebsd/bin/x86_64-pc-freebsd10-gcc CXX=/opt/cross-freebsd/bin/x86_64-pc-freebsd10-g++ \
## --host=x86_64-pc-freebsd10 LDFLAGS="-nodefaultlibs -lc++ -lm -lc -lgcc_s -lgcc" \
## CXXFLAGS="-std=c++11 -I/opt/cross-freebsd/x86_64-pc-freebsd10/usr/include/c++/v1 -nostdinc++"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment