platform/cmake/FindSkia.cmake (154 lines of code) (raw):

# https://github.com/aseprite/laf/blob/29d275d47087acb897f3d4791a055963934906a1/cmake/FindSkia.cmake # Copyright (C) 2019-2020 Igara Studio S.A. # # This file is released under the terms of the MIT license. # Read LICENSE.txt for more information. set(SKIA_DIR "" CACHE PATH "Skia source code directory") if(NOT SKIA_DIR) set(SKIA_LIBRARY_DIR "" CACHE PATH "Skia library directory (where libskia.a is located)") else() if(CMAKE_BUILD_TYPE STREQUAL Debug) set(SKIA_LIBRARY_DIR "${SKIA_DIR}/out/Debug-${SKIA_ARCH}" CACHE PATH "Skia library directory" FORCE) else() set(SKIA_LIBRARY_DIR "${SKIA_DIR}/out/Release-${SKIA_ARCH}" CACHE PATH "Skia library directory" FORCE) endif() endif() # Skia library find_library(SKIA_LIBRARY skia PATH "${SKIA_LIBRARY_DIR}") if(WIN32) set(SKIA_OPENGL_LIBRARY opengl32 CACHE STRING "...") elseif(APPLE) find_library(SKIA_OPENGL_LIBRARY OpenGL NAMES GL) else() find_library(SKIA_OPENGL_LIBRARY opengl NAMES GL) endif() # SkShaper module + freetype + harfbuzz find_library(SKSHAPER_LIBRARY skshaper PATH "${SKIA_LIBRARY_DIR}") find_path(SKSHAPER_INCLUDE_DIR SkShaper.h HINTS "${SKIA_DIR}/modules/skshaper/include") if(NOT FREETYPE_LIBRARIES) set(FREETYPE_FOUND ON) if (UNIX AND NOT APPLE) # Dynamically linked because fontconfig is dynamically linked # https://github.com/JetBrains/skija/issues/113 find_library(FREETYPE_LIBRARY freetype) else() find_library(FREETYPE_LIBRARY freetype2 PATH "${SKIA_LIBRARY_DIR}") endif() set(FREETYPE_LIBRARIES ${FREETYPE_LIBRARY}) set(FREETYPE_INCLUDE_DIRS "${SKIA_DIR}/third_party/externals/freetype/include") endif() if(NOT HARFBUZZ_LIBRARIES) find_library(HARFBUZZ_LIBRARY NAMES harfbuzz HINTS "${SKIA_LIBRARY_DIR}") set(HARFBUZZ_LIBRARIES ${HARFBUZZ_LIBRARY}) set(HARFBUZZ_INCLUDE_DIRS "${SKIA_DIR}/third_party/externals/harfbuzz/src") endif() add_library(skshaper INTERFACE) target_link_libraries(skshaper INTERFACE ${SKSHAPER_LIBRARY}) # SkParagraph find_library(SKPARAGRAPH_LIBRARY skparagraph PATH "${SKIA_LIBRARY_DIR}") find_path(SKPARAGRAPH_INCLUDE_DIR Paragraph.h HINTS "${SKIA_DIR}/modules/skparagraph/include") add_library(skparagraph INTERFACE) target_link_libraries(skparagraph INTERFACE ${SKPARAGRAPH_LIBRARY}) # SVG find_library(SKIA_SVG_LIBRARY svg PATH "${SKIA_LIBRARY_DIR}") add_library(svg INTERFACE) target_link_libraries(svg INTERFACE ${SKIA_SVG_LIBRARY}) find_path(SKIA_SVG_INCLUDE_DIR SkSVGDOM.h HINTS "${SKIA_DIR}/modules/svg/include") # SkResources find_library(SKIA_SKRESOURCES_LIBRARY skresources PATH "${SKIA_LIBRARY_DIR}") add_library(skresources INTERFACE) target_link_libraries(skresources INTERFACE ${SKIA_SKRESOURCES_LIBRARY}) find_path(SKIA_SKRESOURCES_INCLUDE_DIR SkResources.h HINTS "${SKIA_DIR}/modules/skresources/include") # SKOTTIE find_library(SKIA_SKOTTIE_LIBRARY skottie PATH "${SKIA_LIBRARY_DIR}") add_library(skottie INTERFACE) target_link_libraries(skottie INTERFACE ${SKIA_SKOTTIE_LIBRARY}) find_path(SKIA_SKOTTIE_INCLUDE_DIR Skottie.h HINTS "${SKIA_DIR}/modules/skottie/include") # SKSG find_library(SKIA_SKSG_LIBRARY sksg PATH "${SKIA_LIBRARY_DIR}") add_library(sksg INTERFACE) target_link_libraries(sksg INTERFACE ${SKIA_SKSG_LIBRARY}) find_path(SKIA_SKSG_INCLUDE_DIR SkSGInvalidationController.h HINTS "${SKIA_DIR}/modules/sksg/include") find_path(SKIA_CONFIG_INCLUDE_DIR SkUserConfig.h HINTS "${SKIA_DIR}/include/config") find_path(SKIA_CORE_INCLUDE_DIR SkCanvas.h HINTS "${SKIA_DIR}/include/core") find_path(SKIA_PATHOPS_INCLUDE_DIR SkPathOps.h HINTS "${SKIA_DIR}/include/pathops") find_path(SKIA_CORE_SVG_INCLUDE_DIR SkSVGCanvas.h HINTS "${SKIA_DIR}/include/svg") find_path(SKIA_UTILS_INCLUDE_DIR SkRandom.h HINTS "${SKIA_DIR}/include/utils") find_path(SKIA_CODEC_INCLUDE_DIR SkCodec.h HINTS "${SKIA_DIR}/include/codec") find_path(SKIA_EFFECTS_INCLUDE_DIR SkShaderMaskFilter.h HINTS "${SKIA_DIR}/include/effects") find_path(SKIA_GPU_INCLUDE_DIR GrDirectContext.h HINTS "${SKIA_DIR}/include/gpu") find_path(SKIA_GPU2_INCLUDE_DIR gl/GrGLDefines.h HINTS "${SKIA_DIR}/src/gpu") find_path(SKIA_ANGLE_INCLUDE_DIR angle_gl.h HINTS "${SKIA_DIR}/third_party/externals/angle2/include") find_path(SKIA_SKCMS_INCLUDE_DIR skcms.h HINTS "${SKIA_DIR}/third_party/skcms" "${SKIA_DIR}/include/third_party/skcms") set(SKIA_LIBRARIES ${SKIA_LIBRARY} ${SKIA_OPENGL_LIBRARY} CACHE INTERNAL "Skia libraries") add_library(skia INTERFACE) target_include_directories(skia INTERFACE ${SKIA_DIR} ${SKIA_CONFIG_INCLUDE_DIR} ${SKIA_CORE_INCLUDE_DIR} ${SKIA_PATHOPS_INCLUDE_DIR} ${SKIA_CORE_SVG_INCLUDE_DIR} ${SKIA_UTILS_INCLUDE_DIR} ${SKIA_CODEC_INCLUDE_DIR} ${SKIA_EFFECTS_INCLUDE_DIR} ${SKIA_GPU_INCLUDE_DIR} ${SKIA_GPU2_INCLUDE_DIR} ${SKIA_SKCMS_INCLUDE_DIR} ${SKSHAPER_INCLUDE_DIR} ${SKPARAGRAPH_INCLUDE_DIR} ${FREETYPE_INCLUDE_DIRS} ${HARFBUZZ_INCLUDE_DIRS} ${SKIA_SVG_INCLUDE_DIR} ${SKIA_SKOTTIE_INCLUDE_DIR} ${SKIA_SKSG_INCLUDE_DIR} ${SKIA_DIR}/third_party/externals/icu/source/common ${SKIA_DIR}/third_party/icu ${SKIA_SKRESOURCES_INCLUDE_DIR} ) if(WIN32) target_include_directories(skia INTERFACE ${SKIA_ANGLE_INCLUDE_DIR}) endif() target_link_libraries(skia INTERFACE ${SKIA_LIBRARIES}) target_compile_definitions(skia INTERFACE SK_INTERNAL SK_GAMMA_SRGB SK_GAMMA_APPLY_TO_A8 SK_SCALAR_TO_FLOAT_EXCLUDED SK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1 SK_SUPPORT_OPENCL=0 SK_FORCE_DISTANCE_FIELD_TEXT=0 SK_SUPPORT_GPU=1) if(WIN32) target_compile_definitions(skia INTERFACE SK_BUILD_FOR_WIN32 _CRT_SECURE_NO_WARNINGS GR_GL_FUNCTION_TYPE=__stdcall) elseif(APPLE) target_compile_definitions(skia INTERFACE SK_BUILD_FOR_MAC) else() target_compile_definitions(skia INTERFACE SK_SAMPLES_FOR_X) endif() if(APPLE) find_library(COCOA_LIBRARY Cocoa) find_library(METAL_LIBRARY Metal) target_link_libraries(skia INTERFACE ${COCOA_LIBRARY} ${METAL_LIBRARY}) endif() if(UNIX AND NOT APPLE) # Change the kN32_SkColorType ordering to BGRA to work in X windows. target_compile_definitions(skia INTERFACE SK_R32_SHIFT=16) # Needed for SkFontMgr on Linux find_library(FONTCONFIG_LIBRARY fontconfig) target_link_libraries(skia INTERFACE ${FONTCONFIG_LIBRARY}) endif()