cmake_minimum_required(VERSION 3.29) # IMPORTANT NOTE # # We don't use boost::system in Krita, but we should pass at least # something to ./b2 to make sure boost doesn't try to build anything # non-header-only; (boost::system itself is a header-only library, so # it will not result in any module either!) project(ext_boost) include(${CMAKE_SOURCE_DIR}/../cmake/base-dep-options.cmake) if(WIN32) if(MINGW) string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1" KRITA_boost_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION}) # Detect architecture if(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64|aarch64|arm64") set(BOOST_ARCH "arm") set(BOOST_ADDR_MODEL "64") set(BOOST_PLATFORM_TAG "a64") # ARM64 platform tag else() set(BOOST_ARCH "x86") set(BOOST_ADDR_MODEL "64") set(BOOST_PLATFORM_TAG "x64") # x86-64 platform tag endif() set (BUILD_ARGS -j${SUBMAKE_JOBS} linkflags="${SECURITY_SHARED_LINKER_FLAGS}" --with-system --build-dir=build-dir toolset=gcc variant=release link=shared threading=multi architecture=${BOOST_ARCH} address-model=${BOOST_ADDR_MODEL}) ExternalProject_Add( ext_boost DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} URL https://archives.boost.io/release/1.90.0/source/boost_1_90_0.tar.bz2 URL_HASH SHA256=49551aff3b22cbc5c5a9ed3dbc92f0e23ea50a0f7325b0d198b705e8ee3fc305 CONFIGURE_COMMAND /bootstrap.bat gcc --prefix=${EXTPREFIX} BUILD_COMMAND ${CMAKE_COMMAND} -DPREFIX=${EXTPREFIX} -P ${CMAKE_CURRENT_SOURCE_DIR}/run-b2-with-destdir.cmake -- ${BUILD_ARGS} INSTALL_COMMAND ${CMAKE_COMMAND} -DPREFIX=${EXTPREFIX} -P ${CMAKE_CURRENT_SOURCE_DIR}/run-b2-with-destdir.cmake -- ${BUILD_ARGS} -d0 install UPDATE_COMMAND "" BUILD_IN_SOURCE 1 ) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") message(STATUS "Applying Clang override to Boost...") set(_user_config "using gcc : : ${CMAKE_CXX_COMPILER} ;") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/user-config.jam "${_user_config}" ) ExternalProject_Add_Step( ext_boost configure_clang_mingw COMMAND ${CMAKE_COMMAND} -E rm /project-config.jam DEPENDEES configure DEPENDERS build ) ExternalProject_Add_Step( ext_boost patch_clang_mingw COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/user-config.jam /tools/build/src/user-config.jam DEPENDEES patch DEPENDERS configure ) endif() else() set (BUILD_ARGS -j${SUBMAKE_JOBS} --with-system --build-dir=build-dir toolset=msvc variant=release link=shared threading=multi architecture=x86 install) # Boost.Build cannot append arbitrary flags to MSVC from the command line. # It becomes unable to detect the target architecture or defaults to x86 only. # On top of that, parameterizing the linkflags flag breaks the MinGW build. ExternalProject_Add( ext_boost DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} URL https://archives.boost.io/release/1.90.0/source/boost_1_90_0.tar.bz2 URL_HASH SHA256=49551aff3b22cbc5c5a9ed3dbc92f0e23ea50a0f7325b0d198b705e8ee3fc305 CONFIGURE_COMMAND /bootstrap.bat msvc --prefix=${EXTPREFIX} BUILD_COMMAND ${CMAKE_COMMAND} -DPREFIX=${EXTPREFIX} -P ${CMAKE_CURRENT_SOURCE_DIR}/run-b2-with-destdir.cmake -- ${BUILD_ARGS} INSTALL_COMMAND ${CMAKE_COMMAND} -DPREFIX=${EXTPREFIX} -P ${CMAKE_CURRENT_SOURCE_DIR}/run-b2-with-destdir.cmake -- ${BUILD_ARGS} install UPDATE_COMMAND "" BUILD_IN_SOURCE 1 ) if (NOT DEFINED MSVC_TOOLSET_VERSION) string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" KRITA_boost_COMPILER ${CMAKE_CXX_COMPILER}) string(REGEX REPLACE "^([0-9]+)\\.([0-9]).+$" "\\1\\2" KRITA_boost_COMPILER_VERSION ${KRITA_boost_COMPILER}) else() set(KRITA_boost_COMPILER_VERSION ${MSVC_TOOLSET_VERSION}) endif() endif() elseif(ANDROID) set (BUILD_ARGS --with-libraries=system --boost=1.90.0 --arch=${ANDROID_ABI} ${CMAKE_ANDROID_NDK}) ExternalProject_Add( ext_boost DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} DOWNLOAD_NAME boost-6dcf8c41657d2e5829253009137302a576a174cb.tar.gz URL https://github.com/moritz-wundke/Boost-for-Android/archive/6dcf8c41657d2e5829253009137302a576a174cb.tar.gz URL_HASH SHA256=ebdab9383a15e21c0e0829c6c483276f5d04c8f0612227021713c4f761594a95 PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-Add-support-for-NDK-27.X-and-30.0.patch CONFIGURE_COMMAND "" # no prefix is passed, we will install it ourselves! BUILD_COMMAND /build-android.sh ${BUILD_ARGS} INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Installing Boost..." UPDATE_COMMAND "" BUILD_IN_SOURCE 1 ) ExternalProject_Add_Step( ext_boost pre_install COMMAND ${CMAKE_COMMAND} -DSRC=/build/out/${ANDROID_ABI}/lib -DDST=${EXTPREFIX}/lib -P ${KRITA_CI_INSTALL_DIRECTORY} COMMAND ${CMAKE_COMMAND} -DSRC=/build/out/${ANDROID_ABI}/include -DDST=${EXTPREFIX}/include -P ${KRITA_CI_INSTALL_DIRECTORY} DEPENDERS install ) else() if(APPLE) set(MACOS_BOOST_ARGS "architecture=arm+x86" "cxxflags=${MACOS_ARCH_FLAGS}") endif() ExternalProject_Add( ext_boost DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} URL https://archives.boost.io/release/1.90.0/source/boost_1_90_0.tar.bz2 URL_HASH SHA256=49551aff3b22cbc5c5a9ed3dbc92f0e23ea50a0f7325b0d198b705e8ee3fc305 CONFIGURE_COMMAND /bootstrap.sh --prefix=${EXTPREFIX} --with-libraries=system BUILD_COMMAND ${CMAKE_COMMAND} -DPREFIX=${EXTPREFIX} -P ${CMAKE_CURRENT_SOURCE_DIR}/run-b2-with-destdir.cmake -- ${MACOS_BOOST_ARGS} INSTALL_COMMAND ${CMAKE_COMMAND} -DPREFIX=${EXTPREFIX} -P ${CMAKE_CURRENT_SOURCE_DIR}/run-b2-with-destdir.cmake -- ${MACOS_BOOST_ARGS} -d0 install UPDATE_COMMAND "" BUILD_IN_SOURCE 1 ) endif() krita_add_to_ci_targets(ext_boost)