Files
tessesframework-gfx/CMakeLists.txt
2025-11-01 23:55:55 -05:00

160 lines
5.0 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(TessesFrameworkGFX)
option(TESSESFRAMEWORKGFX_ENABLE_STATIC "Enable static build" ON)
option(TESSESFRAMEWORKGFX_ENABLE_SHARED "Enable shared build" ON)
option(TESSESFRAMEWORKGFX_ENABLE_EXAMPLES "Enable examples" OFF)
option(TESSESFRAMEWORKGFX_FETCHCONTENT "Fetch content" ON)
option(TESSESFRAMEWORKGFX_ENABLE_WEBCAM "Enable webcam" ON)
set(TESSESFRAMEWORKGFX_SOURCES
src/Color.cpp
src/Image.cpp
src/Webcam.cpp
src/Font.cpp
src/ImageCopy.cpp
src/ImageFormats/BitmapFormat.cpp
src/ImageFormats/PngFormat.cpp
src/ImageFormats/JpegFormat.cpp
src/ImageFormats/Formats.cpp
src/ImageFormats/stb/stb_image_wrapper.cpp
)
include(FetchContent)
include(GNUInstallDirs)
if(TESSESFRAMEWORKGFX_ENABLE_WEBCAM)
FetchContent_Declare(
webcam
GIT_REPOSITORY https://github.com/rojarand/libwebcam
)
if(TESSESFRAMEWORKGFX_ENABLE_STATIC)
set(LIB_MODE "STATIC")
else()
set(LIB_MODE "SHARED")
endif()
FetchContent_MakeAvailable(webcam)
set_property(TARGET webcam PROPERTY POSITION_INDEPENDENT_CODE ON)
list(APPEND TessesFrameworkGFXLibs webcam)
endif()
if(TESSESFRAMEWORKGFX_ENABLE_STATIC)
add_library(tessesframework_gfx STATIC ${TESSESFRAMEWORKGFX_SOURCES})
if(TESSESFRAMEWORKGFX_ENABLE_WEBCAM)
target_link_libraries(tessesframework_gfx PUBLIC webcam)
target_compile_definitions(tessesframework_gfx PUBLIC TESSESFRAMEWORKGFX_ENABLE_WEBCAM)
endif()
list(APPEND TessesFrameworkGFXLibs tessesframework_gfx)
target_include_directories(tessesframework_gfx
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
endif()
if(TESSESFRAMEWORKGFX_ENABLE_SHARED)
add_library(tessesframework_gfx_shared SHARED ${TESSESFRAMEWORKGFX_SOURCES})
if(TESSESFRAMEWORKGFX_ENABLE_WEBCAM)
target_link_libraries(tessesframework_gfx_shared PUBLIC webcam)
target_compile_definitions(tessesframework_gfx_shared PUBLIC TESSESFRAMEWORKGFX_ENABLE_WEBCAM)
endif()
list(APPEND TessesFrameworkGFXLibs tessesframework_gfx_shared)
target_include_directories(tessesframework_gfx_shared
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
endif()
if(TESSESFRAMEWORKGFX_FETCHCONTENT)
FetchContent_Declare(
TessesFramework
GIT_REPOSITORY https://onedev.site.tesses.net/tesses-framework.git
)
FetchContent_MakeAvailable(TessesFramework)
if(TESSESFRAMEWORKGFX_ENABLE_STATIC)
target_link_libraries(tessesframework_gfx PUBLIC tessesframework)
endif()
if(TESSESFRAMEWORKGFX_ENABLE_SHARED)
target_link_libraries(tessesframework_gfx_shared PUBLIC tessesframework_shared)
endif()
list(APPEND TessesFrameworkGFXLibs ${TessesFrameworkTargets})
else()
find_package(TessesFramework REQUIRED)
if(TESSESFRAMEWORKGFX_ENABLE_STATIC)
target_link_libraries(tessesframework_gfx PUBLIC TessesFramework::tessesframework)
if(TESSESFRAMEWORKGFX_ENABLE_PNG)
target_compile_definitions(tessesframework_gfx PUBLIC TESSESFRAMEWORKGFX_ENABLE_PNG)
endif()
endif()
if(TESSESFRAMEWORKGFX_ENABLE_SHARED)
target_link_libraries(tessesframework_gfx_shared PUBLIC TessesFramework::tessesframework_shared)
endif()
endif()
if(TESSESFRAMEWORKGFX_ENABLE_EXAMPLES)
add_executable(createbmp examples/createbmp.cpp)
target_link_libraries(createbmp PUBLIC tessesframework_gfx)
add_executable(png2bmp examples/png2bmp.cpp)
target_link_libraries(png2bmp PUBLIC tessesframework_gfx)
add_executable(fillrect examples/fillrect.cpp)
target_link_libraries(fillrect PUBLIC tessesframework_gfx)
add_executable(drawfont examples/drawfont.cpp)
target_link_libraries(drawfont PUBLIC tessesframework_gfx)
add_executable(drawtext examples/drawtext.cpp)
target_link_libraries(drawtext PUBLIC tessesframework_gfx)
add_executable(resize examples/resize.cpp)
target_link_libraries(resize PUBLIC tessesframework_gfx)
if(TESSESFRAMEWORKGFX_ENABLE_WEBCAM)
add_executable(getdevices examples/getdevices.cpp)
target_link_libraries(getdevices PUBLIC tessesframework_gfx)
add_executable(capture examples/capture.cpp)
target_link_libraries(capture PUBLIC tessesframework_gfx)
endif()
endif()
install(TARGETS ${TessesFrameworkGFXLibs}
EXPORT TessesFrameworkGFXTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/TessesFrameworkGFX DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(EXPORT TessesFrameworkGFXTargets
FILE TessesFrameworkGFXTargets.cmake
NAMESPACE TessesFrameworkGFX::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesFrameworkGFX
)
include(CMakePackageConfigHelpers)
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TessesFrameworkGFXConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesFrameworkGFX)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/TessesFrameworkGFXConfig.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TessesFrameworkGFX)