From 7698a62c1f17afdd134ab90cac8806d68f3e8af5 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 27 Jan 2024 11:51:35 -0600 Subject: [PATCH] updated mingw64 build --- .jenkins_linux_builds | 1 + CMakeLists.txt | 6 +- cmake/boost.cmake | 186 +++--- cmake/curl.cmake | 111 ++-- cmake/librepertory.cmake | 16 +- cmake/libsodium.cmake | 50 +- cmake/mingw-w64-x86_64.cmake | 16 - cmake/modules/FindSodium.cmake | 297 ++++++++++ cmake/openssl.cmake | 76 +-- cmake/settings.cmake | 4 + cmake/unittests.cmake | 4 +- cmake/versions.cmake | 10 +- cmake/zlib.cmake | 57 +- docker/64_bit/mingw64 | 1020 +++++++++++++++++++++++++++----- scripts/make_common.sh | 2 +- scripts/make_mingw64.sh | 24 +- scripts/make_win32.cmd | 5 - scripts/run_docker_shell.sh | 16 +- 18 files changed, 1480 insertions(+), 421 deletions(-) delete mode 100644 cmake/mingw-w64-x86_64.cmake create mode 100644 cmake/modules/FindSodium.cmake delete mode 100644 scripts/make_win32.cmd diff --git a/.jenkins_linux_builds b/.jenkins_linux_builds index 9a93dcd1..8561ea99 100644 --- a/.jenkins_linux_builds +++ b/.jenkins_linux_builds @@ -68,6 +68,7 @@ pipeline { agent { dockerfile { filename 'mingw64' + args '--build-arg NUM_JOBS=8' dir 'docker/64_bit' } } diff --git a/CMakeLists.txt b/CMakeLists.txt index ad03afbd..8029670d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,9 +74,9 @@ if (LINUX OR MINGW) endif() endif() - if (REPERTORY_MUSL OR MINGW) + if (REPERTORY_MUSL) find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES libpthread.a) - else() + elseif(NOT MINGW) find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES pthread) endif() @@ -91,7 +91,7 @@ if (LINUX OR MINGW) set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DFUSE_USE_VERSION=29) endif() - if (NOT LIBPTHREAD_LIBRARY) + if (NOT MINGW AND NOT LIBPTHREAD_LIBRARY) message(FATAL_ERROR "'libpthread' not found") endif() diff --git a/cmake/boost.cmake b/cmake/boost.cmake index a8954756..f1428103 100644 --- a/cmake/boost.cmake +++ b/cmake/boost.cmake @@ -1,97 +1,95 @@ -set(BOOST_VERSION ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_REVISION}) -set(BOOST_VERSION2 ${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_REVISION}) - -set(BOOST_PROJECT_NAME boost_${BOOST_VERSION}) -set(BOOST_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${BOOST_PROJECT_NAME}) - -set(BOOST_ADDRESS_MODEL 64) - -set(BOOST_DOWNLOAD_URL https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION2}.tar.gz) - -if (IS_CLANG_COMPILER) - set(BOOST_TOOLSET --with-toolset=clang) -else () - set(BOOST_OPENSSL_DIR "--openssldir=${EXTERNAL_BUILD_ROOT}") -endif() - -if (IS_ARM64) - set (BOOST_ARCH arm) -else() - set (BOOST_ARCH x86) -endif() - -set (BOOST_COMMON_ARGS - ${BOOST_OPENSSL_DIR} - --prefix=${EXTERNAL_BUILD_ROOT} - address-model=${BOOST_ADDRESS_MODEL} - architecture=${BOOST_ARCH} - cxxflags=-std=c++${CMAKE_CXX_STANDARD} - cxxstd=${CMAKE_CXX_STANDARD} - define=BOOST_ASIO_HAS_STD_STRING_VIEW - define=BOOST_SYSTEM_NO_DEPRECATED - link=static - linkflags=-std=c++${CMAKE_CXX_STANDARD} - threading=multi - variant=${CMAKE_BUILD_TYPE_LOWER} - -sZLIB_BINARY=zlibstatic${DEBUG_EXTRA} - -sZLIB_LIBPATH="${EXTERNAL_BUILD_ROOT}/lib" - -sZLIB_INCLUDE="${EXTERNAL_BUILD_ROOT}/include" -) - if (MINGW) - if (NOT CMAKE_HOST_WIN32) - set(BOOST_COMMON_ARGS - ${BOOST_COMMON_ARGS} - --user-config=./user-config.jam - ) + include_directories(SYSTEM /mingw/include/boost-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}) + set(Boost_LIBRARIES + /mingw64/lib/libboost_system.a + /mingw64/lib/libboost_atomic.a + /mingw64/lib/libboost_chrono.a + /mingw64/lib/libboost_date_time.a + /mingw64/lib/libboost_filesystem.a + /mingw64/lib/libboost_random.a + /mingw64/lib/libboost_regex.a + /mingw64/lib/libboost_serialization.a + /mingw64/lib/libboost_thread.a + ) +else() + set(BOOST_VERSION ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION}) + set(BOOST_VERSION2 ${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_PATCH_VERSION}) + + set(BOOST_PROJECT_NAME boost_${BOOST_VERSION}) + set(BOOST_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${BOOST_PROJECT_NAME}) + + set(BOOST_ADDRESS_MODEL 64) + + set(BOOST_DOWNLOAD_URL https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION2}.tar.gz) + + if (IS_CLANG_COMPILER) + set(BOOST_TOOLSET --with-toolset=clang) + else () + set(BOOST_OPENSSL_DIR "--openssldir=${EXTERNAL_BUILD_ROOT}") endif() - set(BOOST_TARGET_OS target-os=windows) -endif() - -ExternalProject_Add(boost_project - DOWNLOAD_NO_PROGRESS 1 - URL ${BOOST_DOWNLOAD_URL} - PREFIX ${BOOST_BUILD_ROOT} - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND - cp -f ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/user-config.jam . && - ./bootstrap.sh - ${BOOST_TOOLSET} - ${BOOST_TARGET_OS} - --with-libraries=atomic,chrono,date_time,filesystem,random,regex,serialization,system,thread - BUILD_COMMAND - ./b2 - ${BOOST_COMMON_ARGS} - ${BOOST_TARGET_OS} - INSTALL_COMMAND - ./b2 - ${BOOST_COMMON_ARGS} - ${BOOST_TARGET_OS} - install -) - -add_dependencies(boost_project openssl_project) - -if (MINGW AND CMAKE_HOST_WIN32) - set(BOOST_GCC_VERSION ${CMAKE_CXX_COMPILER_VERSION}) - string(REPLACE "." ";" BOOST_GCC_VERSION_LIST ${BOOST_GCC_VERSION}) - list(GET BOOST_GCC_VERSION_LIST 0 BOOST_GCC_MAJOR_VERSION) - set(BOOST_LIB_EXTRA "-mgw${BOOST_GCC_MAJOR_VERSION}-mt${DEBUG_EXTRA2}-x64-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}") -endif() - -set(Boost_LIBRARIES - libboost_system${BOOST_LIB_EXTRA}.a - libboost_atomic${BOOST_LIB_EXTRA}.a - libboost_chrono${BOOST_LIB_EXTRA}.a - libboost_date_time${BOOST_LIB_EXTRA}.a - libboost_filesystem${BOOST_LIB_EXTRA}.a - libboost_random${BOOST_LIB_EXTRA}.a - libboost_regex${BOOST_LIB_EXTRA}.a - libboost_serialization${BOOST_LIB_EXTRA}.a - libboost_thread${BOOST_LIB_EXTRA}.a -) - -add_dependencies(boost_project zlib_project) -if (CMAKE_HOST_WIN32) - include_directories(SYSTEM ${EXTERNAL_BUILD_ROOT}/include/boost-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}) + + if (IS_ARM64) + set (BOOST_ARCH arm) + else() + set (BOOST_ARCH x86) + endif() + + set (BOOST_COMMON_ARGS + ${BOOST_OPENSSL_DIR} + --prefix=${EXTERNAL_BUILD_ROOT} + address-model=${BOOST_ADDRESS_MODEL} + architecture=${BOOST_ARCH} + cxxflags=-std=c++${CMAKE_CXX_STANDARD} + cxxstd=${CMAKE_CXX_STANDARD} + define=BOOST_ASIO_HAS_STD_STRING_VIEW + define=BOOST_SYSTEM_NO_DEPRECATED + link=static + linkflags=-std=c++${CMAKE_CXX_STANDARD} + threading=multi + variant=${CMAKE_BUILD_TYPE_LOWER} + -sZLIB_BINARY=zlibstatic${DEBUG_EXTRA} + -sZLIB_LIBPATH="${EXTERNAL_BUILD_ROOT}/lib" + -sZLIB_INCLUDE="${EXTERNAL_BUILD_ROOT}/include" + ) + + ExternalProject_Add(boost_project + DOWNLOAD_NO_PROGRESS 1 + URL ${BOOST_DOWNLOAD_URL} + PREFIX ${BOOST_BUILD_ROOT} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND + cp -f ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/user-config.jam . && + ./bootstrap.sh + ${BOOST_TOOLSET} + ${BOOST_TARGET_OS} + --with-libraries=atomic,chrono,date_time,filesystem,random,regex,serialization,system,thread + BUILD_COMMAND + ./b2 + ${BOOST_COMMON_ARGS} + ${BOOST_TARGET_OS} + INSTALL_COMMAND + ./b2 + ${BOOST_COMMON_ARGS} + ${BOOST_TARGET_OS} + install + ) + + add_dependencies(boost_project openssl_project) + + add_dependencies(boost_project zlib_project) + if (CMAKE_HOST_WIN32) + include_directories(SYSTEM ${EXTERNAL_BUILD_ROOT}/include/boost-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}) + endif() + + set(Boost_LIBRARIES + libboost_system.a + libboost_atomic.a + libboost_chrono.a + libboost_date_time.a + libboost_filesystem.a + libboost_random.a + libboost_regex.a + libboost_serialization.a + libboost_thread.a + ) endif() diff --git a/cmake/curl.cmake b/cmake/curl.cmake index d057da5a..f9a35dad 100644 --- a/cmake/curl.cmake +++ b/cmake/curl.cmake @@ -1,67 +1,60 @@ -set(CURL_PROJECT_NAME curl_${CURL_VERSION}) -set(CURL_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${CURL_PROJECT_NAME}) - -if (OPENSSL_ROOT_DIR) - set(CURL_OPENSSL_EXTRA -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}) -elseif(LINUX OR MINGW) - set(CURL_OPENSSL_EXTRA -DOPENSSL_ROOT_DIR=${EXTERNAL_BUILD_ROOT}) -endif() - -set(CURL_CMAKE_ARGS - ${CURL_OPENSSL_EXTRA} - -DBUILD_CURL_EXE=OFF - -DBUILD_SHARED_LIBS=OFF - -DBUILD_TESTING=OFF - -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} - -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} - -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} - -DCURL_CA_BUNDLE=./cacert.pem - -DCURL_CA_FALLBACK=ON - -DCURL_DISABLE_LDAP=ON - -DCURL_STATICLIB=ON - -DCURL_USE_LIBPSL=OFF - -DCURL_USE_LIBSSH2=OFF - -DCURL_ZLIB=OFF - -DENABLE_THREADED_RESOLVER=ON - -DOPENSSL_USE_STATIC_LIBS=ON - -DUSE_LIBIDN2=OFF -) - -if (CMAKE_TOOLCHAIN_FILE) - set(CURL_CMAKE_ARGS - ${CURL_CMAKE_ARGS} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - ) -endif() - if (MINGW) - set(CURL_CMAKE_ARGS - ${CURL_CMAKE_ARGS} - -DCURL_USE_OPENSSL=OFF - -DUSE_WIN32_CRYPTO=ON - ) + find_package(CURL REQUIRED) + set(CURL_LIBRARIES /mingw64/lib/libcurl.a) else() + set(CURL_PROJECT_NAME curl_${CURL_VERSION}) + set(CURL_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${CURL_PROJECT_NAME}) + + if (OPENSSL_ROOT_DIR) + set(CURL_OPENSSL_EXTRA -DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}) + elseif(LINUX) + set(CURL_OPENSSL_EXTRA -DOPENSSL_ROOT_DIR=${EXTERNAL_BUILD_ROOT}) + endif() + set(CURL_CMAKE_ARGS - ${CURL_CMAKE_ARGS} + ${CURL_OPENSSL_EXTRA} + -DBUILD_CURL_EXE=OFF + -DBUILD_SHARED_LIBS=OFF + -DBUILD_TESTING=OFF + -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} + -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} + -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} + -DCURL_CA_BUNDLE=./cacert.pem + -DCURL_CA_FALLBACK=ON + -DCURL_DISABLE_LDAP=ON + -DCURL_STATICLIB=ON + -DCURL_USE_LIBPSL=OFF + -DCURL_USE_LIBSSH2=OFF -DCURL_USE_OPENSSL=ON + -DCURL_ZLIB=OFF + -DENABLE_THREADED_RESOLVER=ON + -DOPENSSL_USE_STATIC_LIBS=ON + -DUSE_LIBIDN2=OFF + ) + + if (CMAKE_TOOLCHAIN_FILE) + set(CURL_CMAKE_ARGS + ${CURL_CMAKE_ARGS} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + ) + endif() + + ExternalProject_Add(curl_project + DOWNLOAD_NO_PROGRESS 1 + URL https://curl.se/download/curl-${CURL_VERSION}.tar.gz + PREFIX ${CURL_BUILD_ROOT} + CMAKE_ARGS ${CURL_CMAKE_ARGS} + ) + + set(CURL_LIBRARIES libcurl${DEBUG_EXTRA2}${CMAKE_STATIC_LIBRARY_SUFFIX}) + add_dependencies(curl_project + openssl_project + zlib_project ) endif() -ExternalProject_Add(curl_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/curl/curl/archive/curl-${CURL_VERSION}.tar.gz - PREFIX ${CURL_BUILD_ROOT} - CMAKE_ARGS ${CURL_CMAKE_ARGS} -) - set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DCURL_STATICLIB=ON -DCURL_DISABLE_LDAP=ON) - -set(CURL_LIBRARIES libcurl${DEBUG_EXTRA2}${CMAKE_STATIC_LIBRARY_SUFFIX}) -add_dependencies(curl_project - openssl_project - zlib_project -) diff --git a/cmake/librepertory.cmake b/cmake/librepertory.cmake index d87888b4..4f0b6112 100644 --- a/cmake/librepertory.cmake +++ b/cmake/librepertory.cmake @@ -12,10 +12,12 @@ set_common_target_options(librepertory) set_target_properties(librepertory PROPERTIES PREFIX "") target_link_libraries(librepertory PRIVATE ${REPERTORY_LINK_LIBRARIES}) -add_dependencies(librepertory - boost_project - curl_project - libsodium_project - openssl_project - zlib_project -) +if (NOT MINGW) + add_dependencies(librepertory + boost_project + curl_project + libsodium_project + openssl_project + zlib_project + ) +endif() diff --git a/cmake/libsodium.cmake b/cmake/libsodium.cmake index badc9926..513aca87 100644 --- a/cmake/libsodium.cmake +++ b/cmake/libsodium.cmake @@ -1,27 +1,29 @@ -set(LIBSODIUM_PROJECT_NAME libsodium_${LIBSODIUM_VERSION}) -set(LIBSODIUM_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${LIBSODIUM_PROJECT_NAME}) -set(LIBSODIUM_BUILD_TYPE ${EXTERNAL_BUILD_TYPE}) - if (MINGW) - set(LIBSODIUM_HOST --host=x86_64-w64-mingw32) + set(sodium_USE_STATIC_LIBS ON) + find_package(Sodium REQUIRED) + set(LIBSODIUM_LIBRARIES /mingw64/lib/libsodium.a) +else() + set(LIBSODIUM_PROJECT_NAME libsodium_${LIBSODIUM_VERSION}) + set(LIBSODIUM_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${LIBSODIUM_PROJECT_NAME}) + set(LIBSODIUM_BUILD_TYPE ${EXTERNAL_BUILD_TYPE}) + + ExternalProject_Add(libsodium_project + DOWNLOAD_NO_PROGRESS 1 + PREFIX ${LIBSODIUM_BUILD_ROOT} + BUILD_IN_SOURCE 1 + URL https://github.com/jedisct1/libsodium/releases/download/${LIBSODIUM_VERSION}-RELEASE/libsodium-${LIBSODIUM_VERSION}.tar.gz + CONFIGURE_COMMAND ./configure + --prefix=${EXTERNAL_BUILD_ROOT} + --enable-shared=no + --enable-static=yes + --disable-asm + --disable-ssp + ${LIBSODIUM_HOST} + BUILD_COMMAND make + INSTALL_COMMAND make install + ) + + add_dependencies(libsodium_project zlib_project) + set(LIBSODIUM_LIBRARIES libsodium.a) endif() -ExternalProject_Add(libsodium_project - DOWNLOAD_NO_PROGRESS 1 - PREFIX ${LIBSODIUM_BUILD_ROOT} - BUILD_IN_SOURCE 1 - URL https://github.com/jedisct1/libsodium/releases/download/${LIBSODIUM_VERSION}-RELEASE/libsodium-${LIBSODIUM_VERSION}.tar.gz - CONFIGURE_COMMAND - ./configure - ${LIBSODIUM_HOST} - --prefix=${EXTERNAL_BUILD_ROOT} - --enable-shared=no - --enable-static=yes - --disable-asm - BUILD_COMMAND make - INSTALL_COMMAND make install -) - -set(LIBSODIUM_LIBRARIES libsodium.a) - -add_dependencies(libsodium_project zlib_project) diff --git a/cmake/mingw-w64-x86_64.cmake b/cmake/mingw-w64-x86_64.cmake deleted file mode 100644 index 55320227..00000000 --- a/cmake/mingw-w64-x86_64.cmake +++ /dev/null @@ -1,16 +0,0 @@ -set(CMAKE_SYSTEM_NAME Windows) -set(TOOLCHAIN_PREFIX x86_64-w64-mingw32) - -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) -set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran) -set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) - -set(CMAKE_FIND_ROOT_PATH - /usr/${TOOLCHAIN_PREFIX} - /usr/local/${TOOLCHAIN_PREFIX} -) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/modules/FindSodium.cmake b/cmake/modules/FindSodium.cmake new file mode 100644 index 00000000..3c3f1245 --- /dev/null +++ b/cmake/modules/FindSodium.cmake @@ -0,0 +1,297 @@ +# Written in 2016 by Henrik Steffen Gaßmann +# +# To the extent possible under law, the author(s) have dedicated all +# copyright and related and neighboring rights to this software to the +# public domain worldwide. This software is distributed without any warranty. +# +# You should have received a copy of the CC0 Public Domain Dedication +# along with this software. If not, see +# +# http://creativecommons.org/publicdomain/zero/1.0/ +# +######################################################################## +# Tries to find the local libsodium installation. +# +# On Windows the sodium_DIR environment variable is used as a default +# hint which can be overridden by setting the corresponding cmake variable. +# +# Once done the following variables will be defined: +# +# sodium_FOUND +# sodium_INCLUDE_DIR +# sodium_LIBRARY_DEBUG +# sodium_LIBRARY_RELEASE +# +# +# Furthermore an imported "sodium" target is created. +# + +if (CMAKE_C_COMPILER_ID STREQUAL "GNU" + OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(_GCC_COMPATIBLE 1) +endif() + +# static library option +if (NOT DEFINED sodium_USE_STATIC_LIBS) + option(sodium_USE_STATIC_LIBS "enable to statically link against sodium" OFF) +endif() +if(NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST)) + unset(sodium_LIBRARY CACHE) + unset(sodium_LIBRARY_DEBUG CACHE) + unset(sodium_LIBRARY_RELEASE CACHE) + unset(sodium_DLL_DEBUG CACHE) + unset(sodium_DLL_RELEASE CACHE) + set(sodium_USE_STATIC_LIBS_LAST ${sodium_USE_STATIC_LIBS} CACHE INTERNAL "internal change tracking variable") +endif() + + +######################################################################## +# UNIX +if (UNIX) + # import pkg-config + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(sodium_PKG QUIET libsodium) + endif() + + if(sodium_USE_STATIC_LIBS) + foreach(_libname ${sodium_PKG_STATIC_LIBRARIES}) + if (NOT _libname MATCHES "^lib.*\\.a$") # ignore strings already ending with .a + list(INSERT sodium_PKG_STATIC_LIBRARIES 0 "lib${_libname}.a") + endif() + endforeach() + list(REMOVE_DUPLICATES sodium_PKG_STATIC_LIBRARIES) + + # if pkgconfig for libsodium doesn't provide + # static lib info, then override PKG_STATIC here.. + if (NOT sodium_PKG_STATIC_FOUND) + set(sodium_PKG_STATIC_LIBRARIES libsodium.a) + endif() + + set(XPREFIX sodium_PKG_STATIC) + else() + if (NOT sodium_PKG_FOUND) + set(sodium_PKG_LIBRARIES sodium) + endif() + + set(XPREFIX sodium_PKG) + endif() + + find_path(sodium_INCLUDE_DIR sodium.h + HINTS ${${XPREFIX}_INCLUDE_DIRS} + ) + find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES} + HINTS ${${XPREFIX}_LIBRARY_DIRS} + ) + find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES} + HINTS ${${XPREFIX}_LIBRARY_DIRS} + ) + + +######################################################################## +# Windows +elseif (WIN32) + set(sodium_DIR "$ENV{sodium_DIR}" CACHE FILEPATH "sodium install directory") + mark_as_advanced(sodium_DIR) + + find_path(sodium_INCLUDE_DIR sodium.h + HINTS ${sodium_DIR} + PATH_SUFFIXES include + ) + + if (MSVC) + # detect target architecture + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.cpp" [=[ + #if defined _M_IX86 + #error ARCH_VALUE x86_32 + #elif defined _M_X64 + #error ARCH_VALUE x86_64 + #endif + #error ARCH_VALUE unknown + ]=]) + try_compile(_UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/arch.cpp" + OUTPUT_VARIABLE _COMPILATION_LOG + ) + string(REGEX REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" "\\1" _TARGET_ARCH "${_COMPILATION_LOG}") + + # construct library path + if (_TARGET_ARCH STREQUAL "x86_32") + string(APPEND _PLATFORM_PATH "Win32") + elseif(_TARGET_ARCH STREQUAL "x86_64") + string(APPEND _PLATFORM_PATH "x64") + else() + message(FATAL_ERROR "the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake.") + endif() + string(APPEND _PLATFORM_PATH "/$$CONFIG$$") + + if (MSVC_VERSION LESS 1900) + math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60") + else() + math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50") + endif() + string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}") + + if (sodium_USE_STATIC_LIBS) + string(APPEND _PLATFORM_PATH "/static") + else() + string(APPEND _PLATFORM_PATH "/dynamic") + endif() + + string(REPLACE "$$CONFIG$$" "Debug" _DEBUG_PATH_SUFFIX "${_PLATFORM_PATH}") + string(REPLACE "$$CONFIG$$" "Release" _RELEASE_PATH_SUFFIX "${_PLATFORM_PATH}") + + find_library(sodium_LIBRARY_DEBUG libsodium.lib + HINTS ${sodium_DIR} + PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} + ) + find_library(sodium_LIBRARY_RELEASE libsodium.lib + HINTS ${sodium_DIR} + PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} + ) + if (NOT sodium_USE_STATIC_LIBS) + set(CMAKE_FIND_LIBRARY_SUFFIXES_BCK ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll") + find_library(sodium_DLL_DEBUG libsodium + HINTS ${sodium_DIR} + PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} + ) + find_library(sodium_DLL_RELEASE libsodium + HINTS ${sodium_DIR} + PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} + ) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_BCK}) + endif() + + elseif(_GCC_COMPATIBLE) + if (sodium_USE_STATIC_LIBS) + find_library(sodium_LIBRARY_DEBUG libsodium.a + HINTS ${sodium_DIR} + PATH_SUFFIXES lib + ) + find_library(sodium_LIBRARY_RELEASE libsodium.a + HINTS ${sodium_DIR} + PATH_SUFFIXES lib + ) + else() + find_library(sodium_LIBRARY_DEBUG libsodium.dll.a + HINTS ${sodium_DIR} + PATH_SUFFIXES lib + ) + find_library(sodium_LIBRARY_RELEASE libsodium.dll.a + HINTS ${sodium_DIR} + PATH_SUFFIXES lib + ) + + file(GLOB _DLL + LIST_DIRECTORIES false + RELATIVE "${sodium_DIR}/bin" + "${sodium_DIR}/bin/libsodium*.dll" + ) + find_library(sodium_DLL_DEBUG ${_DLL} libsodium + HINTS ${sodium_DIR} + PATH_SUFFIXES bin + ) + find_library(sodium_DLL_RELEASE ${_DLL} libsodium + HINTS ${sodium_DIR} + PATH_SUFFIXES bin + ) + endif() + else() + message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") + endif() + + +######################################################################## +# unsupported +else() + message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") +endif() + + +######################################################################## +# common stuff + +# extract sodium version +if (sodium_INCLUDE_DIR) + set(_VERSION_HEADER "${_INCLUDE_DIR}/sodium/version.h") + if (EXISTS _VERSION_HEADER) + file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT) + string(REGEX REPLACE ".*#[ \t]*define[ \t]*SODIUM_VERSION_STRING[ \t]*\"([^\n]*)\".*" "\\1" + sodium_VERSION "${_VERSION_HEADER_CONTENT}") + set(sodium_VERSION "${sodium_VERSION}" PARENT_SCOPE) + endif() +endif() + +# communicate results +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + Sodium # The name must be either uppercase or match the filename case. + REQUIRED_VARS + sodium_LIBRARY_RELEASE + sodium_LIBRARY_DEBUG + sodium_INCLUDE_DIR + VERSION_VAR + sodium_VERSION +) + +if(Sodium_FOUND) + set(sodium_LIBRARIES + optimized ${sodium_LIBRARY_RELEASE} debug ${sodium_LIBRARY_DEBUG}) +endif() + +# mark file paths as advanced +mark_as_advanced(sodium_INCLUDE_DIR) +mark_as_advanced(sodium_LIBRARY_DEBUG) +mark_as_advanced(sodium_LIBRARY_RELEASE) +if (WIN32) + mark_as_advanced(sodium_DLL_DEBUG) + mark_as_advanced(sodium_DLL_RELEASE) +endif() + +# create imported target +if(sodium_USE_STATIC_LIBS) + set(_LIB_TYPE STATIC) +else() + set(_LIB_TYPE SHARED) +endif() + +if(NOT TARGET sodium) + add_library(sodium ${_LIB_TYPE} IMPORTED) +endif() + +set_target_properties(sodium PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${sodium_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" +) + +if (sodium_USE_STATIC_LIBS) + set_target_properties(sodium PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC" + IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" + IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}" + ) +else() + if (UNIX) + set_target_properties(sodium PROPERTIES + IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}" + IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}" + ) + elseif (WIN32) + set_target_properties(sodium PROPERTIES + IMPORTED_IMPLIB "${sodium_LIBRARY_RELEASE}" + IMPORTED_IMPLIB_DEBUG "${sodium_LIBRARY_DEBUG}" + ) + if (NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND")) + set_target_properties(sodium PROPERTIES + IMPORTED_LOCATION_DEBUG "${sodium_DLL_DEBUG}" + ) + endif() + if (NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND")) + set_target_properties(sodium PROPERTIES + IMPORTED_LOCATION_RELWITHDEBINFO "${sodium_DLL_RELEASE}" + IMPORTED_LOCATION_MINSIZEREL "${sodium_DLL_RELEASE}" + IMPORTED_LOCATION_RELEASE "${sodium_DLL_RELEASE}" + ) + endif() + endif() +endif() diff --git a/cmake/openssl.cmake b/cmake/openssl.cmake index 6e78dea5..f3c8eb49 100644 --- a/cmake/openssl.cmake +++ b/cmake/openssl.cmake @@ -1,36 +1,44 @@ -if (IS_CLANG_COMPILER) - set(OPENSSL_COMPILE_TYPE_EXTRA -clang) -endif() - -if (MACOS) - set(OPENSSL_COMPILE_TYPE darwin64-x86_64-cc) -elseif(IS_ARM64) - set(OPENSSL_COMPILE_TYPE linux-aarch64${OPENSSL_COMPILE_TYPE_EXTRA}) -elseif(MINGW) - if (CMAKE_TOOLCHAIN_FILE) - set(OPENSSL_COMPILE_TYPE --cross-compile-prefix=x86_64-w64-mingw32- mingw64${OPENSSL_COMPILE_TYPE_EXTRA}) - else() - set(OPENSSL_COMPILE_TYPE mingw64${OPENSSL_COMPILE_TYPE_EXTRA}) - endif() +if (MINGW) + set($ENV:{OPENSSL_ROOT_DIR} /mingw64) + find_package(OpenSSL REQUIRED) + set(OPENSSL_LIBRARIES + /mingw64/lib64/libssl.a + /mingw64/lib64/libcrypto.a + ) else() - set(OPENSSL_COMPILE_TYPE linux-x86_64${OPENSSL_COMPILE_TYPE_EXTRA}) + if (IS_CLANG_COMPILER) + set(OPENSSL_COMPILE_TYPE_EXTRA -clang) + endif() + + if (MACOS) + set(OPENSSL_COMPILE_TYPE darwin64-x86_64-cc) + elseif(IS_ARM64) + set(OPENSSL_COMPILE_TYPE linux-aarch64${OPENSSL_COMPILE_TYPE_EXTRA}) + else() + set(OPENSSL_COMPILE_TYPE linux-x86_64${OPENSSL_COMPILE_TYPE_EXTRA}) + endif() + + set(OPENSSL_PROJECT_NAME openssl_${OPENSSL_VERSION}) + set(OPENSSL_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${OPENSSL_PROJECT_NAME}) + ExternalProject_Add(openssl_project + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz + PREFIX ${OPENSSL_BUILD_ROOT} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND ./Configure + ${OPENSSL_COMPILE_TYPE} + --prefix=${EXTERNAL_BUILD_ROOT} + no-apps + no-docs + no-shared + BUILD_COMMAND make + INSTALL_COMMAND make install + ) + + set(OPENSSL_LIBRARIES + ${EXTERNAL_BUILD_ROOT}/lib/libssl.a + ${EXTERNAL_BUILD_ROOT}/lib/libcrypto.a + ) + + add_dependencies(openssl_project zlib_project) endif() - -set(OPENSSL_PROJECT_NAME openssl_${OPENSSL_VERSION}) -set(OPENSSL_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${OPENSSL_PROJECT_NAME}) -ExternalProject_Add(openssl_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz - PREFIX ${OPENSSL_BUILD_ROOT} - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ./Configure no-shared ${OPENSSL_COMPILE_TYPE} --openssldir=${EXTERNAL_BUILD_ROOT}/ssl --prefix=${EXTERNAL_BUILD_ROOT} - BUILD_COMMAND make -j1 - INSTALL_COMMAND make install -) - -set(OPENSSL_LIBRARIES - ${EXTERNAL_BUILD_ROOT}/lib/libssl.a - ${EXTERNAL_BUILD_ROOT}/lib/libcrypto.a -) - -add_dependencies(openssl_project zlib_project) diff --git a/cmake/settings.cmake b/cmake/settings.cmake index 38ca6be8..9f6a0b4a 100644 --- a/cmake/settings.cmake +++ b/cmake/settings.cmake @@ -11,6 +11,10 @@ set(CMAKE_COLOR_MAKEFILE OFF) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_MODULE_PATH + ${CMAKE_MODULE_PATH} + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules +) set(THREADS_PREFER_PTHREAD_FLAG ON) if (NOT CMAKE_BUILD_TYPE) diff --git a/cmake/unittests.cmake b/cmake/unittests.cmake index 00a24ce9..04cefdfc 100644 --- a/cmake/unittests.cmake +++ b/cmake/unittests.cmake @@ -13,7 +13,7 @@ if (REPERTORY_ENABLE_TESTING) endif() ExternalProject_Add(gtest_project DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/google/googletest/archive/refs/tags/${GTEST_VERSION}.tar.gz + URL https://github.com/google/googletest/archive/refs/tags/v${GTEST_VERSION}.tar.gz PREFIX ${GTEST_BUILD_ROOT} CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} @@ -30,7 +30,7 @@ if (REPERTORY_ENABLE_TESTING) ${GTEST_BUILD_ROOT}/src/gtest_project/googlemock/include ) - if(UNIX OR MINGW) + if(UNIX) set(GTEST_LIBRARIES ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgmock.a ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest.a diff --git a/cmake/versions.cmake b/cmake/versions.cmake index 62438cbb..7df58a0d 100644 --- a/cmake/versions.cmake +++ b/cmake/versions.cmake @@ -1,9 +1,9 @@ set(BOOST_MAJOR_VERSION 1) -set(BOOST_MINOR_VERSION 83) -set(BOOST_REVISION 0) -set(CURL_VERSION 8_5_0) -set(GTEST_VERSION v1.14.0) +set(BOOST_MINOR_VERSION 84) +set(BOOST_PATCH_VERSION 0) +set(CURL_VERSION 8.5.0) +set(GTEST_VERSION 1.14.0) set(LIBSODIUM_VERSION 1.0.19) set(OPENSSL_VERSION 3.2.0) set(WINFSP_VERSION 2.0) -set(ZLIB_VERSION v1.3) +set(ZLIB_VERSION 1.3) diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake index d56f1159..9f318a9c 100644 --- a/cmake/zlib.cmake +++ b/cmake/zlib.cmake @@ -1,31 +1,32 @@ -set(ZLIB_PROJECT_NAME zlib_${ZLIB_VERSION}) -set(ZLIB_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${ZLIB_PROJECT_NAME}) -set(ZLIB_CMAKE_ARGS - -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_GENERATOR=${CMAKE_GENERATOR} - -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} - -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} - -DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS} -) - -if (CMAKE_TOOLCHAIN_FILE) - set(ZLIB_CMAKE_ARGS - ${ZLIB_CMAKE_ARGS} - -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} - ) -endif() - -ExternalProject_Add(zlib_project - DOWNLOAD_NO_PROGRESS 1 - URL https://github.com/madler/zlib/archive/${ZLIB_VERSION}.tar.gz - PREFIX ${ZLIB_BUILD_ROOT} - CMAKE_ARGS ${ZLIB_CMAKE_ARGS} -) - -if(MINGW) - set(ZLIB_LIBRARIES ${EXTERNAL_BUILD_ROOT}/lib/libzlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}) +if (MINGW) + find_package(ZLIB REQUIRED) + set(ZLIB_LIBRARIES /mingw64/lib/libz.a) else() + set(ZLIB_PROJECT_NAME zlib_${ZLIB_VERSION}) + set(ZLIB_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${ZLIB_PROJECT_NAME}) + set(ZLIB_CMAKE_ARGS + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_BUILD_TYPE=${EXTERNAL_BUILD_TYPE} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_GENERATOR=${CMAKE_GENERATOR} + -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_ROOT} + -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} + ) + + if (CMAKE_TOOLCHAIN_FILE) + set(ZLIB_CMAKE_ARGS + ${ZLIB_CMAKE_ARGS} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + ) + endif() + + ExternalProject_Add(zlib_project + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz + PREFIX ${ZLIB_BUILD_ROOT} + CMAKE_ARGS ${ZLIB_CMAKE_ARGS} + ) + set(ZLIB_LIBRARIES ${EXTERNAL_BUILD_ROOT}/lib/libz${CMAKE_STATIC_LIBRARY_SUFFIX}) endif() diff --git a/docker/64_bit/mingw64 b/docker/64_bit/mingw64 index 6b36d898..982fd7eb 100644 --- a/docker/64_bit/mingw64 +++ b/docker/64_bit/mingw64 @@ -1,201 +1,945 @@ -# https://github.com/mmozeiko/docker-mingw-w64 -FROM ubuntu:22.04 +# comment +FROM alpine:edge WORKDIR /mnt +ENV MY_WORKDIR=/mnt -ENV MINGW=/mingw +ARG MINGW=/mingw64 +ENV MY_MINGW=${MINGW} -ARG BINUTILS_VERSION=2.41 -ARG CMAKE_VERSION=3.27.1 -ARG GCC_VERSION=13.2.0 -ARG MINGW_VERSION=11.0.1 -ARG NASM_VERSION=2.16.01 -ARG NVCC_VERSION=12.2.1 -ARG PKG_CONFIG_VERSION=0.29.2 +ARG MINGW_PREFIX=x86_64-w64-mingw32 +ENV MY_MINGW_PREFIX=${MINGW_PREFIX} + +ARG NUM_JOBS=2 +ENV MY_NUM_JOBS=${NUM_JOBS} + +ARG TOOLCHAIN_FILE_CMAKE=/cmake_toolchain.cmake +ENV MY_TOOLCHAIN_FILE_CMAKE=${TOOLCHAIN_FILE_CMAKE} +RUN echo -e \ + "set(CMAKE_SYSTEM_NAME Windows)\n"\ + "set(CMAKE_CXX_COMPILER ${MY_MINGW_PREFIX}-g++)\n"\ + "set(CMAKE_C_COMPILER ${MY_MINGW_PREFIX}-gcc)\n"\ + "set(CMAKE_FIND_ROOT_PATH ${MY_MINGW})\n"\ + "set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)\n"\ + "set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)\n"\ + "set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n"\ + "set(CMAKE_Fortran_COMPILER ${MY_MINGW_PREFIX}-gfortran)\n"\ + "set(CMAKE_INSTALL_PREFIX ${MY_MINGW})\n"\ + "set(CMAKE_RC_COMPILER ${MY_MINGW_PREFIX}-windres)\n"\ + > ${MY_TOOLCHAIN_FILE_CMAKE} + +ARG TOOLCHAIN_FILE_MESON=/meson_cross_file.txt +ENV MY_TOOLCHAIN_FILE_MESON=${TOOLCHAIN_FILE_MESON} +RUN echo -e \ + "[binaries]\n"\ + "ar = '${MY_MINGW_PREFIX}-ar'\n"\ + "c = '${MY_MINGW_PREFIX}-gcc'\n"\ + "cpp = '${MY_MINGW_PREFIX}-g++'\n"\ + "ld = '${MY_MINGW_PREFIX}-ld'\n"\ + "objcopy = '${MY_MINGW_PREFIX}-objcopy'\n"\ + "pkg-config = 'pkg-config'\n"\ + "strip = '${MY_MINGW_PREFIX}-strip'\n"\ + "windres = '${MY_MINGW_PREFIX}-windres'\n"\ + "exe_wrapper = 'wine64'\n"\ + "[properties]\n"\ + "c_args = []\n"\ + "c_link_args = []\n"\ + "[host_machine]\n"\ + "cpu = 'x86_64'\n"\ + "cpu_family = 'x86_64'\n"\ + "endian = 'little'\n"\ + "system = 'windows'\n"\ + > ${MY_TOOLCHAIN_FILE_MESON} + +RUN apk add \ + autoconf \ + automake \ + bash \ + binutils \ + bison \ + bzip2 \ + cmake \ + flex \ + g++ \ + gcc \ + gettext \ + git \ + gmp \ + gmp-dev \ + gperf \ + gtkmm3-dev \ + intltool \ + libtool \ + linux-headers \ + make \ + mpc1 \ + mpc1-dev \ + mpfr \ + mpfr-dev \ + ninja \ + openssl \ + p7zip \ + patch \ + perl \ + py3-pip \ + python3 \ + ruby \ + unzip \ + wine \ + wget \ + xz \ + zlib \ + zlib-dev SHELL [ "/bin/bash", "-c" ] RUN set -ex \ \ - && apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get upgrade --no-install-recommends -y \ - && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ - ca-certificates \ - gcc \ - g++ \ - zlib1g-dev \ - libssl-dev \ - libgmp-dev \ - libmpfr-dev \ - libmpc-dev \ - libisl-dev \ - libssl3 \ - libgmp10 \ - libmpfr6 \ - libmpc3 \ - libisl23 \ - xz-utils \ - ninja-build \ - texinfo \ - meson \ - gnupg \ - bzip2 \ - patch \ - gperf \ - bison \ - file \ - flex \ - make \ - yasm \ - wget \ - zip \ - git + && mkdir -p \ + ${MY_MINGW}/bin \ + ${MY_MINGW}/include \ + ${MY_MINGW}/lib/pkgconfig \ + ${MY_MINGW}/lib64/pkgconfig +ENV LDFLAGS="-L${MY_MINGW}/lib -L${MY_MINGW}/lib64" +ENV PATH="${MY_MINGW}/bin:/usr/local/bin:${PATH}" +ENV PKG_CONFIG_PATH="${MY_MINGW}/lib/pkgconfig:${MY_MINGW}/lib64/pkgconfig" + +ARG BINUTILS_VERSION=2.41 +ENV MY_BINUTILS_VERSION=${BINUTILS_VERSION} RUN set -ex \ \ - && wget -q https://pkg-config.freedesktop.org/releases/pkg-config-${PKG_CONFIG_VERSION}.tar.gz -O - | tar -xz \ - && wget -q https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz -O - | tar -xz \ - && wget -q https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.xz -O - | tar -xJ \ - && wget -q https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v${MINGW_VERSION}.tar.bz2 -O - | tar -xj \ - && wget -q https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz -O - | tar -xJ \ - && wget -q https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/nasm-${NASM_VERSION}.tar.xz -O - | tar -xJ - -RUN set -ex \ - \ - && mkdir -p ${MINGW}/include ${MINGW}/lib/pkgconfig \ - && chmod 0777 -R /mnt ${MINGW} \ - \ - && cd pkg-config-${PKG_CONFIG_VERSION} \ + && wget -q https://ftp.gnu.org/gnu/binutils/binutils-${MY_BINUTILS_VERSION}.tar.xz -O - | tar -xJ \ + && cd binutils-${MY_BINUTILS_VERSION} \ && ./configure \ - --prefix=/usr/local \ - --with-pc-path=${MINGW}/lib/pkgconfig \ - --with-internal-glib \ - --disable-shared \ - --disable-nls \ - && make -j`nproc` \ - && make install - -RUN set -ex \ - \ - && cd cmake-${CMAKE_VERSION} \ - && ./configure \ - --prefix=/usr/local \ - --parallel=`nproc` \ - && make -j`nproc` \ - && make install - -RUN set -ex \ - \ - && cd binutils-${BINUTILS_VERSION} \ - && ./configure \ - --prefix=/usr/local \ - --target=x86_64-w64-mingw32 \ - --disable-shared \ - --enable-static \ --disable-lto \ - --disable-plugins \ --disable-multilib \ --disable-nls \ + --disable-plugins \ + --disable-shared \ --disable-werror \ + --enable-static \ + --prefix=/usr/local \ + --target=${MY_MINGW_PREFIX} \ --with-system-zlib \ - && make -j`nproc` \ - && make install + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r binutils-${MY_BINUTILS_VERSION} +ARG MINGW_VERSION=11.0.1 +ENV MY_MINGW_VERSION=${MINGW_VERSION} RUN set -ex \ \ + && wget -q https://github.com/mingw-w64/mingw-w64/archive/refs/tags/v${MINGW_VERSION}.tar.gz -O - | tar -xz \ && mkdir mingw-w64 \ && cd mingw-w64 \ - && ../mingw-w64-v${MINGW_VERSION}/mingw-w64-headers/configure \ - --prefix=/usr/local/x86_64-w64-mingw32 \ - --host=x86_64-w64-mingw32 \ + && ../mingw-w64-${MY_MINGW_VERSION}/mingw-w64-headers/configure \ --enable-sdk=all \ + --host=${MY_MINGW_PREFIX} \ + --prefix=/usr/local/${MY_MINGW_PREFIX} \ && make install +ARG GCC_VERSION=13.2.0 +ENV MY_GCC_VERSION=${GCC_VERSION} RUN set -ex \ \ + && wget -q https://ftp.gnu.org/gnu/gcc/gcc-${MY_GCC_VERSION}/gcc-${MY_GCC_VERSION}.tar.xz -O - | tar -xJ \ && mkdir gcc \ && cd gcc \ - && ../gcc-${GCC_VERSION}/configure \ - --prefix=/usr/local \ - --target=x86_64-w64-mingw32 \ - --enable-languages=c,c++ \ - --disable-shared \ - --enable-static \ - --enable-threads=posix \ - --with-system-zlib \ - --enable-libgomp \ - --enable-libatomic \ - --enable-graphite \ - --disable-libstdcxx-pch \ + && ../gcc-${MY_GCC_VERSION}/configure \ --disable-libstdcxx-debug \ - --disable-multilib \ + --disable-libstdcxx-pch \ --disable-lto \ + --disable-multilib \ --disable-nls \ --disable-werror \ - && make -j`nproc` all-gcc \ - && make install-gcc + --enable-graphite \ + --enable-languages=c,c++ \ + --enable-libatomic \ + --enable-libgomp \ + --enable-shared \ + --enable-static \ + --enable-threads=posix \ + --prefix=/usr/local \ + --target=${MY_MINGW_PREFIX} \ + --with-system-zlib \ + && make -j${MY_NUM_JOBS} all-gcc \ + && make install-gcc RUN set -ex \ \ && cd mingw-w64 \ - && ../mingw-w64-v${MINGW_VERSION}/mingw-w64-crt/configure \ - --prefix=/usr/local/x86_64-w64-mingw32 \ - --host=x86_64-w64-mingw32 \ - --enable-wildcard \ + && ../mingw-w64-${MY_MINGW_VERSION}/mingw-w64-crt/configure \ --disable-lib32 \ --enable-lib64 \ + --enable-wildcard \ + --host=${MY_MINGW_PREFIX} \ + --prefix=/usr/local/${MY_MINGW_PREFIX} \ && (make || make || make || make) \ && make install RUN set -ex \ \ && cd mingw-w64 \ - && ../mingw-w64-v${MINGW_VERSION}/mingw-w64-libraries/winpthreads/configure \ - --prefix=/usr/local/x86_64-w64-mingw32 \ - --host=x86_64-w64-mingw32 \ + && ../mingw-w64-${MY_MINGW_VERSION}/mingw-w64-libraries/winpthreads/configure \ + --enable-shared \ --enable-static \ - --disable-shared \ - && make -j`nproc` \ + --host=${MY_MINGW_PREFIX} \ + --prefix=/usr/local/${MY_MINGW_PREFIX} \ + && make -j${MY_NUM_JOBS} \ && make install RUN set -ex \ \ && cd gcc \ - && make -j`nproc` \ + && make -j${MY_NUM_JOBS} \ && make install RUN set -ex \ \ - && cd nasm-${NASM_VERSION} \ - && ./configure --prefix=/usr/local \ - && make -j`nproc` \ - && make install + && cp /usr/local/${MY_MINGW_PREFIX}/lib/*.dll ${MY_MINGW}/bin \ + && cp /usr/local/${MY_MINGW_PREFIX}/bin/*.dll ${MY_MINGW}/bin \ + && rm -r gcc gcc-${MY_GCC_VERSION} \ + && rm -r mingw-w64 mingw-w64-${MY_MINGW_VERSION} + +ARG PKG_CONFIG_VERSION=0.29.2 +ENV MY_PKG_CONFIG_VERSION=${PKG_CONFIG_VERSION} +RUN set -ex \ + \ + && wget -q https://pkg-config.freedesktop.org/releases/pkg-config-${MY_PKG_CONFIG_VERSION}.tar.gz -O - | tar -xz \ + && cd pkg-config-${MY_PKG_CONFIG_VERSION} \ + && ./configure \ + --disable-nls \ + --disable-shared \ + --prefix=/usr/local \ + --with-internal-glib \ + --with-pc-path=${MINGW}/lib/pkgconfig \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r pkg-config-${MY_PKG_CONFIG_VERSION} + +RUN python3 -m pip install --break-system-packages -U mako +RUN python3 -m pip install --break-system-packages -U meson +RUN python3 -m pip install --break-system-packages -U packaging + +ARG ZLIB_VERSION=1.3 +ENV MY_ZLIB_VERSION=${ZLIB_VERSION} +RUN set -ex \ + \ + && wget -q https://zlib.net/zlib-${MY_ZLIB_VERSION}.tar.gz -O - | tar -xz \ + && cd zlib-${MY_ZLIB_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r zlib-${MY_ZLIB_VERSION} + +ARG OPENSSL_VERSION=3.2.0 +ENV MY_OPENSSL_VERSION=${OPENSSL_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/openssl/openssl/releases/download/openssl-${MY_OPENSSL_VERSION}/openssl-${MY_OPENSSL_VERSION}.tar.gz -O - | tar -xz \ + && cd openssl-${MY_OPENSSL_VERSION} \ + && ./Configure \ + --cross-compile-prefix=${MY_MINGW_PREFIX}- \ + --prefix=${MY_MINGW} \ + mingw64 \ + no-apps \ + no-docs \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r openssl-${MY_OPENSSL_VERSION} + +ARG CURL_VERSION=8.5.0 +ENV MY_CURL_VERSION=${CURL_VERSION} +RUN set -ex \ + \ + && wget -q https://curl.se/download/curl-${MY_CURL_VERSION}.tar.gz -O - | tar -xz \ + && cd curl-${MY_CURL_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_CURL_EXE=ON \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DBUILD_TESTING=OFF \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + -DCURL_CA_BUNDLE=./cacert.pem \ + -DCURL_CA_FALLBACK=ON \ + -DCURL_DISABLE_LDAP=ON \ + -DCURL_USE_LIBPSL=OFF \ + -DCURL_USE_LIBSSH2=OFF \ + -DCURL_USE_OPENSSL=ON \ + -DCURL_ZLIB=ON \ + -DENABLE_THREADED_RESOLVER=ON \ + -DOPENSSL_USE_STATIC_LIBS=ON \ + -DUSE_LIBIDN2=OFF \ + -DUSE_WIN32_CRYPTO=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r curl-${MY_CURL_VERSION} + +ARG LIBPCRE2_VERSION=10.43-RC1 +ENV MY_LIBPCRE2_VERSION=${LIBPCRE2_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/PCRE2Project/pcre2/releases/download/pcre2-${MY_LIBPCRE2_VERSION}/pcre2-${MY_LIBPCRE2_VERSION}.tar.gz -O - | tar -xz \ + && cd pcre2-${MY_LIBPCRE2_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + -DPCRE2_BUILD_PCRE2_16=ON \ + -DPCRE2_SUPPORT_LIBBZ2=OFF \ + -DPCRE2_SUPPORT_LIBEDIT=OFF \ + -DPCRE2_SUPPORT_LIBZ=OFF \ + -DPCRE2_SUPPORT_UNICODE=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r pcre2-${MY_LIBPCRE2_VERSION} + +ARG EXPAT_VERSION=2.5.0 +ENV MY_EXPAT_VERSION=${EXPAT_VERSION} +ARG EXPAT_VERSION2=2_5_0 +ENV MY_EXPAT_VERSION2=${EXPAT_VERSION2} +RUN set -ex \ + \ + && wget -q https://github.com/libexpat/libexpat/releases/download/R_${MY_EXPAT_VERSION2}/expat-${MY_EXPAT_VERSION}.tar.gz -O - | tar -xz \ + && cd expat-${MY_EXPAT_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + -DEXPAT_BUILD_DOCS=OFF \ + -DEXPAT_BUILD_EXAMPLES=OFF \ + -DEXPAT_BUILD_TESTS=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r expat-${MY_EXPAT_VERSION} + +ARG LIBXML2_VERSION=2.12.4 +ENV MY_LIBXML2_VERSION=${LIBXML2_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/GNOME/libxml2/archive/refs/tags/v${MY_LIBXML2_VERSION}.tar.gz -O - | tar -xz \ + && cd libxml2-${MY_LIBXML2_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + -DLIBXML2_WITH_ICONV=OFF \ + -DLIBXML2_WITH_LZMA=OFF \ + -DLIBXML2_WITH_PYTHON=OFF \ + -DLIBXML2_WITH_TESTS=OFF \ + -DLIBXML2_WITH_ZLIB=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libxml2-${MY_LIBXML2_VERSION} + +ARG FREETYPE2_VERSION=2.13.2 +ENV MY_FREETYPE2_VERSION=${FREETYPE2_VERSION} +RUN set -ex \ + \ + && wget -q https://download.savannah.gnu.org/releases/freetype/freetype-${MY_FREETYPE2_VERSION}.tar.gz -O - | tar -xz \ + && cd freetype-${MY_FREETYPE2_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r freetype-${MY_FREETYPE2_VERSION} + +ARG FONTCONFIG_VERSION=2.15.0 +ENV MY_FONTCONFIG_VERSION=${FONTCONFIG_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.freedesktop.org/fontconfig/fontconfig/-/archive/${MY_FONTCONFIG_VERSION}/fontconfig-${MY_FONTCONFIG_VERSION}.tar.gz -O - | tar -xz \ + && cd fontconfig-${MY_FONTCONFIG_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Ddoc=disabled \ + -Dtests=disabled \ + -Dtools=disabled \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r fontconfig-${MY_FONTCONFIG_VERSION} + +ARG OPENAL_VERSION=1.23.1 +ENV MY_OPENAL_VERSION=${OPENAL_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/kcat/openal-soft/archive/refs/tags/${MY_OPENAL_VERSION}.tar.gz -O - | tar -xz \ + && cd openal-soft-${MY_OPENAL_VERSION} \ + && mkdir _build \ + && cd _build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && mv ${MY_MINGW}/bin/OpenAL32.dll ${MY_MINGW}/bin/openal32.dll \ + && cd ${MY_WORKDIR} \ + && rm -r openal-soft-${MY_OPENAL_VERSION} + +ARG PIXMAN_VERSION=0.43.0 +ENV MY_PIXMAN_VERSION=${PIXMAN_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.freedesktop.org/pixman/pixman/-/archive/pixman-${MY_PIXMAN_VERSION}/pixman-pixman-${MY_PIXMAN_VERSION}.tar.gz -O - | tar -xz \ + && cd pixman-pixman-${MY_PIXMAN_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dtests=disabled \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r pixman-pixman-${MY_PIXMAN_VERSION} + +ARG GLIB_VERSION=2.79.0 +ENV MY_GLIB_VERSION=${GLIB_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.gnome.org/GNOME/glib/-/archive/${MY_GLIB_VERSION}/glib-${MY_GLIB_VERSION}.tar.gz -O - | tar -xz \ + && cd glib-${MY_GLIB_VERSION} \ + && rmdir subprojects/gvdb \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Ddocumentation=false \ + -Dforce_posix_threads=true \ + -Dinstalled_tests=false \ + -Dintrospection=disabled \ + -Dman-pages=disabled \ + -Dtests=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r glib-${MY_GLIB_VERSION} RUN set -ex \ \ - && rm -r pkg-config-${PKG_CONFIG_VERSION} \ - && rm -r cmake-${CMAKE_VERSION} \ - && rm -r binutils-${BINUTILS_VERSION} \ - && rm -r mingw-w64 mingw-w64-v${MINGW_VERSION} \ - && rm -r gcc gcc-${GCC_VERSION} \ - && rm -r nasm-${NASM_VERSION} + && ln -sf /usr/bin/glib-compile-resources /mingw64/bin/ \ + && ln -sf /usr/bin/glib-compile-schemas /mingw64/bin/ + +ARG MESA_VERSION=23.3.3 +ENV MY_MESA_VERSION=${MESA_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.freedesktop.org/mesa/mesa/-/archive/mesa-${MY_MESA_VERSION}/mesa-mesa-${MY_MESA_VERSION}.tar.gz -O - | tar -xz \ + && cd mesa-mesa-${MY_MESA_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Degl=enabled \ + -Dgles1=enabled \ + -Dgles2=enabled \ + -Dopengl=true \ + -Dshared-glapi=true \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r mesa-mesa-${MY_MESA_VERSION} + +ARG CAIRO_VERSION=1.18.0 +ENV MY_CAIRO_VERSION=${CAIRO_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.freedesktop.org/cairo/cairo/-/archive/1.18.0/cairo-${MY_CAIRO_VERSION}.tar.gz -O - | tar -xz \ + && cd cairo-${MY_CAIRO_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Ddwrite=enabled \ + -Dfontconfig=enabled \ + -Dfreetype=enabled \ + -Dglib=enabled \ + -Dgtk_doc=false \ + -Dpng=enabled \ + -Dquartz=disabled \ + -Dtee=disabled \ + -Dtests=disabled \ + -Dxlib-xcb=disabled \ + -Dxlib=disabled \ + -Dzlib=enabled \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r cairo-${MY_CAIRO_VERSION} + +ARG PANGO_VERSION=1.50.1 +ENV MY_PANGO_VERSION=${PANGO_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.gnome.org/GNOME/pango/-/archive/${MY_PANGO_VERSION}/pango-${MY_PANGO_VERSION}.tar.gz -O - | tar -xz \ + && cd pango-${MY_PANGO_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dcairo=enabled \ + -Dfontconfig=enabled \ + -Dfreetype=enabled \ + -Dgtk_doc=false \ + -Dharfbuzz:cairo=enabled \ + -Dharfbuzz:directwrite=enabled \ + -Dharfbuzz:freetype=enabled \ + -Dharfbuzz:gdi=enabled \ + -Dharfbuzz:glib=enabled \ + -Dharfbuzz:gobject=enabled \ + -Dharfbuzz:graphite2=disabled \ + -Dharfbuzz:introspection=disabled \ + -Dharfbuzz:tests=disabled \ + -Dinstall-tests=false \ + -Dxft=disabled \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r pango-${MY_PANGO_VERSION} + +ARG ATK_VERSION=2.38.0 +ENV MY_ATK_VERSION=${ATK_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.gnome.org/GNOME/atk/-/archive/${MY_ATK_VERSION}/atk-${MY_ATK_VERSION}.tar.gz -O - | tar -xz \ + && cd atk-${MY_ATK_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Ddocs=false \ + -Dintrospection=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r atk-${MY_ATK_VERSION} + +ARG LIBEPOXY_VERSION=1.5.10 +ENV MY_LIBEPOXY_VERSION=${LIBEPOXY_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/anholt/libepoxy/archive/refs/tags/${MY_LIBEPOXY_VERSION}.tar.gz -O - | tar -xz \ + && cd libepoxy-${MY_LIBEPOXY_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Ddocs=false \ + -Dtests=false \ + -Dx11=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r libepoxy-${MY_LIBEPOXY_VERSION} + +ARG GDK_PIXBUF_VERSION=2.42.10 +ENV MY_GDK_PIXBUF_VERSION=${GDK_PIXBUF_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/archive/${MY_GDK_PIXBUF_VERSION}/gdk-pixbuf-${MY_GDK_PIXBUF_VERSION}.tar.gz -O - | tar -xz \ + && cd gdk-pixbuf-${MY_GDK_PIXBUF_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dbuiltin_loaders=all \ + -Ddocs=false \ + -Dgtk_doc=false \ + -Dinstalled_tests=false \ + -Dintrospection=disabled \ + -Dman=false \ + -Dtests=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r gdk-pixbuf-${MY_GDK_PIXBUF_VERSION} + +ARG GTK3_VERSION=3.24.40 +ENV MY_GTK3_VERSION=${GTK3_VERSION} +RUN set -ex \ + \ + && wget -q https://gitlab.gnome.org/GNOME/gtk/-/archive/${MY_GTK3_VERSION}/gtk-${MY_GTK3_VERSION}.tar.gz -O - | tar -xz \ + && cd gtk-${MY_GTK3_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dbroadway_backend=false \ + -Dbuiltin_immodules=all \ + -Ddemos=false \ + -Dexamples=false \ + -Dgtk_doc=false \ + -Dinstalled_tests=false \ + -Dintrospection=false \ + -Dman=false \ + -Dquartz_backend=false \ + -Dtests=false \ + -Dwayland_backend=false \ + -Dwin32_backend=true \ + -Dx11_backend=false \ + -Dxinerama=no \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r gtk-${MY_GTK3_VERSION} + +ARG LIBSIGCPP_VERSION=2.12 +ENV MY_LIBSIGCPP_VERSION=${LIBSIGCPP_VERSION} +ARG LIBSIGCPP_VERSION2=${LIBSIGCPP_VERSION}.1 +ENV MY_LIBSIGCPP_VERSION2=${LIBSIGCPP_VERSION2} +RUN set -ex \ + \ + && wget -q "https://download.gnome.org/sources/libsigc++/${MY_LIBSIGCPP_VERSION}/libsigc%2B%2B-${MY_LIBSIGCPP_VERSION2}.tar.xz" -O - | tar -xJ \ + && cd libsigc++-${MY_LIBSIGCPP_VERSION2} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dbuild-documentation=false \ + -Dbuild-examples=false \ + -Dbuild-tests=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r libsigc++-${MY_LIBSIGCPP_VERSION2} + +ARG GLIBMM_VERSION=2.66 +ENV MY_GLIBMM_VERSION=${GLIBMM_VERSION} +ARG GLIBMM_VERSION2=${GLIBMM_VERSION}.6 +ENV MY_GLIBMM_VERSION2=${GLIBMM_VERSION2} +RUN set -ex \ + \ + && wget -q https://download.gnome.org/sources/glibmm/${MY_GLIBMM_VERSION}/glibmm-${MY_GLIBMM_VERSION2}.tar.xz -O - | tar -xJ \ + && cd glibmm-${MY_GLIBMM_VERSION2} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dbuild-examples=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r glibmm-${MY_GLIBMM_VERSION2} + +ARG CAIROMM_VERSION=1.14.5 +ENV MY_CAIROMM_VERSION=${CAIROMM_VERSION} +RUN set -ex \ + \ + && wget -q https://www.cairographics.org/releases/cairomm-${MY_CAIROMM_VERSION}.tar.xz -O - | tar -xJ \ + && cd cairomm-${MY_CAIROMM_VERSION} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dbuild-documentation=false \ + -Dbuild-examples=false \ + -Dbuild-tests=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r cairomm-${MY_CAIROMM_VERSION} + +ARG PANGOMM_VERSION=2.46 +ENV MY_PANGOMM_VERSION=${PANGOMM_VERSION} +ARG PANGOMM_VERSION2=${PANGOMM_VERSION}.3 +ENV MY_PANGOMM_VERSION2=${PANGOMM_VERSION2} +RUN set -ex \ + \ + && wget -q https://download.gnome.org/sources/pangomm/${MY_PANGOMM_VERSION}/pangomm-${MY_PANGOMM_VERSION2}.tar.xz -O - | tar -xJ \ + && cd pangomm-${MY_PANGOMM_VERSION2} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dbuild-documentation=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r pangomm-${MY_PANGOMM_VERSION2} + +ARG ATKMM_VERSION=2.28 +ENV MY_ATKMM_VERSION=${ATKMM_VERSION} +ARG ATKMM_VERSION2=${ATKMM_VERSION}.1 +ENV MY_ATKMM_VERSION2=${ATKMM_VERSION2} +RUN set -ex \ + \ + && wget -q https://download.gnome.org/sources/atkmm/${MY_ATKMM_VERSION}/atkmm-${MY_ATKMM_VERSION2}.tar.xz -O - | tar -xJ \ + && cd atkmm-${MY_ATKMM_VERSION2} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dbuild-documentation=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r atkmm-${MY_ATKMM_VERSION2} + +ARG GTKMM_VERSION=3.24 +ENV MY_GTKMM_VERSION=${GTKMM_VERSION} +ARG GTKMM_VERSION2=${GTKMM_VERSION}.8 +ENV MY_GTKMM_VERSION2=${GTKMM_VERSION2} +RUN set -ex \ + \ + && wget -q https://download.gnome.org/sources/gtkmm/${MY_GTKMM_VERSION}/gtkmm-${MY_GTKMM_VERSION2}.tar.xz -O - | tar -xJ \ + && cd gtkmm-${MY_GTKMM_VERSION2} \ + && meson setup \ + --cross-file ${MY_TOOLCHAIN_FILE_MESON} \ + --prefix=${MY_MINGW} \ + -Dbuild-demos=false \ + -Dbuild-documentation=false \ + -Dbuild-tests=false \ + _build \ + && meson compile \ + -C _build \ + && meson install \ + -C _build \ + && cd ${MY_WORKDIR} \ + && rm -r gtkmm-${MY_GTKMM_VERSION2} + +ARG FMT_VERSION=10.2.1 +ENV MY_FMT_VERSION=${FMT_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/fmtlib/fmt/archive/refs/tags/${MY_FMT_VERSION}.tar.gz -O - | tar -xz \ + && cd fmt-${MY_FMT_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DFMT_DOC=OFF \ + -DFMT_TEST=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r fmt-${MY_FMT_VERSION} + +ARG SPDLOG_VERSION=1.13.0 +ENV MY_SPDLOG_VERSION=${SPDLOG_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/gabime/spdlog/archive/refs/tags/v${MY_SPDLOG_VERSION}.tar.gz -O - | tar -xz \ + && cd spdlog-${MY_SPDLOG_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + -DSPDLOG_BUILD_EXAMPLE=OFF \ + -DSPDLOG_BUILD_SHARED=ON \ + -DSPDLOG_BUILD_STATIC=ON \ + -DSPDLOG_BUILD_TESTS=OFF \ + -DSPDLOG_FMT_EXTERNAL=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r spdlog-${MY_SPDLOG_VERSION} + +ARG OGG_VERSION=1.3.5 +ENV MY_OGG_VERSION=${OGG_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/xiph/ogg/archive/refs/tags/v${MY_OGG_VERSION}.tar.gz -O - | tar -xz \ + && cd ogg-${MY_OGG_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r ogg-${MY_OGG_VERSION} + +ARG VORBIS_VERSION=1.3.7 +ENV MY_VORBIS_VERSION=${VORBIS_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/xiph/vorbis/archive/refs/tags/v${MY_VORBIS_VERSION}.tar.gz -O - | tar -xz \ + && cd vorbis-${MY_VORBIS_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r vorbis-${MY_VORBIS_VERSION} + +ARG FLAC_VERSION=1.4.3 +ENV MY_FLAC_VERSION=${FLAC_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/xiph/flac/archive/refs/tags/${MY_FLAC_VERSION}.tar.gz -O - | tar -xz \ + && cd flac-${MY_FLAC_VERSION} \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + -DINSTALL_MANPAGES=OFF \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r flac-${MY_FLAC_VERSION} + +ARG SFML_VERSION=2.6.1 +ENV MY_SFML_VERSION=${SFML_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/SFML/SFML/archive/refs/tags/${MY_SFML_VERSION}.tar.gz -O - | tar -xz \ + && cd SFML-${MY_SFML_VERSION} \ + && sed -i s/set_target_properties\(\$\{target\}\ PROPERTIES\ PREFIX\ \"\"\)// \ + cmake/Macros.cmake \ + && sed -i s/set_target_properties\(\$\{target\}\ PROPERTIES\ IMPORT_SUFFIX\ \"\.a\"\)// \ + cmake/Macros.cmake \ + && mkdir build \ + && cd build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r SFML-${MY_SFML_VERSION} + +ARG LIBSODIUM_VERSION=1.0.19 +ENV MY_LIBSODIUM_VERSION=${LIBSODIUM_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/jedisct1/libsodium/archive/refs/tags/${MY_LIBSODIUM_VERSION}-RELEASE.tar.gz -O - | tar -xz \ + && cd libsodium-${MY_LIBSODIUM_VERSION}-RELEASE \ + && CFLAGS="-Ofast -fomit-frame-pointer -m64 -mtune=westmere" ./configure \ + --enable-shared \ + --enable-static \ + --host=${MY_MINGW_PREFIX} \ + --prefix=${MY_MINGW} \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r libsodium-${MY_LIBSODIUM_VERSION}-RELEASE + +ARG BOOST_MAJOR_VERSION=1 +ENV MY_BOOST_MAJOR_VERSION=${BOOST_MAJOR_VERSION} +ARG BOOST_MINOR_VERSION=84 +ENV MY_BOOST_MINOR_VERSION=${BOOST_MINOR_VERSION} +ARG BOOST_PATCH_VERSION=0 +ENV MY_BOOST_PATCH_VERSION=${BOOST_PATCH_VERSION} +ENV MY_BOOST_VERSION=${MY_BOOST_MAJOR_VERSION}.${MY_BOOST_MINOR_VERSION}.${MY_BOOST_PATCH_VERSION} +ENV MY_BOOST_VERSION2=${MY_BOOST_MAJOR_VERSION}_${MY_BOOST_MINOR_VERSION}_${MY_BOOST_PATCH_VERSION} +RUN set -ex \ + \ + && wget -q https://boostorg.jfrog.io/artifactory/main/release/${MY_BOOST_VERSION}/source/boost_${MY_BOOST_VERSION2}.tar.gz -O - | tar -xz \ + && cd boost_${MY_BOOST_VERSION2} \ + && echo "using gcc : gcc : ${MY_MINGW_PREFIX}-g++ ;" \ + >./user-config.jam \ + && ./bootstrap.sh \ + --prefix=${MY_MINGW} \ + --with-libraries=atomic,chrono,date_time,filesystem,random,regex,serialization,system,thread \ + address-model=64 \ + architecture=x86 \ + link=static,shared \ + target-os=windows \ + threading=multi \ + variant=release \ + && ./b2 \ + --prefix=${MY_MINGW} \ + --user-config=./user-config.jam \ + address-model=64 \ + architecture=x86 \ + link=static,shared \ + target-os=windows \ + threading=multi \ + variant=release \ + install \ + && cd ${MY_WORKDIR} \ + && rm -r boost_${MY_BOOST_VERSION2} + +ARG WXWIDGETS_VERSION=3.2.4 +ENV MY_WXWIDGETS_VERSION=${WXWIDGETS_VERSION} +RUN set -ex \ + \ + && wget -q https://github.com/wxWidgets/wxWidgets/releases/download/v${MY_WXWIDGETS_VERSION}/wxWidgets-${MY_WXWIDGETS_VERSION}.tar.bz2 -O - | tar -xj \ + && cd wxWidgets-${MY_WXWIDGETS_VERSION} \ + && mkdir _build \ + && cd _build \ + && cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_STATIC_LIBS=ON \ + -DCMAKE_INSTALL_PREFIX=${MY_MINGW} \ + -DwxBUILD_MONOLITHIC=ON \ + -DwxUSE_OPENGL=ON \ + -DwxUSE_UNICODE_UTF8=ON \ + && make -j${MY_NUM_JOBS} \ + && make install \ + && cd ${MY_WORKDIR} \ + && rm -r wxWidgets-${MY_WXWIDGETS_VERSION} RUN set -ex \ \ - && apt-get remove --purge -y file gcc g++ zlib1g-dev libssl-dev libgmp-dev libmpfr-dev libmpc-dev libisl-dev \ - && apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub \ - && echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" > /etc/apt/sources.list.d/cuda.list \ - && apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ - cuda-nvcc-${NVCC_VERSION:0:2}-${NVCC_VERSION:3:1} + && mv ${MY_MINGW}/lib/*.dll ${MY_MINGW}/bin \ + && chmod 0777 -R ${MY_MINGW} -RUN set -ex \ - \ - && ln -s /usr/bin/gcc /usr/local/cuda/bin/gcc \ - && ln -s /usr/bin/g++ /usr/local/cuda/bin/g++ - -RUN set -ex \ - \ - && apt-get remove --purge -y gnupg \ - && apt-get autoremove --purge -y \ - && apt-get clean diff --git a/scripts/make_common.sh b/scripts/make_common.sh index 26cba3fb..f26addb1 100755 --- a/scripts/make_common.sh +++ b/scripts/make_common.sh @@ -37,7 +37,7 @@ mkdir -p ../${BUILD_ROOT}/${BUILD_FOLDER} pushd ../${BUILD_ROOT}/${BUILD_FOLDER} if [ "${IS_MINGW}" == "1" ]; then - TOOLCHAIN=$(realpath ../../cmake/mingw-w64-x86_64.cmake) + TOOLCHAIN=$(realpath /cmake_toolchain.cmake) CMAKE_ADDITIONAL_OPTS=-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} fi diff --git a/scripts/make_mingw64.sh b/scripts/make_mingw64.sh index 1b63343e..6df33d5d 100755 --- a/scripts/make_mingw64.sh +++ b/scripts/make_mingw64.sh @@ -1,5 +1,23 @@ #!/bin/bash +# #!/bin/bash +# +# pushd "$(dirname "$0")/.." +# scripts/make_common.sh "${1}" "${2}" 1 +# popd +# +BUILD_TYPE=$1 +BUILD_CLEAN=$2 -pushd "$(dirname "$0")/.." -scripts/make_common.sh "${1}" "${2}" 1 -popd +SOURCE_DIR=$(dirname "$0")/.. +SOURCE_DIR=$(realpath ${SOURCE_DIR}) + +NAME=mingw64 +BUILD_ARCH=64_bit + +docker stop repertory_${NAME} +docker rm repertory_${NAME} +docker build --build-arg NUM_JOBS=${MY_NUM_JOBS} -t repertory:${NAME} - < ${SOURCE_DIR}/docker/${BUILD_ARCH}/${NAME} && + docker run -td -u $(id -u):$(id -g) --name repertory_${NAME} -w ${SOURCE_DIR} -v ${SOURCE_DIR}:${SOURCE_DIR}:rw,z repertory:${NAME} && + docker exec repertory_${NAME} /bin/bash -c "${SOURCE_DIR}/scripts/make_common.sh ${BUILD_TYPE} "${BUILD_CLEAN}" 1" +docker stop repertory_${NAME} +docker rm repertory_${NAME} diff --git a/scripts/make_win32.cmd b/scripts/make_win32.cmd deleted file mode 100644 index ec1b25a6..00000000 --- a/scripts/make_win32.cmd +++ /dev/null @@ -1,5 +0,0 @@ -@echo off - -pushd "%~dp0%.." -mingw64 scripts/make_common.sh "%1" "%2" 0 1 -popd diff --git a/scripts/run_docker_shell.sh b/scripts/run_docker_shell.sh index efdd83da..1068cfa0 100755 --- a/scripts/run_docker_shell.sh +++ b/scripts/run_docker_shell.sh @@ -1,5 +1,15 @@ #!/bin/bash +NUM_JOBS=${MY_NUM_JOBS} +if [[ -z "${NUM_JOBS}" ]]; then + NUM_JOBS=$(getconf _NPROCESSORS_ONLN 2> /dev/null || getconf NPROCESSORS_ONLN 2> /dev/null || echo 1) + if [ "${NUM_JOBS}" -gt "2" ]; then + NUM_JOBS=$(expr ${NUM_JOBS} - 2) + elif [ "${NUM_JOBS}" -gt "1" ]; then + NUM_JOBS=$(expr ${NUM_JOBS} - 1) + fi +fi + pushd "$(dirname "$0")" CURRENT_DIR=$(pwd) @@ -14,15 +24,17 @@ else fi TAG=repertory_shell - CONTAINER=${TAG}_shell_${NAME} + CONTAINER=${TAG}_${NAME} docker stop ${CONTAINER} docker rm ${CONTAINER} - docker build -t ${TAG}:${NAME} - < docker/${TYPE}/${NAME} && + docker build --build-arg NUM_JOBS=$NUM_JOBS -t ${TAG}:${NAME} - < docker/${TYPE}/${NAME} && docker run -itd --device /dev/fuse --cap-add SYS_ADMIN --name ${CONTAINER} -v $(pwd):/mnt ${TAG}:${NAME} && + # docker run -itd --device /dev/fuse --cap-add SYS_ADMIN --name ${CONTAINER} ${TAG}:${NAME} && docker exec -it ${CONTAINER} /bin/bash docker stop ${CONTAINER} docker rm ${CONTAINER} + docker system prune -f fi popd popd