Warning, /graphics/krita/3rdparty/KritaExternalProject.cmake is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2023 Ivan Santa Maria <ghevan@gmail.com>
0002 # SPDX-License-Ref: BSD-3-Clause
0003
0004 include(ExternalProject)
0005
0006 set(KRITA_MACOS_EXTERNAL_PACKAGE_NAME "package_build_fat.tar.gz")
0007 # used always for stepped universal or non universal builds.
0008 set(PARENT_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
0009 set(KRITA_MACOS_CONSOLIDATE_SCRIPT ${PARENT_CMAKE_SOURCE_DIR}/tools/macos_consolidate.sh)
0010
0011 set(kis_ONE_VALUE_ARGS URL URL_HASH DOWNLOAD_DIR WORKING_DIRECTORY
0012 GIT_REPOSITORY GIT_TAG GIT_REMOTE_UPDATE_STRATEGY GIT_SUBMODULES_RECURSE GIT_PROGRESS
0013 INSTALL_DIR
0014 )
0015 set(kis_MULTI_VALUE_ARGS PATCH_COMMAND CONFIGURE_ARGS CMAKE_ARGS DEPENDS
0016 GIT_SUBMODULES
0017 CONFIGURE_COMMAND BUILD_COMMAND INSTALL_COMMAND UPDATE_COMMAND
0018 )
0019
0020
0021 # If APPLE call the muti build arch macro
0022 # in other case pass args to ExternalProject_Add
0023 # or if MESON given, make use of kis_ExternalProject_Add_meson
0024 macro(kis_ExternalProject_Add_with_separate_builds_apple)
0025
0026 if(APPLE)
0027 kis_ExternalProject_Add_macos(${ARGN})
0028 else()
0029 set(options MESON AUTOMAKE)
0030 cmake_parse_arguments(EXT "${options}" "" "" ${ARGN})
0031
0032 if(${EXT_MESON})
0033 kis_ExternalProject_Add_meson(${EXT_UNPARSED_ARGUMENTS})
0034 else()
0035 # parsed arguments will not pass to child macro
0036 set(oneValueArgs WORKING_DIRECTORY)
0037 set(multiValueArgs CONFIGURE_ARGS)
0038 cmake_parse_arguments(EXT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
0039
0040 ExternalProject_Add(${EXT_UNPARSED_ARGUMENTS})
0041 endif()
0042 endif()
0043 endmacro()
0044
0045
0046 # Convenience macro to set all common MESON configuration
0047 macro(kis_ExternalProject_Add_meson EXT_NAME)
0048 set(onValueArgs "${kis_ONE_VALUE_ARGS}")
0049 set(multiValueArgs "${kis_MULTI_VALUE_ARGS}")
0050 cmake_parse_arguments(EXT "${options}" "${onValueArgs}" "${multiValueArgs}" ${ARGN})
0051
0052 ExternalProject_Add(
0053 ${EXT_NAME}
0054 DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0055 URL ${EXT_URL}
0056 URL_HASH ${EXT_URL_HASH}
0057 GIT_REPOSITORY ${EXT_GIT_REPOSITORY}
0058 GIT_TAG ${EXT_GIT_TAG}
0059
0060 PATCH_COMMAND ${EXT_PATCH_COMMAND}
0061
0062 CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env
0063 PYTHONPATH=${_krita_pythonpath}
0064 PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1
0065 ${MESON_BINARY_PATH} setup <BINARY_DIR> <SOURCE_DIR>
0066 --libdir=lib
0067 -Dbuildtype=$<IF:$<CONFIG:Debug>,debug,debugoptimized>
0068 ${EXT_CONFIGURE_ARGS}
0069
0070 BUILD_COMMAND ${CMAKE_COMMAND} -E env
0071 PYTHONPATH=${_krita_pythonpath}
0072 ${MESON_BINARY_PATH} compile -C <BINARY_DIR> -j${SUBMAKE_JOBS}
0073
0074 INSTALL_COMMAND ${CMAKE_COMMAND} -E env
0075 PYTHONPATH=${_krita_pythonpath}
0076 ${MESON_BINARY_PATH} install -C <BINARY_DIR>
0077
0078 UPDATE_COMMAND ""
0079
0080 DEPENDS ${EXT_DEPENDS}
0081 )
0082 endmacro()
0083
0084
0085 # simplifies double arch compile con macos for external libraries not
0086 # supporting one step universal build
0087 # only define CONFIGURE, BUILD, INSTALL for custom build steps
0088 macro(kis_ExternalProject_Add_macos EXT_NAME)
0089 set(options MESON AUTOMAKE)
0090 set(onValueArgs URL URL_HASH DOWNLOAD_DIR WORKING_DIRECTORY
0091 GIT_REPOSITORY GIT_TAG GIT_REMOTE_UPDATE_STRATEGY GIT_SUBMODULES_RECURSE GIT_PROGRESS
0092 INSTALL_DIR
0093 )
0094 set(multiValueArgs PATCH_COMMAND CONFIGURE_ARGS CMAKE_ARGS DEPENDS
0095 GIT_SUBMODULES
0096 CONFIGURE_COMMAND BUILD_COMMAND INSTALL_COMMAND UPDATE_COMMAND
0097 )
0098 cmake_parse_arguments(EXT "${options}" "${onValueArgs}" "${multiValueArgs}" ${ARGN})
0099
0100
0101 macro(compile_arch ARCH DEPENDEES EXT_MESON)
0102 # Some packages need special configure to set architecture
0103 string(REPLACE "@ARCH@" ${ARCH} EXT_CONFIGURE_COMMAND_ARCH "${EXT_CONFIGURE_COMMAND}")
0104 string(REPLACE "@ARCH@" ${ARCH} EXT_WORKING_DIRECTORY_ARCH "${EXT_WORKING_DIRECTORY}")
0105
0106 if(NOT EXT_WORKING_DIRECTORY_ARCH)
0107 set(EXT_WORKING_DIRECTORY_ARCH <BINARY_DIR>)
0108 endif()
0109
0110 # CMake variant
0111 set(MAC_CONFIGURE_COMMAND
0112 arch -${ARCH} ${CMAKE_COMMAND} -S <SOURCE_DIR> -B <BINARY_DIR>-${ARCH}
0113 ${EXT_CONFIGURE_ARGS}
0114 ${EXT_CMAKE_ARGS}
0115 -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}
0116 )
0117 set(MAC_BUILD_COMMAND
0118 arch -${ARCH} ${CMAKE_COMMAND} --build <BINARY_DIR>-${ARCH} -j${SUBMAKE_JOBS}
0119 )
0120 set(MAC_INSTALL_COMMAND
0121 DESTDIR=<TMP_DIR>/build-${ARCH} ${CMAKE_COMMAND} --install <BINARY_DIR>-${ARCH}
0122 )
0123 # Meson variant
0124 if(${EXT_MESON})
0125 set(MAC_CONFIGURE_COMMAND
0126 ${CMAKE_COMMAND} -E env
0127 PYTHONPATH=${_krita_pythonpath}
0128 PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1
0129 arch -${ARCH} ${MESON_BINARY_PATH} setup <BINARY_DIR>-${ARCH} <SOURCE_DIR>
0130 --libdir=lib
0131 -Dbuildtype=$<IF:$<CONFIG:Debug>,debug,debugoptimized>
0132 ${EXT_CONFIGURE_ARGS}
0133 ${EXT_CMAKE_ARGS}
0134 --native-file=${CMAKE_CURRENT_BINARY_DIR}/../meson-compiler_${ARCH}.ini
0135 )
0136 set(MAC_BUILD_COMMAND
0137 ${CMAKE_COMMAND} -E env
0138 PYTHONPATH=${_krita_pythonpath}
0139 arch -${ARCH} ${MESON_BINARY_PATH} compile -C <BINARY_DIR>-${ARCH} -j${SUBMAKE_JOBS}
0140 )
0141 set(MAC_INSTALL_COMMAND
0142 ${CMAKE_COMMAND} -E env
0143 PYTHONPATH=${_krita_pythonpath}
0144 DESTDIR=<TMP_DIR>/build-${ARCH}
0145 ${MESON_BINARY_PATH} install -C <BINARY_DIR>-${ARCH}
0146 )
0147 endif()
0148
0149 if(${EXT_AUTOMAKE} OR EXT_BUILD_COMMAND)
0150 set(MAC_CONFIGURE_COMMAND
0151 arch -${ARCH}
0152 -e "CFLAGS+=-arch ${ARCH}" -e "CXXFLAGS+=-arch ${ARCH}"
0153 <SOURCE_DIR>/configure
0154 ${EXT_CONFIGURE_ARGS}
0155 ${EXT_CMAKE_ARGS}
0156 )
0157 set(MAC_BUILD_COMMAND
0158 make clean COMMAND arch -${ARCH} make -j${SUBMAKE_JOBS}
0159 )
0160 set(MAC_INSTALL_COMMAND
0161 make install DESTDIR=<TMP_DIR>/build-${ARCH} INSTALL_ROOT=<TMP_DIR>/build-${ARCH}
0162 )
0163 endif()
0164
0165 if(EXT_CONFIGURE_COMMAND AND NOT EXT_CONFIGURE_ARGS)
0166 set(MAC_CONFIGURE_COMMAND arch -${ARCH} ${EXT_CONFIGURE_COMMAND_ARCH})
0167 endif()
0168 if(EXT_BUILD_COMMAND)
0169 set(MAC_BUILD_COMMAND arch -${ARCH} ${EXT_BUILD_COMMAND})
0170 endif()
0171 if(EXT_INSTALL_COMMAND)
0172 # HACK: be over paranoid about DESTDIR
0173 set(MAC_INSTALL_COMMAND arch -${ARCH} -e DESTDIR=<TMP_DIR>/build-${ARCH}
0174 -e INSTALL_ROOT=<TMP_DIR>/build-${ARCH}
0175 ${EXT_INSTALL_COMMAND}
0176 DESTDIR=<TMP_DIR>/build-${ARCH} INSTALL_ROOT=<TMP_DIR>/build-${ARCH}
0177 )
0178 endif()
0179
0180 ExternalProject_Add_Step( ${EXT_NAME} build-${ARCH}
0181 # newline space is important
0182 COMMENT "Building ${EXT_NAME} ${ARCH}"
0183
0184 WORKING_DIRECTORY ${EXT_WORKING_DIRECTORY_ARCH}
0185 # Configure arch variant
0186 COMMAND ${MAC_CONFIGURE_COMMAND}
0187 # build
0188 COMMAND ${MAC_BUILD_COMMAND}
0189 # install in tmp creating fat-bin
0190 COMMAND ${MAC_INSTALL_COMMAND}
0191
0192 DEPENDEES ${DEPENDEES}
0193 DEPENDERS build
0194 )
0195 endmacro()
0196
0197 if(NOT EXT_GIT_REPOSITORY)
0198 ExternalProject_Add( ${EXT_NAME}
0199 DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0200 URL ${EXT_URL}
0201 URL_HASH ${EXT_URL_HASH}
0202
0203 PATCH_COMMAND ${EXT_PATCH_COMMAND}
0204
0205 CONFIGURE_COMMAND ""
0206 BUILD_COMMAND ${CMAKE_COMMAND} -E env ${KRITA_MACOS_CONSOLIDATE_SCRIPT} <TMP_DIR>
0207 INSTALL_COMMAND tar -xzf <TMP_DIR>/${KRITA_MACOS_EXTERNAL_PACKAGE_NAME} -C "/"
0208 UPDATE_COMMAND ""
0209
0210 DEPENDS ${EXT_DEPENDS}
0211 )
0212 else()
0213 ExternalProject_Add( ${EXT_NAME}
0214 DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR}
0215 GIT_REPOSITORY ${EXT_GIT_REPOSITORY}
0216 GIT_TAG ${EXT_GIT_TAG}
0217 GIT_SUBMODULES ${EXT_GIT_SUBMODULES}
0218 GIT_SUBMODULES_RECURSE ${EXT_GIT_SUBMODULES_RECURSE}
0219 GIT_PROGRESS ${EXT_GIT_PROGRESS}
0220 GIT_REMOTE_UPDATE_STRATEGY ${EXT_GIT_REMOTE_UPDATE_STRATEGY}
0221
0222 PATCH_COMMAND ${EXT_PATCH_COMMAND}
0223
0224 CONFIGURE_COMMAND ""
0225 BUILD_COMMAND ${CMAKE_COMMAND} -E env ${KRITA_MACOS_CONSOLIDATE_SCRIPT} <TMP_DIR>
0226 INSTALL_COMMAND tar -xzf <TMP_DIR>/${KRITA_MACOS_EXTERNAL_PACKAGE_NAME} -C "/"
0227 UPDATE_COMMAND ""
0228
0229 DEPENDS ${EXT_DEPENDS}
0230 )
0231 endif()
0232
0233 set(step_depend configure)
0234 foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
0235 compile_arch(${ARCH} ${step_depend} ${EXT_MESON})
0236 set(step_depend build-${ARCH})
0237 endforeach()
0238 endmacro()
0239
0240 macro(mkdir_build_arch_dir ARCH)
0241 ExternalProject_Add_Step(ext_qt mkdir-build-${ARCH}
0242 COMMAND ${CMAKE_COMMAND} -E make_directory <BINARY_DIR>-${ARCH}
0243 DEPENDERS configure
0244 )
0245 endmacro()