Skip to content

Commit

Permalink
Merge branch 'feature/update-libs' into feature/build-9891
Browse files Browse the repository at this point in the history
  • Loading branch information
tmp64 committed Dec 3, 2023
2 parents ab442d4 + c85e04f commit 1f62461
Show file tree
Hide file tree
Showing 97 changed files with 5,039 additions and 581 deletions.
2 changes: 1 addition & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
/_build
/_build_*
/cmake-build-*
/containers
/containers/*/out

# macOS garbage
.DS_Store
105 changes: 37 additions & 68 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,9 @@ if( COMPILER_GNU )
set( WARNING_LEVEL_C_CXX "${WARNING_LEVEL_C_CXX} -Werror" )
endif()
elseif( COMPILER_MSVC )
# LNK4099: PDB was not found with 'xxx.lib(yyy.obj)' or at ''; linking object as if no debug info
set(GAME_LINKER_FLAGS "${GAME_LINKER_FLAGS} /IGNORE:4099")

if( WARNINGS_ARE_ERRORS )
set( WARNING_LEVEL_C_CXX "${WARNING_LEVEL_C_CXX} /WX" )
endif()
Expand Down Expand Up @@ -408,77 +411,43 @@ if( USE_UPDATER )
if( NOT HAS_STD_FILESYSTEM )
message( FATAL_ERROR "Updater requires support for std::filesystem." )
endif()

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 )
set( CURL_LIBRARY "" CACHE FILEPATH "" FORCE )
set( CURL_LIBRARY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}/external/curl/lib/libcurl_static_debug.lib" CACHE FILEPATH "" FORCE )
set( CURL_LIBRARY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}/external/curl/lib/libcurl_static.lib" CACHE FILEPATH "" FORCE )
endif()

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

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 )
set( UPDATER_DEFINES
${UPDATER_DEFINES}
CURL_STATICLIB=1
)
if( WIN32 )
set( UPDATER_LIBS
${UPDATER_LIBS}
wldap32.lib
Crypt32.lib
Ws2_32.lib
)
endif()
endif()

# Set platform path
if( PLATFORM_WINDOWS )
set( PLAT_EXTERNAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/windows")
elseif( PLATFORM_LINUX )
set( PLAT_EXTERNAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/linux")
elseif( PLATFORM_MACOS )
set( PLAT_EXTERNAL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/external/macos")
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" )
message(FATAL_ERROR "Unknown platform")
endif()

# Find libraries
set( ZLIB_ROOT "${PLAT_EXTERNAL_PATH}/zlib" )
set( ZLIB_USE_STATIC_LIBS ON )
find_package( ZLIB REQUIRED )

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

if( PLATFORM_LINUX )
# The bundled curl statically links with the bundled MbedTLS
set( MbedTLS_DIR "${PLAT_EXTERNAL_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()

set( CURL_DIR "${PLAT_EXTERNAL_PATH}/curl/lib/cmake/CURL" )
find_package( CURL REQUIRED NO_DEFAULT_PATH )

set( UPDATER_LIBS
libzip::zip
CURL::libcurl
)

set( UPDATER_DEFINES
USE_UPDATER=1
)
endif()

#-----------------------------------------------------------------
Expand Down
3 changes: 3 additions & 0 deletions Dockerfile.linux
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ RUN apt-get install -y \
WORKDIR /build/bhl
COPY . .

# Refresh Git index after .git is copied
RUN git update-index --refresh

RUN python3.8 ./scripts/BuildRelease.py \
--target client \
--build-type release \
Expand Down
24 changes: 24 additions & 0 deletions Dockerfile.windows
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
FROM bhl-build

# Build
WORKDIR /build/bhl
COPY . .

# Refresh Git index after .git is copied
RUN git update-index --refresh

RUN python ./scripts/BuildRelease.py \
--target client \
--build-type release \
--vs 2022 --toolset v143 \
--linux-compiler gcc-9 \
--out-dir ./_build_out_client \
--cmake-args=-DWARNINGS_ARE_ERRORS=ON

RUN python ./scripts/BuildRelease.py \
--target server \
--build-type release \
--vs 2022 --toolset v143 \
--linux-compiler gcc-9 \
--out-dir ./_build_out_server \
--cmake-args=-DWARNINGS_ARE_ERRORS=ON
4 changes: 2 additions & 2 deletions cmake/FindDInput.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ if( NOT MSVC )
message( FATAL_ERROR "DInput is only supported on Windows with MSVC++" )
endif()

find_library( DINPUT_LIB NAMES dinput8.lib PATHS ${CMAKE_SOURCE_DIR}/external/dinput NO_DEFAULT_PATH )
find_library( DINPUT_LIB NAMES dinput8.lib PATHS ${CMAKE_SOURCE_DIR}/external/windows/dinput NO_DEFAULT_PATH )

include( FindPackageHandleStandardArgs )
find_package_handle_standard_args( DInput DEFAULT_MSG DINPUT_LIB )

if( DINPUT_LIB )
add_library( DInput SHARED IMPORTED )
set_property( TARGET DInput PROPERTY IMPORTED_IMPLIB ${DINPUT_LIB} )
target_include_directories( DInput INTERFACE ${CMAKE_SOURCE_DIR}/external/dinput/include )
target_include_directories( DInput INTERFACE ${CMAKE_SOURCE_DIR}/external/windows/dinput/include )
target_compile_definitions( DInput INTERFACE DIRECTINPUT_VERSION=0x0800 )
endif()

Expand Down
2 changes: 1 addition & 1 deletion cmake/FindDXGUID.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ if( NOT MSVC )
message( FATAL_ERROR "DXGUID is only supported on Windows with MSVC++" )
endif()

find_library( DXGUID_LIB NAMES dxguid.lib PATHS ${CMAKE_SOURCE_DIR}/external/dinput NO_DEFAULT_PATH )
find_library( DXGUID_LIB NAMES dxguid.lib PATHS ${CMAKE_SOURCE_DIR}/external/windows/dinput NO_DEFAULT_PATH )

include( FindPackageHandleStandardArgs )
find_package_handle_standard_args( DXGUID DEFAULT_MSG DXGUID_LIB )
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
FROM bhl-build

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

# Download and extract
WORKDIR /build/libzip
WORKDIR /build/curl

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

RUN tar -xvf libcurl.tar.xz
Expand All @@ -17,7 +17,7 @@ COPY out/zlib/. ${BHL_PREFIX_PATH}
COPY out/mbedtls/. ${BHL_PREFIX_PATH}

# Build
WORKDIR curl-${LIBZIP_VERSION}/_build
WORKDIR curl-${CURL_VERSION}/_build
RUN cmake .. \
-GNinja \
-DCMAKE_TOOLCHAIN_FILE=${BHL_TOOLCHAIN} \
Expand Down
4 changes: 2 additions & 2 deletions containers/linux/build-libcurl.sh → containers/linux/build-curl.sh
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

set -e

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

mkdir -p $OUT_DIR

Expand Down
89 changes: 89 additions & 0 deletions containers/windows/Dockerfile.bhl-build
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# escape=`

FROM bhl-vs-2022

ENV BHL_BUILD_DATE="2023-11-27.1"
ENV BHL_GIT_VERSION="2.43.0"
ENV BHL_PYTHON_VERSION="3.11.6"
ENV BHL_CMAKE_VERSION="3.27.8"
ENV BHL_7ZIP_VERSION="2301"
ENV BHL_NINJA_VERSION="1.11.1"

# Restore the default Windows shell for correct batch processing.
SHELL ["cmd", "/S", "/C"]

# Install Git
WORKDIR C:/Downloads
RUN curl --fail -L `
https://github.com/git-for-windows/git/releases/download/v%BHL_GIT_VERSION%.windows.1/Git-%BHL_GIT_VERSION%-64-bit.exe `
-o Git-Installer.exe

RUN Git-Installer.exe `
/VERYSILENT `
/NORESTART `
/NOCANCEL

RUN del Git-Installer.exe

# Install Python
WORKDIR C:/Downloads
RUN curl --fail -L `
https://www.python.org/ftp/python/%BHL_PYTHON_VERSION%/python-%BHL_PYTHON_VERSION%-amd64.exe `
-o Python-Installer.exe

RUN Python-Installer.exe `
/quiet `
InstallAllUsers=1 `
PrependPath=1 `
Include_test=0

RUN del Python-Installer.exe

# Install CMake
WORKDIR C:/Downloads
RUN curl --fail -L `
https://github.com/Kitware/CMake/releases/download/v%BHL_CMAKE_VERSION%/cmake-%BHL_CMAKE_VERSION%-windows-x86_64.msi `
-o CMake-Installer.msi

RUN MsiExec.exe `
/i CMake-Installer.msi `
ADD_CMAKE_TO_PATH=System `
/qn

RUN del CMake-Installer.msi

# Install 7zip
WORKDIR C:/Downloads
RUN curl --fail -L `
https://7-zip.org/a/7z%BHL_7ZIP_VERSION%-x64.exe `
-o 7Zip-Installer.exe

RUN 7Zip-Installer.exe `
/S

RUN del 7Zip-Installer.exe

# Install Ninja
WORKDIR C:/Downloads
RUN curl --fail -L `
https://github.com/ninja-build/ninja/releases/download/v%BHL_NINJA_VERSION%/ninja-win.zip `
-o ninja-win.zip

WORKDIR C:/Software/bin
RUN ("C:\Program Files\7-Zip\7z.exe" e C:/Downloads/ninja-win.zip)
RUN setx path "%path%;C:/Software/bin"

WORKDIR C:/Downloads
RUN del ninja-win.zip

# Set up envvars
ENV BHL_PREFIX_PATH=C:/bhl/prefix
RUN setx BHL_PREFIX_PATH %BHL_PREFIX_PATH%
RUN setx CMAKE_PREFIX_PATH %BHL_PREFIX_PATH%

# Set up VC++ vars for x86
# And use PowerShell because this is easier and definitely won't backfire down the road
SHELL ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]

# Reset workdir
WORKDIR C:/build
46 changes: 46 additions & 0 deletions containers/windows/Dockerfile.bhl-build-curl
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# escape=`

FROM bhl-build

ENV BHL_BUILD_DATE="2023-11-29.1"
ENV BHL_CURL_VERSION="8.4.0"

# Download and extract
WORKDIR C:/build/curl

RUN curl.exe -f -L `
https://curl.se/download/curl-${env:BHL_CURL_VERSION}.tar.gz `
-o curl.tar.gz

RUN tar -xvf curl.tar.gz

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

# Build
WORKDIR curl-${BHL_CURL_VERSION}/_build

RUN cmake .. `
'-GNinja Multi-Config' `
'-DCMAKE_MODULE_PATH=C:/bhl/prefix' `
'-DCMAKE_INSTALL_PREFIX=C:/bhl/prefix-out' `
'-DCMAKE_POSITION_INDEPENDENT_CODE=ON' `
'-DBUILD_CURL_EXE=OFF' `
'-DBUILD_SHARED_LIBS=OFF' `
'-DBUILD_STATIC_CURL=ON' `
'-DBUILD_STATIC_LIBS=ON' `
'-DBUILD_TESTING=OFF' `
'-DCURL_ENABLE_SSL=ON' `
'-DCURL_STATIC_CRT=ON' `
'-DCURL_TARGET_WINDOWS_VERSION=0x0601' `
'-DCURL_USE_SCHANNEL=ON' `
'-DCURL_ZLIB=ON' `
'-DUSE_LIBIDN2=OFF' `
'-DUSE_WIN32_LDAP=OFF'

RUN `
cmake --build . --config Debug && `
cmake --install . --config Debug && `
cmake --build . --config RelWithDebInfo && `
cmake --install . --config RelWithDebInfo && `
ninja clean
Loading

0 comments on commit 1f62461

Please sign in to comment.