Files

60 lines
2.8 KiB
CMake

# FreeType rasterization + HarfBuzz shaping. The default uses verified pinned archives.
option(FASET_USE_SYSTEM_TEXT_LIBRARIES "Use system FreeType/HarfBuzz instead of pinned SDK versions" OFF)
if(FASET_USE_SYSTEM_TEXT_LIBRARIES)
find_package(Freetype QUIET)
endif()
if(NOT TARGET Freetype::Freetype)
include(FetchContent)
set(FT_DISABLE_ZLIB ON CACHE BOOL "" FORCE)
set(FT_DISABLE_BZIP2 ON CACHE BOOL "" FORCE)
set(FT_DISABLE_PNG ON CACHE BOOL "" FORCE)
set(FT_DISABLE_BROTLI ON CACHE BOOL "" FORCE)
set(FT_DISABLE_HARFBUZZ ON CACHE BOOL "" FORCE)
faset_dependency(freetype)
if(NOT TARGET Freetype::Freetype)
add_library(Freetype::Freetype ALIAS freetype)
endif()
endif()
if(FASET_USE_SYSTEM_TEXT_LIBRARIES)
find_package(harfbuzz CONFIG QUIET)
endif()
if(TARGET harfbuzz::harfbuzz)
set(FASET_HARFBUZZ_TARGET harfbuzz::harfbuzz)
else()
find_package(PkgConfig QUIET)
if(PkgConfig_FOUND AND FASET_USE_SYSTEM_TEXT_LIBRARIES)
pkg_check_modules(FASET_HARFBUZZ QUIET IMPORTED_TARGET harfbuzz)
endif()
if(TARGET PkgConfig::FASET_HARFBUZZ)
set(FASET_HARFBUZZ_TARGET PkgConfig::FASET_HARFBUZZ)
else()
include(FetchContent)
set(HB_HAVE_FREETYPE ON CACHE BOOL "" FORCE)
set(HB_BUILD_UTILS OFF CACHE BOOL "" FORCE)
set(HB_BUILD_SUBSET OFF CACHE BOOL "" FORCE)
faset_dependency(harfbuzz)
set(FASET_HARFBUZZ_TARGET harfbuzz)
endif()
endif()
add_library(faset_ui
${PROJECT_SOURCE_DIR}/src/ui/ui.cpp
${PROJECT_SOURCE_DIR}/src/ui/text.cpp
${PROJECT_SOURCE_DIR}/src/ui/font.cpp)
target_compile_features(faset_ui PUBLIC cxx_std_20)
target_include_directories(faset_ui PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(faset_ui PUBLIC faset_core PRIVATE Freetype::Freetype ${FASET_HARFBUZZ_TARGET})
if(BUILD_TESTING)
add_executable(faset_ui_tests ${PROJECT_SOURCE_DIR}/tests/ui_tests.cpp)
target_link_libraries(faset_ui_tests PRIVATE faset_ui)
target_compile_definitions(faset_ui_tests PRIVATE FASET_TEST_FONT="${PROJECT_SOURCE_DIR}/assets/fonts/NotoSans.ttf")
add_test(NAME ui_widgets COMMAND faset_ui_tests)
if(TARGET faset_render)
add_executable(faset_ui_render_test ${PROJECT_SOURCE_DIR}/tests/ui_render_test.cpp)
target_link_libraries(faset_ui_render_test PRIVATE faset_ui faset_render)
target_compile_definitions(faset_ui_render_test PRIVATE FASET_TEST_FONT="${PROJECT_SOURCE_DIR}/assets/fonts/NotoSans.ttf" FASET_UI_THEME="${PROJECT_SOURCE_DIR}/assets/ui/dark.json")
add_test(NAME ui_render COMMAND faset_ui_render_test ${CMAKE_BINARY_DIR}/ui-test.ppm)
set_tests_properties(ui_render PROPERTIES LABELS "gpu")
endif()
endif()
install(DIRECTORY ${PROJECT_SOURCE_DIR}/assets/fonts ${PROJECT_SOURCE_DIR}/assets/ui DESTINATION assets)