Warning, /graphics/krita/3rdparty/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 project (krita-and-all-its-deps) 0002 0003 if (POLICY CMP0135) 0004 cmake_policy(SET CMP0135 OLD) 0005 endif() 0006 0007 # 0008 # Build all dependencies for Krita and finally Krita itself. 0009 # Parameters: EXTERNALS_DOWNLOAD_DIR place to download all packages 0010 # INSTALL_ROOT place to install everything to 0011 # MXE_TOOLCHAIN: the toolchain file to cross-compile using MXE 0012 # 0013 # Example usage: cmake ..\kritadeposx -DEXTERNALS_DOWNLOAD_DIR=/dev2/d -DINSTALL_ROOT=/dev2/i -DWIN64_BUILD=TRUE -DBOOST_LIBRARYDIR=/dev2/i/lib -G "Visual Studio 11 Win64" 0014 0015 if(APPLE) 0016 execute_process(COMMAND sysctl -n hw.optional.arm64 OUTPUT_VARIABLE apple_has_arm64_optional) 0017 if(apple_has_arm64_optional) 0018 message(STATUS "Building on macos arm") 0019 cmake_minimum_required(VERSION 3.19.3) 0020 else() 0021 cmake_minimum_required(VERSION 3.7.2) 0022 endif() 0023 else(APPLE) 0024 cmake_minimum_required(VERSION 3.7.0 FATAL_ERROR) 0025 endif() 0026 0027 if(POLICY CMP0135) 0028 cmake_policy(SET CMP0135 NEW) 0029 endif() 0030 0031 # 0032 # If you add a new dependency into 3rdparty folder, do **not** overide 0033 # BUILD_COMMAND and INSTALL_COMMAND with their '-j${SUBMAKE_JOBS}' equivalents, 0034 # unless you need a really custom command for this dep. CMake will pass the 0035 # correct threading option to make/ninja automatically. The variable below is 0036 # Used **only** by custom builds, like sip and boost. 0037 # 0038 0039 if (NOT SUBMAKE_JOBS) 0040 include(ProcessorCount) 0041 ProcessorCount(NUM_CORES) 0042 if (NOT NUM_CORES EQUAL 0) 0043 if (NUM_CORES GREATER 2) 0044 # be nice... 0045 MATH( EXPR NUM_CORES "${NUM_CORES} - 2" ) 0046 endif() 0047 set(SUBMAKE_JOBS ${NUM_CORES}) 0048 else() 0049 set(SUBMAKE_JOBS 1) 0050 endif() 0051 endif() 0052 0053 MESSAGE("SUBMAKE_JOBS: " ${SUBMAKE_JOBS}) 0054 0055 if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) 0056 message(FATAL_ERROR "Compiling in the source directory is not supported. Use for example 'mkdir build; cd build; cmake ..'.") 0057 endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) 0058 0059 # Tools must be obtained to work with: 0060 include (ExternalProject) 0061 0062 LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake/kde_macro") 0063 LIST (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}) 0064 include (KritaToNativePath) 0065 include (KritaExternalProject) 0066 0067 # allow specification of a directory with pre-downloaded 0068 # requirements 0069 if(DEFINED ENV{EXTERNALS_DOWNLOAD_DIR}) 0070 set(EXTERNALS_DOWNLOAD_DIR $ENV{EXTERNALS_DOWNLOAD_DIR}) 0071 endif() 0072 0073 if(NOT IS_DIRECTORY ${EXTERNALS_DOWNLOAD_DIR}) 0074 message(FATAL_ERROR "No externals download dir set. Use -DEXTERNALS_DOWNLOAD_DIR") 0075 else() 0076 file(TO_CMAKE_PATH "${EXTERNALS_DOWNLOAD_DIR}" EXTERNALS_DOWNLOAD_DIR) 0077 endif() 0078 0079 if(NOT IS_DIRECTORY ${INSTALL_ROOT}) 0080 message(FATAL_ERROR "No install dir set. Use -DINSTALL_ROOT") 0081 else() 0082 file(TO_CMAKE_PATH "${INSTALL_ROOT}" INSTALL_ROOT) 0083 endif() 0084 0085 set(TOP_INST_DIR ${INSTALL_ROOT}) 0086 set(EXTPREFIX "${TOP_INST_DIR}") 0087 set(CMAKE_PREFIX_PATH "${EXTPREFIX}") 0088 0089 if (${CMAKE_GENERATOR} STREQUAL "Visual Studio 14 2015 Win64") 0090 SET(GLOBAL_PROFILE 0091 -DCMAKE_MODULE_LINKER_FLAGS=/machine:x64 0092 -DCMAKE_EXE_LINKER_FLAGS=/machine:x64 0093 -DCMAKE_SHARED_LINKER_FLAGS=/machine:x64 0094 -DCMAKE_STATIC_LINKER_FLAGS=/machine:x64 0095 ) 0096 endif () 0097 0098 message( STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}") 0099 message( STATUS "CMAKE_CL_64: ${CMAKE_CL_64}") 0100 0101 set(GLOBAL_BUILD_TYPE RelWithDebInfo) 0102 set(GLOBAL_PROFILE ${GLOBAL_PROFILE} -DBUILD_TESTING=false) 0103 0104 if (UNIX AND NOT APPLE) 0105 set(LINUX true) 0106 set(PATCH_COMMAND patch) 0107 endif () 0108 0109 if (WIN32 OR LINUX) 0110 option(QT_ENABLE_DEBUG_INFO "Build Qt with full debug info included" OFF) 0111 option(QT_ENABLE_ASAN "Build Qt with ASAN" OFF) 0112 endif() 0113 0114 include(FeatureSummary) 0115 0116 if (WIN32) 0117 set(_is_perl_required) 0118 set(_perl_type OPTIONAL) 0119 else() 0120 set(_is_perl_required REQUIRED) 0121 set(_perl_type REQUIRED) 0122 endif() 0123 find_package(Perl ${_is_perl_required}) 0124 set_package_properties(Perl PROPERTIES 0125 URL "https://www.perl.org/" 0126 DESCRIPTION "Perl is a highly capable, feature-rich programming language with over 30 years of development." 0127 TYPE ${_perl_type} 0128 PURPOSE "Needed for building Qt from source." 0129 ) 0130 0131 if (WIN32) 0132 option(ENABLE_MSYS2_FIXES "Enable patches that are needed for MSYS2+Clang Krita build" OFF) 0133 0134 if(ENABLE_MSYS2_FIXES) 0135 find_package(ZLIB) 0136 find_package(Iconv) 0137 find_package(EXPAT) 0138 find_package(Gettext) 0139 find_package(OpenSSL) 0140 endif() 0141 0142 if (NOT ZLIB_FOUND) 0143 set (ZLIB_DEP ext_zlib) 0144 endif() 0145 0146 if (NOT Iconv_FOUND) 0147 set (ICONV_DEP ext_iconv) 0148 endif() 0149 0150 if (NOT EXPAT_FOUND) 0151 set (EXPAT_DEP ext_expat) 0152 endif() 0153 0154 if (NOT Gettext_FOUND) 0155 set (GETTEXT_DEP ext_gettext) 0156 endif() 0157 0158 if (NOT OpenSSL_FOUND) 0159 set (OPENSSL_DEP ext_openssl) 0160 endif() 0161 elseif (APPLE OR ANDROID) 0162 set (ZLIB_DEP ext_zlib) 0163 set (ICONV_DEP ext_iconv) 0164 set (GETTEXT_DEP ext_gettext) 0165 else() 0166 # In Linux we require system versions for compatibility reasons. 0167 find_package(ZLIB REQUIRED) 0168 set_package_properties(ZLIB PROPERTIES 0169 DESCRIPTION "Compression library" 0170 URL "https://www.zlib.net/" 0171 TYPE REQUIRED 0172 PURPOSE "Needed for building libpng from source.") 0173 find_package(Iconv REQUIRED) 0174 set_package_properties(Iconv PROPERTIES 0175 URL "https://www.gnu.org/software/libiconv/" 0176 DESCRIPTION "Conversion library" 0177 TYPE REQUIRED 0178 PURPOSE "Needed for building exiv2 and gettext from source." 0179 ) 0180 endif (WIN32) 0181 0182 set(SECURITY_EXE_LINKER_FLAGS "") 0183 set(SECURITY_SHARED_LINKER_FLAGS "") 0184 set(SECURITY_MODULE_LINKER_FLAGS "") 0185 if (MINGW) 0186 option(USE_MINGW_HARDENING_LINKER "Enable DEP (NX), ASLR and high-entropy ASLR linker flags (mingw-w64)" ON) 0187 if (USE_MINGW_HARDENING_LINKER) 0188 set(SECURITY_EXE_LINKER_FLAGS "-Wl,--dynamicbase -Wl,--nxcompat -Wl,--disable-auto-image-base") 0189 set(SECURITY_SHARED_LINKER_FLAGS "-Wl,--dynamicbase -Wl,--nxcompat -Wl,--disable-auto-image-base") 0190 set(SECURITY_MODULE_LINKER_FLAGS "-Wl,--dynamicbase -Wl,--nxcompat -Wl,--disable-auto-image-base") 0191 # Enable high-entropy ASLR for 64-bit 0192 # The image base has to be >4GB for HEASLR to be enabled. 0193 # The values used here are kind of arbitrary. 0194 set(SECURITY_EXE_LINKER_FLAGS "${SECURITY_EXE_LINKER_FLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000") 0195 set(SECURITY_SHARED_LINKER_FLAGS "${SECURITY_SHARED_LINKER_FLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x180000000") 0196 set(SECURITY_MODULE_LINKER_FLAGS "${SECURITY_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x180000000") 0197 set(GLOBAL_PROFILE ${GLOBAL_PROFILE} 0198 -DCMAKE_EXE_LINKER_FLAGS=${SECURITY_EXE_LINKER_FLAGS} 0199 -DCMAKE_SHARED_LINKER_FLAGS=${SECURITY_SHARED_LINKER_FLAGS} 0200 -DCMAKE_MODULE_LINKER_FLAGS=${SECURITY_MODULE_LINKER_FLAGS} 0201 ) 0202 else () 0203 message(WARNING "Linker Security Flags not enabled!") 0204 endif () 0205 0206 # Generate reduced debug info 0207 set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -g1") 0208 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -g1") 0209 0210 # Clang does not generate DWARF aranges data by default, which makes 0211 # DrMingw not able to parse the DWARF debug symbols. Add -gdwarf-aranges 0212 # explicitly. 0213 # See: https://github.com/jrfonseca/drmingw/issues/42#issuecomment-516614561 0214 # 0215 # `-fdebug-info-for-profiling` is needed for proper C++ function signatures 0216 # when using Clang with `-g1`. 0217 if (CMAKE_C_COMPILER_ID STREQUAL "Clang") 0218 set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -gdwarf-aranges -fdebug-info-for-profiling") 0219 endif () 0220 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") 0221 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -gdwarf-aranges -fdebug-info-for-profiling") 0222 endif () 0223 0224 set(GLOBAL_PROFILE ${GLOBAL_PROFILE} 0225 -DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO} 0226 -DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${CMAKE_CXX_FLAGS_RELWITHDEBINFO} 0227 ) 0228 elseif (MSVC) 0229 set(SECURITY_C_FLAGS "") 0230 set(SECURITY_CXX_FLAGS "") 0231 # Increase the stack size to match MinGW's. Prevents crashes with GMic. 0232 set(SECURITY_EXE_LINKER_FLAGS "/STACK:4194304") 0233 set(SECURITY_SHARED_LINKER_FLAGS "/STACK:4194304") 0234 set(SECURITY_MODULE_LINKER_FLAGS "/STACK:4194304") 0235 option(USE_CONTROL_FLOW_GUARD "Enable Control Flow Guard hardening (MSVC)" ON) 0236 if (USE_CONTROL_FLOW_GUARD) 0237 set(SECURITY_C_FLAGS "/guard:cf") 0238 set(SECURITY_CXX_FLAGS "/guard:cf") 0239 set(SECURITY_EXE_LINKER_FLAGS "/GUARD:CF") 0240 set(SECURITY_SHARED_LINKER_FLAGS "/GUARD:CF") 0241 set(SECURITY_MODULE_LINKER_FLAGS "/GUARD:CF") 0242 endif (USE_CONTROL_FLOW_GUARD) 0243 set(GLOBAL_PROFILE ${GLOBAL_PROFILE} 0244 -DCMAKE_C_FLAGS=${SECURITY_C_FLAGS} 0245 -DCMAKE_CXX_FLAGS=${SECURITY_CXX_FLAGS} 0246 -DCMAKE_EXE_LINKER_FLAGS=${SECURITY_EXE_LINKER_FLAGS} 0247 -DCMAKE_SHARED_LINKER_FLAGS=${SECURITY_SHARED_LINKER_FLAGS} 0248 -DCMAKE_MODULE_LINKER_FLAGS=${SECURITY_MODULE_LINKER_FLAGS} 0249 ) 0250 endif () 0251 0252 if (DEFINED EP_PREFIX) 0253 set_directory_properties(PROPERTIES EP_PREFIX ${EP_PREFIX}) 0254 endif () 0255 0256 if (WIN32) 0257 set(PATCH_COMMAND patch) 0258 endif() 0259 0260 if (MSYS) 0261 set(PATCH_COMMAND patch) 0262 set(GLOBAL_PROFILE ${GLOBAL_PROFILE} 0263 -DCMAKE_TOOLCHAIN_FILE=${MXE_TOOLCHAIN} 0264 -DCMAKE_FIND_PREFIX_PATH=${CMAKE_PREFIX_PATH} 0265 -DCMAKE_SYSTEM_INCLUDE_PATH=${CMAKE_PREFIX_PATH}/include 0266 -DCMAKE_INCLUDE_PATH=${CMAKE_PREFIX_PATH}/include 0267 -DCMAKE_LIBRARY_PATH=${CMAKE_PREFIX_PATH}/lib 0268 -DZLIB_ROOT=${CMAKE_PREFIX_PATH} 0269 ) 0270 set(GLOBAL_AUTOMAKE_PROFILE --host=i686-pc-mingw32 ) 0271 endif() 0272 0273 if (APPLE) 0274 set(PARENT_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) 0275 string(REPLACE ";" "$<SEMICOLON>" CMAKE_OSX_ARCHITECTURES_ESCAPED "${CMAKE_OSX_ARCHITECTURES}") 0276 set(GLOBAL_PROFILE ${GLOBAL_PROFILE} 0277 -DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH} 0278 -DCMAKE_INCLUDE_PATH:PATH=${CMAKE_PREFIX_PATH}/include 0279 -DCMAKE_LIBRARY_PATH:PATH=${CMAKE_PREFIX_PATH}/lib 0280 -DCMAKE_MACOSX_RPATH=ON 0281 -DKDE_SKIP_RPATH_SETTINGS=ON 0282 -DBUILD_WITH_INSTALL_RPATH=ON 0283 -DAPPLE_SUPPRESS_X11_WARNING=ON 0284 -DCMAKE_FIND_FRAMEWORK=LAST 0285 -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES_ESCAPED} 0286 ) 0287 0288 list(LENGTH CMAKE_OSX_ARCHITECTURES MACOS_ARCHS) 0289 list(JOIN CMAKE_OSX_ARCHITECTURES " " CMAKE_OSX_ARCHITECTURES_STR) 0290 0291 foreach(arch ${CMAKE_OSX_ARCHITECTURES}) 0292 string(APPEND MACOS_ARCH_FLAGS "-arch ${arch} ") 0293 endforeach() 0294 string(STRIP "${MACOS_ARCH_FLAGS}" MACOS_ARCH_FLAGS) 0295 0296 set(GLOBAL_AUTOMAKE_PROFILE 0297 "CFLAGS=${MACOS_ARCH_FLAGS}" 0298 "CXXFLAGS=${MACOS_ARCH_FLAGS}" 0299 ) 0300 0301 set(PATCH_COMMAND patch) 0302 0303 endif () 0304 0305 if (ANDROID) 0306 # Increase the stack size to match MinGW's. Prevents crashes with GMic. 0307 set(SECURITY_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,stack-size=4194304") 0308 set(SECURITY_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,stack-size=4194304") 0309 set(SECURITY_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,stack-size=4194304") 0310 0311 string(REPLACE ";" "$<SEMICOLON>" _escape_find_root_path "${CMAKE_FIND_ROOT_PATH}") 0312 # stl must be consistent: https://github.com/android/ndk/issues/1441 0313 set (GLOBAL_PROFILE ${GLOBAL_PROFILE} 0314 -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} 0315 -DANDROID_PLATFORM=${ANDROID_PLATFORM} 0316 -DANDROID_ABI=${ANDROID_ABI} 0317 -DANDROID_STL=${ANDROID_STL} 0318 -DCMAKE_FIND_ROOT_PATH=${_escape_find_root_path} 0319 -DCMAKE_EXE_LINKER_FLAGS=${SECURITY_EXE_LINKER_FLAGS} 0320 -DCMAKE_SHARED_LINKER_FLAGS=${SECURITY_SHARED_LINKER_FLAGS} 0321 -DCMAKE_MODULE_LINKER_FLAGS=${SECURITY_MODULE_LINKER_FLAGS}) 0322 endif() 0323 0324 function(TestCompileLinkPythonLibs OUTPUT_VARNAME) 0325 include(CheckCXXSourceCompiles) 0326 set(CMAKE_REQUIRED_INCLUDES ${Python_INCLUDE_DIRS}) 0327 set(CMAKE_REQUIRED_LIBRARIES ${Python_LIBRARIES}) 0328 if (MINGW) 0329 set(CMAKE_REQUIRED_DEFINITIONS -D_hypot=hypot) 0330 endif () 0331 unset(${OUTPUT_VARNAME} CACHE) 0332 CHECK_CXX_SOURCE_COMPILES(" 0333 // https://bugs.python.org/issue22411 0334 #if defined(_MSC_VER) 0335 # ifdef _DEBUG 0336 # undef _DEBUG 0337 # endif /* _DEBUG */ 0338 #endif /* _MSC_VER */ 0339 #include <Python.h> 0340 int main(int argc, char *argv[]) { 0341 Py_InitializeEx(0); 0342 }" ${OUTPUT_VARNAME}) 0343 endfunction() 0344 0345 function(DumpSitePackages PYTHONPATH) 0346 if (WIN32) 0347 krita_to_native_path("${${PYTHONPATH}}" _krita_pythonpath) 0348 string(TOLOWER "${_krita_pythonpath}" _krita_pythonpath) 0349 else() 0350 set(_krita_pythonpath ${${PYTHONPATH}}) 0351 endif() 0352 execute_process(COMMAND ${CMAKE_COMMAND} 0353 -E env PYTHONPATH=${_krita_pythonpath} 0354 ${Python_EXECUTABLE} -c "import sysconfig; print(sysconfig.get_paths());" 0355 OUTPUT_VARIABLE __sysconfig) 0356 message(STATUS "Python's system directories: ${__sysconfig}") 0357 execute_process(COMMAND ${CMAKE_COMMAND} 0358 -E env PYTHONPATH=${_krita_pythonpath} 0359 ${Python_EXECUTABLE} -c "from setuptools.command import easy_install; print(easy_install.get_site_dirs())" 0360 OUTPUT_VARIABLE __setuptools) 0361 message(STATUS "Python's setuptools directories: ${__setuptools}") 0362 endfunction() 0363 0364 if (WIN32) 0365 option(ENABLE_PYTHON_DEPS "Enable Python deps (sip, pyqt)" ON) 0366 if (ENABLE_PYTHON_DEPS) 0367 set(KRITA_PYTHONPATH "${INSTALL_ROOT}/lib/site-packages;$ENV{PYTHONPATH}") 0368 message(STATUS "Krita's PEP-0250 root: ${KRITA_PYTHONPATH}") 0369 set(Python_FIND_STRATEGY LOCATION) 0370 find_package(Python 3.8 COMPONENTS Development Interpreter) 0371 if (Python_FOUND) 0372 message(STATUS "Python requirements met.") 0373 TestCompileLinkPythonLibs(CAN_USE_PYTHON_LIBS) 0374 DumpSitePackages(KRITA_PYTHONPATH) 0375 if (NOT CAN_USE_PYTHON_LIBS) 0376 file(READ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log ERROR_LOG) 0377 string(REPLACE "\n" "\n " ERROR_LOG "${ERROR_LOG}") 0378 message(FATAL_ERROR "Compiling with Python library failed, please check whether the architecture is correct!\nCMakeError.log:\n ${ERROR_LOG}\n\n") 0379 endif () 0380 else () 0381 message(FATAL_ERROR "Python requirements not met. To disable Python deps, set ENABLE_PYTHON_DEPS to OFF.") 0382 endif () 0383 endif () 0384 elseif(UNIX) 0385 set(PYTHON_VERSION "3.10") 0386 0387 set(KRITA_PYTHONPATH "${INSTALL_ROOT}/lib/python${PYTHON_VERSION}/site-packages") 0388 message(STATUS "Krita's PEP-0250 root: ${KRITA_PYTHONPATH}") 0389 endif () 0390 0391 # Prepare meson-compatible environment variables 0392 if (WIN32) 0393 krita_to_native_path("${KRITA_PYTHONPATH}" _krita_pythonpath) 0394 string(TOLOWER ${_krita_pythonpath} _krita_pythonpath) 0395 krita_to_native_environment_path_list("${_krita_pythonpath}" _krita_pythonpath) 0396 else() 0397 set(_krita_pythonpath ${KRITA_PYTHONPATH}) 0398 endif() 0399 0400 message(STATUS "Python environment for Krita: ${_krita_pythonpath}") 0401 0402 macro(mesonify VAR DEST) 0403 set(${DEST} "${${VAR}}") 0404 separate_arguments(${DEST}) 0405 if (MSVC) # Fix compiler flags 0406 list(TRANSFORM ${DEST} REPLACE "^\/" "-") 0407 endif() 0408 list(TRANSFORM ${DEST} REPLACE "(.+)" "\'\\1\'") 0409 list(FILTER ${DEST} EXCLUDE REGEX "^$") 0410 list(JOIN ${DEST} "," ${DEST}) 0411 set(${DEST} "[${${DEST}}]") 0412 endmacro() 0413 0414 if (ANDROID OR (CMAKE_CROSSCOMPILING AND NOT APPLE)) 0415 set(CROSS_COMPILE_FLAGS "--sysroot=${CMAKE_SYSROOT}") 0416 set(CROSS_LINKER_FLAGS "--sysroot=${CMAKE_SYSROOT}") 0417 elseif (APPLE) 0418 set(CROSS_COMPILE_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") 0419 set(CROSS_LINKER_FLAGS "-isysroot ${CMAKE_OSX_SYSROOT}") 0420 endif() 0421 0422 if (ANDROID OR CMAKE_CROSSCOMPILING) 0423 set(CROSS_COMPILE_FLAGS "${CROSS_COMPILE_FLAGS} --target=${CMAKE_C_COMPILER_TARGET}") 0424 set(CROSS_LINKER_FLAGS "${CROSS_EXE_LINKER_FLAGS} --target=${CMAKE_C_COMPILER_TARGET}") 0425 endif() 0426 0427 if (ANDROID) 0428 # Meson injects -D_FILE_OFFSET_BITS=64 which triggers off_t functions. 0429 # Alternatively, increase API level to 24. 0430 set(CROSS_COMPILE_FLAGS "${CROSS_COMPILE_FLAGS} -D_LIBCPP_HAS_NO_OFF_T_FUNCTIONS") 0431 endif() 0432 0433 if (CMAKE_OSX_ARCHITECTURES) 0434 foreach(arch ${CMAKE_OSX_ARCHITECTURES}) 0435 string(APPEND CROSS_COMPILE_FLAGS_${arch} "${CROSS_COMPILE_FLAGS} -arch ${arch}") 0436 endforeach() 0437 endif() 0438 0439 mesonify(SECURITY_C_FLAGS _security_c_flags) 0440 mesonify(SECURITY_CXX_FLAGS _security_cxx_flags) 0441 mesonify(SECURITY_EXE_LINKER_FLAGS _security_exe_linker_flags) 0442 mesonify(CROSS_COMPILE_FLAGS _cross_compile_flags) 0443 mesonify(CROSS_LINKER_FLAGS _cross_linker_flags) 0444 0445 # Block any libraries not coming from our PATH when crosscompiling 0446 if (UNIX AND CMAKE_CROSSCOMPILING) 0447 set(_pkg_config_libdir "pkg_config_libdir = ''") 0448 else() 0449 # In Windows either we pick up the MSYS2 pkg-config 0450 # or we ship our own, both use the correct architecture. 0451 # Linux also uses the correct architecture. 0452 set(_pkg_config_libdir) 0453 endif() 0454 0455 include(TestBigEndian) 0456 test_big_endian(IS_ENDIAN) 0457 set(CROSSCOMPILING REQUIRED) 0458 0459 if (IS_ENDIAN) 0460 set(_endian "big") 0461 else() 0462 set(_endian "little") 0463 endif() 0464 0465 string(TOLOWER ${CMAKE_SYSTEM_NAME} _system_name) 0466 0467 if (ANDROID OR CMAKE_CROSSCOMPILING) 0468 set(EXTRA_MESON_FLAGS 0469 --cross-file=${CMAKE_CURRENT_BINARY_DIR}/meson-compiler.ini 0470 --cross-file=${CMAKE_CURRENT_BINARY_DIR}/meson-host.ini 0471 ) 0472 set(CROSSCOMPILING REQUIRED) 0473 else() 0474 set(EXTRA_MESON_FLAGS 0475 --native-file=${CMAKE_CURRENT_BINARY_DIR}/meson-compiler.ini 0476 ) 0477 set(CROSSCOMPILING) 0478 endif() 0479 0480 if (MSVC) 0481 set(_c_ld "c_ld = ['${CMAKE_LINKER}'] + cross_link_args") 0482 set(_cpp_ld "cpp_ld = ['${CMAKE_LINKER}'] + cross_link_args") 0483 endif() 0484 0485 if (CMAKE_CROSSCOMPILING AND NOT APPLE) 0486 find_package(Python 3.0 COMPONENTS Interpreter REQUIRED) 0487 set_package_properties(Python PROPERTIES 0488 DESCRIPTION "Python Library" 0489 URL "https://www.python.org" 0490 TYPE REQUIRED 0491 PURPOSE "Required to run Meson when crosscompiling") 0492 endif() 0493 find_program(MESON_BINARY_PATH meson) 0494 find_program(NINJA_BINARY_PATH ninja) 0495 find_package(PkgConfig QUIET ${CROSSCOMPILING}) 0496 0497 if (NOT Python_EXECUTABLE) 0498 set(Python_EXECUTABLE ${EXTPREFIX}/bin/python3) 0499 if(NOT EXISTS "${Python_EXECUTABLE}") 0500 message("WARNING: using system python3!") 0501 SET(Python_EXECUTABLE python3) 0502 endif() 0503 0504 set(PYTHON_DEP ext_python) 0505 endif() 0506 0507 # python needs openssl 0508 if (NOT WIN32 OR OPENSSL_DEP) 0509 add_subdirectory( ext_openssl ) 0510 endif() 0511 0512 # Meson needs the sitecustomize.py to set the site-packages root 0513 add_subdirectory( ext_python ) 0514 0515 if (NOT NINJA_BINARY_PATH) 0516 set(NINJA_DEP ext_ninja) 0517 message(STATUS "Ninja not available, building 3rdparty version.") 0518 add_subdirectory(ext_ninja) 0519 endif() 0520 0521 if (NOT MESON_BINARY_PATH) 0522 set(MESON_DEP ext_meson) 0523 set(MESON_BINARY_PATH ${EXTPREFIX}/bin/meson) 0524 message(STATUS "Meson not available, building 3rdparty version.") 0525 add_subdirectory(ext_meson) 0526 endif() 0527 0528 set(MESON_NASM_PATH "${EXTPREFIX}/bin/nasm${CMAKE_EXECUTABLE_SUFFIX}") 0529 0530 if (NOT PKG_CONFIG_FOUND OR WIN32) 0531 set(PKG_CONFIG_DEP ext_pkgconfig) 0532 if (NOT WIN32) 0533 set(ENV{PKG_CONFIG} ${EXTPREFIX}/bin/pkg-config) 0534 else() 0535 set(ENV{PKG_CONFIG} ${EXTPREFIX}/bin/pkgconf) 0536 endif() 0537 # meson currently reads from the variable directly 0538 set(PKG_CONFIG_EXECUTABLE $ENV{PKG_CONFIG}) 0539 message(STATUS "pkg-config not available, building 3rdparty version.") 0540 message(STATUS "$PKG_CONFIG is set to $ENV{PKG_CONFIG}") 0541 add_subdirectory(ext_pkgconfig) 0542 endif() 0543 0544 configure_file( 0545 ${CMAKE_CURRENT_SOURCE_DIR}/meson-compiler.ini.in 0546 ${CMAKE_CURRENT_BINARY_DIR}/meson-compiler.ini 0547 ) 0548 0549 # Meson's CPU family is a bit different from what 0550 # Android SDK exports as CMAKE_SYSTEM_PROCESSOR 0551 set (MESON_CPU_FAMILY ${CMAKE_SYSTEM_PROCESSOR}) 0552 if (${MESON_CPU_FAMILY} STREQUAL "armv7-a") 0553 set(MESON_CPU_FAMILY "arm") 0554 elseif (${MESON_CPU_FAMILY} STREQUAL "i686") 0555 set(MESON_CPU_FAMILY "x86") 0556 endif() 0557 0558 configure_file( 0559 ${CMAKE_CURRENT_SOURCE_DIR}/meson-host.ini.in 0560 ${CMAKE_CURRENT_BINARY_DIR}/meson-host.ini 0561 ) 0562 0563 # Prepare file for crosscompile multiple archs 0564 if (CMAKE_OSX_ARCHITECTURES) 0565 foreach(arch ${CMAKE_OSX_ARCHITECTURES}) 0566 mesonify(CROSS_COMPILE_FLAGS_${arch} _cross_compile_flags) 0567 configure_file( 0568 ${CMAKE_CURRENT_SOURCE_DIR}/meson-compiler.ini.in 0569 ${CMAKE_CURRENT_BINARY_DIR}/meson-compiler_${arch}.ini 0570 ) 0571 endforeach() 0572 endif() 0573 0574 LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake/modules/avcodecs") 0575 0576 include(FeatureSummary) 0577 0578 # ======================== AUDIO =========================== 0579 0580 find_package(FLAC 1.3.3 QUIET) 0581 set_package_properties(FLAC PROPERTIES 0582 DESCRIPTION "libFLAC flac audio codec" 0583 URL "https://xiph.org/flac/" 0584 ) 0585 if (NOT FLAC_FOUND) 0586 message(STATUS "FLAC not available, building 3rdparty version.") 0587 set(FLAC_DEP ext_flac) 0588 endif() 0589 0590 find_package(Ogg 1.3.2 QUIET) 0591 set_package_properties(Ogg PROPERTIES 0592 DESCRIPTION "ogg is a library for manipulating ogg bitstreams" 0593 URL "https://xiph.org/vorbis/" 0594 ) 0595 if (NOT Ogg_FOUND) 0596 message(STATUS "libogg not available, building 3rdparty version.") 0597 set(OGG_DEP ext_libogg) 0598 endif() 0599 0600 find_package(Opus 1.3.1 QUIET) 0601 set_package_properties(Opus PROPERTIES 0602 DESCRIPTION "Opus IETF audio codec" 0603 URL "https://opus-codec.org/" 0604 ) 0605 if (NOT Opus_FOUND) 0606 message(STATUS "Opus not available, building 3rdparty version.") 0607 set(OPUS_DEP ext_opus) 0608 endif() 0609 0610 # ======================== VIDEO =========================== 0611 0612 find_package(VPX 1.7.0 QUIET) 0613 set_package_properties(VPX PROPERTIES 0614 DESCRIPTION "libvpx vp8/vp9 video encoder." 0615 URL "https://www.webmproject.org/" 0616 ) 0617 if (NOT VPX_FOUND AND NOT WIN32) 0618 message(STATUS "libvpx not available, building 3rdparty version.") 0619 set(VPX_DEP ext_vpx) 0620 endif() 0621 0622 find_package(SDL 2.24.0 QUIET) 0623 set_package_properties(SDL PROPERTIES 0624 DESCRIPTION "Low-level access to audio, keyboard, mouse, joystick, and graphics" 0625 URL "https://www.libsdl.org/" 0626 ) 0627 if (NOT SDL_FOUND) 0628 message(STATUS "SDL not available, building 3rdparty version.") 0629 set(SDL_DEP ext_sdl2) 0630 endif() 0631 0632 set(QT_DEP "ext_qt") 0633 # ================== END OF FFMPEG DEPS ===================== 0634 0635 # this list must be dependency-ordered 0636 if (WIN32) 0637 add_subdirectory( ext_patch ) 0638 endif () 0639 add_subdirectory( ext_lzma ) 0640 0641 if (NOT WIN32 OR ICONV_DEP) 0642 add_subdirectory( ext_iconv ) 0643 endif() 0644 0645 if (NOT WIN32 OR GETTEXT_DEP) 0646 add_subdirectory( ext_gettext ) 0647 endif() 0648 0649 if (NOT WIN32 OR ZLIB_DEP) 0650 add_subdirectory( ext_zlib ) 0651 endif() 0652 0653 add_subdirectory( ext_boost ) 0654 add_subdirectory( ext_jpeg ) 0655 add_subdirectory( ext_tiff ) 0656 add_subdirectory( ext_png ) 0657 if (WIN32) 0658 add_subdirectory( ext_icoutils ) 0659 endif () 0660 add_subdirectory( ext_eigen3 ) 0661 0662 if (NOT WIN32 OR EXPAT_DEP) 0663 add_subdirectory( ext_expat ) # for exiv2 0664 endif() 0665 0666 add_subdirectory( ext_exiv2 ) 0667 add_subdirectory( ext_lcms2 ) 0668 add_subdirectory( ext_openexr ) 0669 add_subdirectory( ext_gsl ) 0670 add_subdirectory( ext_fftw3 ) 0671 add_subdirectory( ext_ocio ) 0672 add_subdirectory( ext_openjpeg ) 0673 0674 if(WIN32) 0675 add_subdirectory(ext_googleangle) 0676 endif() 0677 0678 if (WIN32 AND NOT PERL_FOUND) 0679 add_subdirectory( ext_perl ) 0680 endif() 0681 0682 add_subdirectory(ext_icu) 0683 add_subdirectory( ext_qt ) 0684 if (ANDROID) 0685 # gettext replacement 0686 add_subdirectory(ext_libintl-lite) 0687 add_subdirectory(ext_libunwindstack-ndk) 0688 endif() 0689 add_subdirectory( ext_frameworks ) 0690 add_subdirectory( ext_libraw ) 0691 if (ENABLE_PYTHON_DEPS OR NOT MINGW) 0692 add_subdirectory( ext_sip ) 0693 add_subdirectory( ext_pyqt ) 0694 endif () 0695 0696 if (WIN32) 0697 add_subdirectory( ext_drmingw ) 0698 endif () 0699 0700 add_subdirectory( ext_lager ) 0701 add_subdirectory( ext_heif ) 0702 add_subdirectory(ext_giflib) 0703 add_subdirectory(ext_quazip) 0704 add_subdirectory(ext_seexpr) 0705 add_subdirectory(ext_json_c) 0706 add_subdirectory(ext_mypaint) 0707 0708 if (UNIX AND NOT APPLE) 0709 add_subdirectory(ext_fcitx-qt) 0710 endif() 0711 0712 add_subdirectory(ext_webp) 0713 add_subdirectory(ext_jpegxl) 0714 add_subdirectory(ext_xsimd) 0715 0716 add_subdirectory(ext_freetype) 0717 add_subdirectory(ext_fontconfig) 0718 add_subdirectory(ext_poppler) 0719 add_subdirectory(ext_fribidi) 0720 add_subdirectory(ext_unibreak) 0721 0722 add_subdirectory(ext_ffmpeg) 0723 add_subdirectory(ext_mlt)