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()