Skip to content

Commit

Permalink
Update Linux external libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
tmp64 committed Nov 26, 2023
1 parent 6c0096e commit 3cb2a7d
Show file tree
Hide file tree
Showing 180 changed files with 61,259 additions and 678 deletions.
100 changes: 56 additions & 44 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -408,11 +408,11 @@ if( USE_UPDATER )
if( NOT HAS_STD_FILESYSTEM )
message( FATAL_ERROR "Updater requires support for std::filesystem." )
endif()

option( CURL_STATICLIB "Enable if cURL was built as a static library" 0 )
option( CURL_REPO_LIBS "Use static curl from external/curl" 1 )


if( WIN32 )
option( CURL_STATICLIB "Enable if cURL was built as a static library" 0 )
option( CURL_REPO_LIBS "Use static curl from external/curl" 1 )

if( CURL_REPO_LIBS )
set( CURL_STATICLIB 1 CACHE BOOL "" FORCE )
set( CURL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/curl/include" CACHE PATH "" FORCE )
Expand All @@ -422,51 +422,63 @@ if( USE_UPDATER )
endif()

find_package( libzip REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/external/libzip/lib/cmake" NO_DEFAULT_PATH )
else()
if( CURL_REPO_LIBS )
set( CURL_STATICLIB 1 CACHE BOOL "" FORCE )
set( CURL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/curl_linux/include" CACHE PATH "" FORCE )
set( CURL_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/external/curl_linux/lib/libcurl.a" CACHE FILEPATH "" FORCE )
endif()

find_package( ZLIB REQUIRED )
find_package( OpenSSL REQUIRED )
find_package( libzip REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/external/libzip_linux/lib/cmake" NO_DEFAULT_PATH )

set( UPDATER_LIBS OpenSSL::Crypto OpenSSL::SSL OpenSSL::Crypto OpenSSL::SSL )
endif()

find_package( CURL MODULE REQUIRED )
set( UPDATER_LIBS
${CURL_LIBRARIES}
${UPDATER_LIBS}
nlohmann_json
libzip::zip
)

set( UPDATER_INCLUDE_PATHS
${CURL_INCLUDE_DIRS}
)

set( UPDATER_DEFINES
USE_UPDATER=1
)

if( CURL_STATICLIB )

find_package( CURL MODULE REQUIRED )
set( UPDATER_LIBS
${CURL_LIBRARIES}
${UPDATER_LIBS}
nlohmann_json
libzip::zip
)

set( UPDATER_INCLUDE_PATHS
${CURL_INCLUDE_DIRS}
)

set( UPDATER_DEFINES
${UPDATER_DEFINES}
CURL_STATICLIB=1
USE_UPDATER=1
)
if( WIN32 )
set( UPDATER_LIBS
${UPDATER_LIBS}
wldap32.lib
Crypt32.lib
Ws2_32.lib

if( CURL_STATICLIB )
set( UPDATER_DEFINES
${UPDATER_DEFINES}
CURL_STATICLIB=1
)
if( WIN32 )
set( UPDATER_LIBS
${UPDATER_LIBS}
wldap32.lib
Crypt32.lib
Ws2_32.lib
)
endif()
endif()
else()
set( LINUX_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/linux")

# FIXME 2023-11-26: CMake completely ignores this directory.
# FIXME 2023-11-26: But the system library works just fine
# set( ZLIB_INCLUDE_DIRS "${LINUX_LIB_PATH}/zlib/include" )
# set( ZLIB_LIBRARIES "${LINUX_LIB_PATH}/zlib/lib/libz.a" )
# set( ZLIB_USE_STATIC_LIBS ON )
# find_package( ZLIB REQUIRED )

set( libzip_DIR "${LINUX_LIB_PATH}/libzip/lib/cmake/libzip" )
find_package( libzip REQUIRED NO_DEFAULT_PATH )

set( MbedTLS_DIR "${LINUX_LIB_PATH}/mbedtls/lib/cmake/MbedTLS" )
find_package( MbedTLS REQUIRED NO_DEFAULT_PATH )

set( CURL_DIR "${LINUX_LIB_PATH}/libcurl/lib/cmake/CURL" )
find_package( CURL REQUIRED NO_DEFAULT_PATH )

set( UPDATER_LIBS
ZLIB::ZLIB
libzip::zip
MbedTLS::mbedtls
CURL::libcurl
)
endif()

endif()

#-----------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions containers/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
out
53 changes: 53 additions & 0 deletions containers/linux/Dockerfile.bhl-build
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
FROM ubuntu:18.04

ENV BUILD_DATE="2023-11-26.1"
ENV CMAKE_VERSION="3.27.8"

# Update the system
RUN dpkg --add-architecture i386
RUN apt-get update
RUN apt-get dist-upgrade

# Add custom repos
RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:ubuntu-toolchain-r/test

# Install dependencies
RUN apt-get update
RUN apt-get install -y \
libc6:i386 \
gcc-9-multilib \
g++-9-multilib \
ninja-build \
make \
build-essential \
curl

# Build cmake
WORKDIR /build/cmake

RUN apt-get install -y \
libssl-dev

RUN curl -f -L \
https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz \
-o cmake.tar.gz
RUN tar -xvf cmake.tar.gz

WORKDIR cmake-${CMAKE_VERSION}
RUN ./bootstrap && \
make -j`nproc` && \
make install && \
cd .. && \
rm -rf cmake-${CMAKE_VERSION}

# Use GCC 9
ENV CC=gcc-9
ENV CXX=g++-9

# Copy toolchain files
COPY cmake/. /opt/bhl/cmake/
ENV CMAKE_MODULE_PATH=/opt/bhl/cmake
ENV BHL_TOOLCHAIN=${CMAKE_MODULE_PATH}/ToolchainLinuxGCC9.cmake
ENV BHL_PREFIX_PATH=/opt/bhl/prefix
ENV CMAKE_PREFIX_PATH=${BHL_PREFIX_PATH}
39 changes: 39 additions & 0 deletions containers/linux/Dockerfile.bhl-build-libcurl
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
FROM bhl-build

ENV BUILD_DATE="2023-11-26.1"
ENV LIBZIP_VERSION="8.4.0"

# Download and extract
WORKDIR /build/libzip

RUN curl -f -L \
https://curl.se/download/curl-${LIBZIP_VERSION}.tar.xz \
-o libcurl.tar.xz

RUN tar -xvf libcurl.tar.xz

# Copy dependencies
COPY out/zlib/. ${BHL_PREFIX_PATH}
COPY out/mbedtls/. ${BHL_PREFIX_PATH}

# Build
WORKDIR curl-${LIBZIP_VERSION}/_build
RUN cmake .. \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE=${BHL_TOOLCHAIN} \
-DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/opt/bhl/prefix-out \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_CURL_EXE=OFF \
-DBUILD_STATIC_CURL=ON \
-DBUILD_STATIC_LIBS=ON \
-DBUILD_TESTING=OFF \
-DCURL_ENABLE_SSL=ON \
-DCURL_USE_OPENSSL=OFF \
-DCURL_USE_MBEDTLS=ON \
-DCURL_ZLIB=ON \
-DUSE_LIBIDN2=OFF

RUN cmake --build . && cmake --install .
41 changes: 41 additions & 0 deletions containers/linux/Dockerfile.bhl-build-libzip
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
FROM bhl-build

ENV BUILD_DATE="2023-11-26.1"
ENV LIBZIP_VERSION="1.10.1"

# Download and extract
WORKDIR /build/libzip

RUN curl -f -L \
https://libzip.org/download/libzip-${LIBZIP_VERSION}.tar.xz \
-o libzip.tar.xz

RUN tar -xvf libzip.tar.xz

# Copy dependencies
COPY out/zlib/. ${BHL_PREFIX_PATH}

# Build
WORKDIR libzip-${LIBZIP_VERSION}/_build
RUN cmake .. \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE=${BHL_TOOLCHAIN} \
-DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/opt/bhl/prefix-out \
-DBUILD_DOC=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_REGRESS=OFF \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TOOLS=OFF \
-DENABLE_BZIP2=OFF \
-DENABLE_COMMONCRYPTO=OFF \
-DENABLE_GNUTLS=OFF \
-DENABLE_LZMA=OFF \
-DENABLE_MBEDTLS=OFF \
-DENABLE_OPENSSL=OFF \
-DENABLE_WINDOWS_CRYPTO=OFF \
-DENABLE_ZSTD=OFF

RUN cmake --build . && cmake --install .
34 changes: 34 additions & 0 deletions containers/linux/Dockerfile.bhl-build-mbedtls
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
FROM bhl-build

ENV BUILD_DATE="2023-11-26.1"
ENV MBEDTLS_VERSION="3.5.1"

# Download and extract
WORKDIR /build/mbedtls

RUN curl -f -L \
https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${MBEDTLS_VERSION}.tar.gz \
-o mbedtls.tar.xz

RUN tar -xvf mbedtls.tar.xz

# Copy custom config
WORKDIR mbedtls-${MBEDTLS_VERSION}/_build
COPY mbedtls_config_bhl.h .

# Build
RUN cmake .. \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE=${BHL_TOOLCHAIN} \
-DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DBUILD_SHARED_LIBS=OFF \
-DENABLE_PROGRAMS=OFF \
-DENABLE_TESTING=OFF \
-DUSE_SHARED_MBEDTLS_LIBRARY=OFF \
-DUSE_STATIC_MBEDTLS_LIBRARY=ON \
-DCMAKE_INSTALL_PREFIX=/opt/bhl/prefix-out \
-DMBEDTLS_USER_CONFIG_FILE=./mbedtls_config_bhl.h

RUN cmake --build . && cmake --install .
28 changes: 28 additions & 0 deletions containers/linux/Dockerfile.bhl-build-zlib
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
FROM bhl-build

# FIXME 2023-11-26: CMake 3.26.4 (bundled with CLion) doesn't support 1.3
# https://gitlab.kitware.com/cmake/cmake/-/issues/25200
ENV BUILD_DATE="2023-11-26.1"
ENV ZLIB_VERSION="1.2.13"

# Download and extract
WORKDIR /build/zlib

RUN curl -f -L \
https://www.zlib.net/fossils/zlib-${ZLIB_VERSION}.tar.gz \
-o zlib.tar.gz

RUN tar -xvf zlib.tar.gz

# Build
WORKDIR zlib-${ZLIB_VERSION}/_build
RUN cmake .. \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE=${BHL_TOOLCHAIN} \
-DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX=/opt/bhl/prefix-out

RUN cmake --build . && cmake --install .
7 changes: 7 additions & 0 deletions containers/linux/README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Build order:
0. rm -rf out
1. create-bhl-build.sh
2. build-zlib.sh
3. build-libzip.sh
4. build-mbedtls.sh
5. build-bhl.sh
20 changes: 20 additions & 0 deletions containers/linux/build-libcurl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash

set -e

IMAGE_TAG="bhl-build-libcurl"
TEMP_CONT="${IMAGE_TAG}-temp"
DOCKERFILE="Dockerfile.$IMAGE_TAG"
OUT_DIR="out/libcurl"

mkdir -p $OUT_DIR

docker buildx build -f $DOCKERFILE -t $IMAGE_TAG .
docker container create --name $TEMP_CONT $IMAGE_TAG
docker container cp ${TEMP_CONT}:/opt/bhl/prefix-out/. $OUT_DIR
docker container rm ${TEMP_CONT}

# Fix MbedTLS linking
sed -i 's\/opt/bhl/prefix/lib/libmbedtls.a\MbedTLS::mbedtls\g' $OUT_DIR/lib/cmake/CURL/CURLTargets.cmake
sed -i 's\/opt/bhl/prefix/lib/libmbedx509.a\MbedTLS::mbedx509\g' $OUT_DIR/lib/cmake/CURL/CURLTargets.cmake
sed -i 's\/opt/bhl/prefix/lib/libmbedcrypto.a\MbedTLS::mbedcrypto\g' $OUT_DIR/lib/cmake/CURL/CURLTargets.cmake
15 changes: 15 additions & 0 deletions containers/linux/build-libzip.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

set -e

IMAGE_TAG="bhl-build-libzip"
TEMP_CONT="${IMAGE_TAG}-temp"
DOCKERFILE="Dockerfile.$IMAGE_TAG"
OUT_DIR="out/libzip"

mkdir -p $OUT_DIR

docker buildx build -f $DOCKERFILE -t $IMAGE_TAG .
docker container create --name $TEMP_CONT $IMAGE_TAG
docker container cp ${TEMP_CONT}:/opt/bhl/prefix-out/. $OUT_DIR
docker container rm ${TEMP_CONT}
15 changes: 15 additions & 0 deletions containers/linux/build-mbedtls.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

set -e

IMAGE_TAG="bhl-build-mbedtls"
TEMP_CONT="${IMAGE_TAG}-temp"
DOCKERFILE="Dockerfile.$IMAGE_TAG"
OUT_DIR="out/mbedtls"

mkdir -p $OUT_DIR

docker buildx build -f $DOCKERFILE -t $IMAGE_TAG .
docker container create --name $TEMP_CONT $IMAGE_TAG
docker container cp ${TEMP_CONT}:/opt/bhl/prefix-out/. $OUT_DIR
docker container rm ${TEMP_CONT}
15 changes: 15 additions & 0 deletions containers/linux/build-zlib.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

set -e

IMAGE_TAG="bhl-build-zlib"
TEMP_CONT="${IMAGE_TAG}-temp"
DOCKERFILE="Dockerfile.$IMAGE_TAG"
OUT_DIR="out/zlib"

mkdir -p $OUT_DIR

docker buildx build -f $DOCKERFILE -t $IMAGE_TAG .
docker container create --name $TEMP_CONT $IMAGE_TAG
docker container cp ${TEMP_CONT}:/opt/bhl/prefix-out/. $OUT_DIR
docker container rm ${TEMP_CONT}
Loading

0 comments on commit 3cb2a7d

Please sign in to comment.