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)