FROM alpine:latest # Install ccache along with other dependencies RUN apk add --no-cache \ bash \ binutils \ binutils-dev \ build-base \ bzip2 \ bzip2-dev \ ccache \ cmake \ curl \ elfutils \ elfutils-dev \ elfutils-libelf \ g++ \ git \ libdwarf \ libdwarf-dev \ libunwind \ libunwind-dev \ libunwind-static \ linux-headers \ mold \ musl \ musl-dev \ ncurses-dev \ ninja \ perl \ pipx \ pkgconf \ pkgconfig \ # Removed SQLite3 packages since we'll build it from source util-linux-dev \ util-linux-static \ xz \ xz-dev \ xz-libs \ xz-static \ zlib-dev \ zlib-static SHELL ["/bin/bash", "-c"] ARG CARES_VERSION=1.34.5 WORKDIR /tmp RUN curl -LO https://github.com/c-ares/c-ares/releases/download/v${CARES_VERSION}/c-ares-${CARES_VERSION}.tar.gz && \ tar zxvf c-ares-${CARES_VERSION}.tar.gz && \ cd c-ares-${CARES_VERSION} && \ ./configure --enable-static --disable-shared --prefix=/usr/local/cares && \ make -j$(nproc) && \ make install && \ cd / && rm -rf /tmp/c-ares-${CARES_VERSION} /tmp/c-ares-${CARES_VERSION}.tar.gz # Build OpenSSL statically with musl ARG OPENSSL_VERSION=3.3.0 WORKDIR /tmp RUN curl -LO https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz && \ tar xzf openssl-${OPENSSL_VERSION}.tar.gz && \ cd openssl-${OPENSSL_VERSION} && \ ./Configure no-shared no-dso no-tests no-async linux-x86_64 \ --prefix=/usr/local/openssl-musl \ -static -fPIC && \ make -j$(nproc) && \ make install_sw && \ cd / && rm -rf /tmp/openssl-${OPENSSL_VERSION} /tmp/openssl-${OPENSSL_VERSION}.tar.gz # Build jsoncpp statically with musl ARG JSONCPP_VERSION=1.9.6 WORKDIR /tmp RUN curl -LO https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/${JSONCPP_VERSION}.tar.gz && \ tar xzf ${JSONCPP_VERSION}.tar.gz && \ cd jsoncpp-${JSONCPP_VERSION} && \ mkdir build && cd build && \ cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=/usr/local/jsoncpp && \ make -j$(nproc) && \ make install && \ cd / && rm -rf /tmp/jsoncpp-${JSONCPP_VERSION} /tmp/${JSONCPP_VERSION}.tar.gz RUN ls /usr/local/jsoncpp/include/json/version.h # Build libpq statically ARG POSTGRES_VERSION=16.2 WORKDIR /tmp RUN curl -LO https://ftp.postgresql.org/pub/source/v${POSTGRES_VERSION}/postgresql-${POSTGRES_VERSION}.tar.gz && \ tar xzf postgresql-${POSTGRES_VERSION}.tar.gz && \ cd postgresql-${POSTGRES_VERSION} && \ ./configure --prefix=/usr/local/pgsql --without-readline --without-zlib --without-icu --enable-static --disable-shared && \ make -j$(nproc) && \ make -C src/interfaces/libpq install && \ make install && \ cd / && rm -rf /tmp/postgresql-${POSTGRES_VERSION} /tmp/postgresql-${POSTGRES_VERSION}.tar.gz RUN ls /usr/local/pgsql/include/pg_config.h ARG CURL_VERSION=8.7.1 WORKDIR /tmp RUN curl -LO https://curl.se/download/curl-${CURL_VERSION}.tar.gz && \ tar xzf curl-${CURL_VERSION}.tar.gz && \ cd curl-${CURL_VERSION} && \ ./configure --disable-shared --enable-static --with-ssl=/usr/local/openssl-musl --prefix=/usr/local/curl && \ make -j$(nproc) && \ make install && \ cd / && rm -rf /tmp/curl-${CURL_VERSION} /tmp/curl-${CURL_VERSION}.tar.gz ARG MARIADB_CONNECTOR_VERSION=3.4.5 WORKDIR /tmp RUN curl -LO https://downloads.mariadb.com/Connectors/c/connector-c-${MARIADB_CONNECTOR_VERSION}/mariadb-connector-c-${MARIADB_CONNECTOR_VERSION}-src.tar.gz && \ tar xzf mariadb-connector-c-${MARIADB_CONNECTOR_VERSION}-src.tar.gz && \ cd mariadb-connector-c-${MARIADB_CONNECTOR_VERSION}-src && \ cmake . \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-connector-c \ -DWITH_SSL=OPENSSL \ -DWITH_STATIC=ON \ -DOPENSSL_ROOT_DIR=/usr/local/openssl-musl \ -DOPENSSL_USE_STATIC_LIBS=TRUE \ -DCURL_INCLUDE_DIR=/usr/local/curl/include \ -DCURL_LIBRARY=/usr/local/curl/lib/libcurl.a \ -DWITH_SHARED=OFF \ -DWITH_MYSQL=ON && \ make -j$(nproc) && \ make install && \ cd / && rm -rf /tmp/mariadb-connector-c-${MARIADB_CONNECTOR_VERSION}-src /tmp/mariadb-connector-c-${MARIADB_CONNECTOR_VERSION}-src.tar.gz # Build SQLite3 from source WORKDIR /tmp RUN wget https://www.sqlite.org/2024/sqlite-autoconf-3450000.tar.gz && \ tar xzf sqlite-autoconf-3450000.tar.gz && \ cd sqlite-autoconf-3450000 && \ ./configure --enable-static --disable-shared --prefix=/usr/local/sqlite3 && \ make && \ make install && \ cd .. && rm -rf sqlite-autoconf-3450000* # Build MySQL statically ARG MYSQL_VERSION=8.0.36 WORKDIR /tmp RUN curl -LO https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-${MYSQL_VERSION}.tar.gz && \ tar xzf mysql-${MYSQL_VERSION}.tar.gz && \ cd mysql-${MYSQL_VERSION} && \ mkdir -p boost && \ curl -L https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2 | tar xj -C boost && \ mkdir build && cd build && \ cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DWITH_SYSTEM_LIBS=OFF \ -DWITH_UNIT_TESTS=OFF \ -DWITH_EMBEDDED_SERVER=OFF \ -DWITH_INNODB_MEMCACHED=OFF \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBEVENT=system \ -DWITH_SSL=/usr/local/openssl-musl \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DWITH_BOOST=/tmp/mysql-${MYSQL_VERSION}/boost && \ make -j$(nproc) && \ make install && \ cd / && rm -rf /tmp/mysql-${MYSQL_VERSION} /tmp/mysql-${MYSQL_VERSION}.tar.gz #ARG DROGON_VERSION=1.9.5 WORKDIR /tmp RUN git clone --recurse-submodules https://github.com/drogonframework/drogon.git /tmp/drogon && \ #RUN git clone --branch v${DROGON_VERSION} --depth 1 https://github.com/drogonframework/drogon.git /tmp/drogon && \ mkdir -p /tmp/drogon/build && \ cd /tmp/drogon/build && \ cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DCMAKE_CXX_FLAGS="-static -static-libgcc -static-libstdc++" \ -DCMAKE_EXE_LINKER_FLAGS="-static" \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \ -DUSE_MONGODB=OFF \ -DUSE_POSTGRESQL=ON \ -DUSE_MYSQL=ON \ -DUSE_SQLITE3=ON \ -DBUILD_EXAMPLES=OFF \ -DBUILD_TESTING=OFF \ -DUUID_LIBRARY=/usr/lib/libuuid.a \ -DOPENSSL_ROOT_DIR=/usr/local/openssl-musl \ -DOPENSSL_USE_STATIC_LIBS=TRUE \ -DCARES_INCLUDE_DIR=/usr/local/cares/include \ -DCARES_LIBRARY=/usr/local/cares/lib/libcares.a \ -DJSONCPP_INCLUDE_DIRS=/usr/local/jsoncpp/include \ -DJSONCPP_LIBRARIES=/usr/local/jsoncpp/lib/libjsoncpp.a \ -DPostgreSQL_INCLUDE_DIR=/usr/local/pgsql/include \ -DPostgreSQL_LIBRARY=/usr/local/pgsql/lib/libpq.a \ -DMYSQL_INCLUDE_DIR=/usr/local/mysql/include \ -DMYSQL_LIBRARIES=/usr/local/mysql/lib/libmysqlclient.a \ -DSQLITE3_LIBRARY=/usr/local/sqlite3/lib/libsqlite3.a \ -DSQLITE3_INCLUDE_DIR=/usr/local/sqlite3/include \ -DSQLITE3_STATIC=ON \ &&\ make -j$(nproc) && \ make install && \ cd / && rm -rf /tmp/drogon