8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 02:03:04 +01:00
firebird-mirror/builds/docker/linux/x86-x64/Dockerfile
2024-04-18 22:04:22 -03:00

230 lines
7.0 KiB
Docker

ARG ARG_BASE=debian:bookworm
ARG ARG_SET_ARCH=x86_64
ARG ARG_TARGET_ARCH=x86_64-pc-linux-gnu
ARG ARG_CTNF_CONFIG=crosstool-ng-config-x64
ARG ARG_CTNG_VERSION=1.26.0
ARG ARG_LIBTOOL_VERSION=2.4.6
ARG ARG_NCURSES_VERSION=6.3
ARG ARG_LTM_VERSION=1.2.0
ARG ARG_ZLIB_VERSION=1.3.1
ARG ARG_ICU_VERSION=70-1
ARG ARG_CPUCOUNT=24
ARG ARG_CTNG_UID=1000
ARG ARG_CTNG_GID=1000
FROM $ARG_BASE as builder
ARG ARG_SET_ARCH
ARG ARG_TARGET_ARCH
ARG ARG_CTNF_CONFIG
ARG ARG_CTNG_VERSION
ARG ARG_LIBTOOL_VERSION
ARG ARG_NCURSES_VERSION
ARG ARG_LTM_VERSION
ARG ARG_ZLIB_VERSION
ARG ARG_ICU_VERSION
ARG ARG_CPUCOUNT
ARG ARG_CTNG_UID
ARG ARG_CTNG_GID
RUN groupadd -g $ARG_CTNG_GID ctng && \
useradd -d /home/ctng -m -g $ARG_CTNG_GID -u $ARG_CTNG_UID -s /bin/bash ctng && \
\
{ echo 'tzdata tzdata/Areas select Etc'; echo 'tzdata tzdata/Zones/Etc select UTC'; } | debconf-set-selections && \
\
apt-get update && \
apt-get -y install \
sudo \
automake \
bison \
bzip2 \
chrpath \
flex \
gcc \
g++ \
git \
gperf \
gawk \
help2man \
libexpat1-dev \
libncurses5-dev \
libsdl1.2-dev \
libtool \
libtool-bin \
libtool-doc \
python3-dev \
texinfo \
make \
curl \
wget \
unzip \
xz-utils \
nano && \
\
adduser ctng sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER ctng
RUN mkdir ~/build && \
curl -SL --output ~/build/icu4c-${ARG_ICU_VERSION}-src.tgz https://github.com/unicode-org/icu/releases/download/release-${ARG_ICU_VERSION}/icu4c-`echo ${ARG_ICU_VERSION} | tr - _`-src.tgz && \
curl -SL --output ~/build/ncurses-${ARG_NCURSES_VERSION}.tar.gz https://ftp.gnu.org/pub/gnu/ncurses/ncurses-${ARG_NCURSES_VERSION}.tar.gz && \
curl -SL --output ~/build/libtool-${ARG_LIBTOOL_VERSION}.tar.gz https://ftpmirror.gnu.org/libtool/libtool-${ARG_LIBTOOL_VERSION}.tar.gz && \
curl -SL --output ~/build/ltm-${ARG_LTM_VERSION}.tar.xz https://github.com/libtom/libtommath/releases/download/v${ARG_LTM_VERSION}/ltm-${ARG_LTM_VERSION}.tar.xz && \
curl -SL --output ~/build/zlib-${ARG_ZLIB_VERSION}.tar.gz https://zlib.net/zlib-${ARG_ZLIB_VERSION}.tar.gz
ADD --chown=ctng:ctng $ARG_CTNF_CONFIG /tmp/crosstool-ng-config
RUN cd && \
mkdir src && \
git clone https://github.com/crosstool-ng/crosstool-ng.git && \
cd crosstool-ng && \
git checkout -b branch crosstool-ng-${ARG_CTNG_VERSION} && \
./bootstrap && \
./configure --enable-local && \
make && \
mv /tmp/crosstool-ng-config .config && \
cd ~/crosstool-ng && \
setarch $ARG_SET_ARCH ./ct-ng build.${ARG_CPUCOUNT}
RUN sudo apt-get -y remove \
autoconf \
automake \
binutils \
cpp \
gcc \
g++ \
binutils \
libtool \
git \
libtommath1 \
libtommath-dev \
libtomcrypt1 \
libtomcrypt-dev && \
sudo rm -rf /var/lib/apt/lists/*
ENV PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:${PATH}"
RUN cd ~/build && \
mkdir -p libtool-${ARG_LIBTOOL_VERSION}-src && \
tar xvf libtool-${ARG_LIBTOOL_VERSION}.tar.gz --strip 1 -C libtool-${ARG_LIBTOOL_VERSION}-src && \
rm libtool-${ARG_LIBTOOL_VERSION}.tar.gz && \
mkdir libtool-${ARG_LIBTOOL_VERSION}-build && \
cd libtool-${ARG_LIBTOOL_VERSION}-build && \
../libtool-${ARG_LIBTOOL_VERSION}-src/configure \
--host=${ARG_TARGET_ARCH} \
--prefix=/home/ctng/x-tools/${ARG_TARGET_ARCH} && \
make -j${ARG_CPUCOUNT} && \
make install
RUN cd ~/build && \
mkdir -p ncurses-${ARG_NCURSES_VERSION}-src && \
tar xvf ncurses-${ARG_NCURSES_VERSION}.tar.gz --strip 1 -C ncurses-${ARG_NCURSES_VERSION}-src && \
rm ncurses-${ARG_NCURSES_VERSION}.tar.gz && \
mkdir ncurses-${ARG_NCURSES_VERSION}-build && \
cd ncurses-${ARG_NCURSES_VERSION}-build && \
../ncurses-${ARG_NCURSES_VERSION}-src/configure \
--host=${ARG_TARGET_ARCH} \
--prefix=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr \
--bindir=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin \
--libdir=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib \
--enable-overwrite \
--disable-db-install \
--disable-termcap \
--without-ada \
--without-cxx \
--without-cxx-binding \
--without-develop \
--without-tests \
--without-progs \
--with-default-terminfo-dir=/etc/terminfo \
--with-terminfo-dirs="/etc/terminfo:/lib/terminfo:/usr/share/terminfo" && \
make -j${ARG_CPUCOUNT} && \
make install
RUN cd ~/build && \
mkdir -p ltm-${ARG_LTM_VERSION}-src && \
tar xvf ltm-${ARG_LTM_VERSION}.tar.xz --strip 1 -C ltm-${ARG_LTM_VERSION}-src && \
rm ltm-${ARG_LTM_VERSION}.tar.xz && \
cd ltm-${ARG_LTM_VERSION}-src && \
CC=${ARG_TARGET_ARCH}-gcc AR=${ARG_TARGET_ARCH}-ar make \
-C ../ltm-${ARG_LTM_VERSION}-src \
-f makefile.shared \
-j${ARG_CPUCOUNT} && \
make install \
-f makefile.shared \
DESTDIR=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot \
INCPATH=/usr/include \
AR=${ARG_TARGET_ARCH}-ar \
RANLIB=${ARG_TARGET_ARCH}-ranlib
RUN cd ~/build && \
mkdir zlib-${ARG_ZLIB_VERSION}-src && \
tar xvf zlib-${ARG_ZLIB_VERSION}.tar.gz --strip 1 -C zlib-${ARG_ZLIB_VERSION}-src && \
rm zlib-${ARG_ZLIB_VERSION}.tar.gz && \
mkdir zlib-${ARG_ZLIB_VERSION}-build && \
cd zlib-${ARG_ZLIB_VERSION}-build && \
CROSS_PREFIX=${ARG_TARGET_ARCH}- ../zlib-${ARG_ZLIB_VERSION}-src/configure \
--prefix=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr \
--libdir=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib \
--enable-shared && \
make -j${ARG_CPUCOUNT} && \
make install
RUN cd ~/build && \
mkdir icu4c-${ARG_ICU_VERSION}-src && \
tar xvf icu4c-${ARG_ICU_VERSION}-src.tgz --strip 1 -C icu4c-${ARG_ICU_VERSION}-src && \
mkdir icu4c-${ARG_ICU_VERSION}-build && \
cd icu4c-${ARG_ICU_VERSION}-build && \
CXXFLAGS='-std=c++17 -static-libstdc++' setarch $ARG_SET_ARCH ../icu4c-${ARG_ICU_VERSION}-src/source/runConfigureICU \
Linux \
--host=${ARG_TARGET_ARCH} \
--prefix=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local \
--includedir=/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/include && \
setarch $ARG_SET_ARCH make -j${ARG_CPUCOUNT} && \
setarch $ARG_SET_ARCH make install
FROM $ARG_BASE
ARG ARG_TARGET_ARCH
ARG ARG_SET_ARCH
ARG ARG_CTNG_UID
ARG ARG_CTNG_GID
RUN apt-get update && \
apt-get -y install \
cmake \
libfile-copy-recursive-perl \
unzip \
xz-utils && \
rm -rf /var/lib/apt/lists/*
RUN groupadd -g $ARG_CTNG_GID ctng && \
useradd -d /home/ctng -m -g $ARG_CTNG_GID -u $ARG_CTNG_UID -s /bin/bash ctng
USER ctng
RUN chmod o=u /home/ctng
COPY --from=builder --chown=ctng:ctng /home/ctng/x-tools /home/ctng/x-tools
COPY --chown=ctng:ctng scripts/* /
ENV PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/bin:/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/bin:${PATH}"
ENV LIBRARY_PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib"
ENV LD_LIBRARY_PATH "/home/ctng/x-tools/${ARG_TARGET_ARCH}/${ARG_TARGET_ARCH}/sysroot/usr/local/lib"
ENV BUILD_ARCH=$ARG_TARGET_ARCH
ENV SET_ARCH=$ARG_SET_ARCH
WORKDIR /firebird
ENTRYPOINT ["/entry.sh"]