From 0f415b6ed6413c23380a06f138b7090e869690b8 Mon Sep 17 00:00:00 2001 From: vottozi Date: Fri, 16 Jan 2026 00:58:22 +0600 Subject: [PATCH] added SDL_ttf and FreeType libs --- cmake/FetchDependencies.cmake | 6 + cmake/ThirdParty.cmake | 212 +++++++++++++++++++++++++++++++++- proj-windows/CMakeLists.txt | 8 ++ 3 files changed, 224 insertions(+), 2 deletions(-) diff --git a/cmake/FetchDependencies.cmake b/cmake/FetchDependencies.cmake index f05529f..4dd118c 100644 --- a/cmake/FetchDependencies.cmake +++ b/cmake/FetchDependencies.cmake @@ -41,3 +41,9 @@ check_and_download("https://gitlab.com/libeigen/eigen/-/archive/5.0.0/eigen-5.0. # 6) Boost check_and_download("https://archives.boost.io/release/1.90.0/source/boost_1_90_0.zip" "boost_1_90_0.zip" "boost_1_90_0" "boost") + +# 7) FreeType +check_and_download("https://download.savannah.gnu.org/releases/freetype/freetype-2.14.1.tar.gz" "freetype-2.14.1.tar.gz" "freetype-2.14.1" "CMakeLists.txt") + +# 8) SDL_ttf +check_and_download("https://github.com/libsdl-org/SDL_ttf/archive/refs/tags/release-2.24.0.zip" "release-2.24.0.zip" "SDL_ttf-release-2.24.0" "CMakeLists.txt") diff --git a/cmake/ThirdParty.cmake b/cmake/ThirdParty.cmake index ea8ce95..99bc399 100644 --- a/cmake/ThirdParty.cmake +++ b/cmake/ThirdParty.cmake @@ -314,7 +314,215 @@ set_target_properties(libzip_external_lib PROPERTIES ) # =========================================== -# 5) Eigen (5.0.0.zip → eigen-5.0.0) - HEADER-ONLY +# 5) FreeType (2.14.1) - dependency for SDL_ttf +# =========================================== +set(FREETYPE_SRC_DIR "${THIRDPARTY_DIR}/freetype-2.14.1") +set(FREETYPE_BASE_DIR "${FREETYPE_SRC_DIR}/install") + +set(_have_freetype TRUE) +foreach(cfg IN LISTS BUILD_CONFIGS) + if(NOT EXISTS "${FREETYPE_BASE_DIR}-${cfg}/lib/freetype.lib" AND + NOT EXISTS "${FREETYPE_BASE_DIR}-${cfg}/lib/freetyped.lib") + set(_have_freetype FALSE) + endif() +endforeach() + +if(NOT _have_freetype) + foreach(cfg IN LISTS BUILD_CONFIGS) + log("Configuring FreeType (${cfg}) ...") + execute_process( + COMMAND ${CMAKE_COMMAND} + -G "${CMAKE_GENERATOR}" + -S "${FREETYPE_SRC_DIR}" + -B "${FREETYPE_SRC_DIR}/build-${cfg}" + -DCMAKE_INSTALL_PREFIX=${FREETYPE_BASE_DIR}-${cfg} + -DCMAKE_PREFIX_PATH="${ZLIB_INSTALL_DIR};${LIBPNG_INSTALL_DIR}" + -DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE + -DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE + -DFT_DISABLE_BROTLI=ON + -DBUILD_SHARED_LIBS=OFF + RESULT_VARIABLE _ft_cfg_res + ) + if(NOT _ft_cfg_res EQUAL 0) + message(FATAL_ERROR "FreeType configure failed for ${cfg}") + endif() + + log("Building FreeType (${cfg}) ...") + execute_process( + COMMAND ${CMAKE_COMMAND} + --build "${FREETYPE_SRC_DIR}/build-${cfg}" --config ${cfg} + RESULT_VARIABLE _ft_build_res + ) + if(NOT _ft_build_res EQUAL 0) + message(FATAL_ERROR "FreeType build failed for ${cfg}") + endif() + + log("Installing FreeType (${cfg}) ...") + execute_process( + COMMAND ${CMAKE_COMMAND} + --install "${FREETYPE_SRC_DIR}/build-${cfg}" --config ${cfg} + RESULT_VARIABLE _ft_inst_res + ) + if(NOT _ft_inst_res EQUAL 0) + message(FATAL_ERROR "FreeType install failed for ${cfg}") + endif() + endforeach() +endif() + +set(_ft_debug_lib "") +foreach(cand + "${FREETYPE_BASE_DIR}-Debug/lib/freetyped.lib" + "${FREETYPE_BASE_DIR}-Debug/lib/freetype.lib" +) + if(EXISTS "${cand}") + set(_ft_debug_lib "${cand}") + break() + endif() +endforeach() + +set(_ft_release_lib "") +foreach(cand + "${FREETYPE_BASE_DIR}-Release/lib/freetype.lib" +) + if(EXISTS "${cand}") + set(_ft_release_lib "${cand}") + break() + endif() +endforeach() + +if(_ft_debug_lib STREQUAL "" OR _ft_release_lib STREQUAL "") + message(FATAL_ERROR "FreeType libs not found in ${FREETYPE_BASE_DIR}-Debug/Release") +endif() + +add_library(freetype_external_lib UNKNOWN IMPORTED GLOBAL) +set_target_properties(freetype_external_lib PROPERTIES + IMPORTED_LOCATION_DEBUG "${_ft_debug_lib}" + IMPORTED_LOCATION_RELEASE "${_ft_release_lib}" + INTERFACE_INCLUDE_DIRECTORIES + "$,${FREETYPE_BASE_DIR}-Debug/include,${FREETYPE_BASE_DIR}-Release/include>" +) + +# =========================================== +# 6) SDL_ttf (2.24.0) +# =========================================== +set(SDL2TTF_SRC_DIR "${THIRDPARTY_DIR}/SDL_ttf-release-2.24.0") +set(SDL2TTF_BASE_DIR "${SDL2TTF_SRC_DIR}/install") + +set(_have_sdl2ttf TRUE) +foreach(cfg IN LISTS BUILD_CONFIGS) + if(NOT EXISTS "${SDL2TTF_BASE_DIR}-${cfg}/lib/SDL2_ttf.lib" AND + NOT EXISTS "${SDL2TTF_BASE_DIR}-${cfg}/lib/SDL2_ttfd.lib") + set(_have_sdl2ttf FALSE) + endif() +endforeach() + +if(NOT _have_sdl2ttf) + foreach(cfg IN LISTS BUILD_CONFIGS) + + if(cfg STREQUAL "Debug") + set(_SDL2_LIB "${SDL2_INSTALL_DIR}/lib/SDL2d.lib") + else() + set(_SDL2_LIB "${SDL2_INSTALL_DIR}/lib/SDL2.lib") + endif() + + set(_FT_PREFIX "${FREETYPE_BASE_DIR}-${cfg}") + + set(_FT_LIB "") + foreach(cand + "${_FT_PREFIX}/lib/freetyped.lib" + "${_FT_PREFIX}/lib/freetype.lib" + ) + if(EXISTS "${cand}") + set(_FT_LIB "${cand}") + break() + endif() + endforeach() + + if(_FT_LIB STREQUAL "") + message(FATAL_ERROR "FreeType library not found for ${cfg}") + endif() + + log("Configuring SDL_ttf (${cfg}) ...") + execute_process( + COMMAND ${CMAKE_COMMAND} + -G "${CMAKE_GENERATOR}" + -S "${SDL2TTF_SRC_DIR}" + -B "${SDL2TTF_SRC_DIR}/build-${cfg}" + -DCMAKE_INSTALL_PREFIX=${SDL2TTF_BASE_DIR}-${cfg} + -DCMAKE_PREFIX_PATH=${_FT_PREFIX};${SDL2_INSTALL_DIR} + -DSDL2_LIBRARY=${_SDL2_LIB} + -DSDL2_INCLUDE_DIR=${SDL2_INSTALL_DIR}/include/SDL2 + -DFREETYPE_LIBRARY=${_FT_LIB} + -DFREETYPE_INCLUDE_DIR=${_FT_PREFIX}/include + -DFREETYPE_INCLUDE_DIRS=${_FT_PREFIX}/include + -DSDL2TTF_VENDORED=OFF + -DSDL2TTF_SAMPLES=OFF + RESULT_VARIABLE _ttf_cfg_res + ) + if(NOT _ttf_cfg_res EQUAL 0) + message(FATAL_ERROR "SDL_ttf configure failed for ${cfg}") + endif() + + log("Building SDL_ttf (${cfg}) ...") + execute_process( + COMMAND ${CMAKE_COMMAND} + --build "${SDL2TTF_SRC_DIR}/build-${cfg}" --config ${cfg} + RESULT_VARIABLE _ttf_build_res + ) + if(NOT _ttf_build_res EQUAL 0) + message(FATAL_ERROR "SDL_ttf build failed for ${cfg}") + endif() + + log("Installing SDL_ttf (${cfg}) ...") + execute_process( + COMMAND ${CMAKE_COMMAND} + --install "${SDL2TTF_SRC_DIR}/build-${cfg}" --config ${cfg} + RESULT_VARIABLE _ttf_inst_res + ) + if(NOT _ttf_inst_res EQUAL 0) + message(FATAL_ERROR "SDL_ttf install failed for ${cfg}") + endif() + + endforeach() +endif() + +set(_ttf_debug_lib "") +foreach(cand + "${SDL2TTF_BASE_DIR}-Debug/lib/SDL2_ttfd.lib" + "${SDL2TTF_BASE_DIR}-Debug/lib/SDL2_ttf.lib" +) + if(EXISTS "${cand}") + set(_ttf_debug_lib "${cand}") + break() + endif() +endforeach() + +set(_ttf_release_lib "") +foreach(cand + "${SDL2TTF_BASE_DIR}-Release/lib/SDL2_ttf.lib" +) + if(EXISTS "${cand}") + set(_ttf_release_lib "${cand}") + break() + endif() +endforeach() + +if(_ttf_debug_lib STREQUAL "" OR _ttf_release_lib STREQUAL "") + message(FATAL_ERROR "SDL_ttf libs not found in install-Debug / install-Release") +endif() + +add_library(SDL2_ttf_external_lib UNKNOWN IMPORTED GLOBAL) +set_target_properties(SDL2_ttf_external_lib PROPERTIES + IMPORTED_LOCATION_DEBUG "${_ttf_debug_lib}" + IMPORTED_LOCATION_RELEASE "${_ttf_release_lib}" + INTERFACE_INCLUDE_DIRECTORIES + "$,${SDL2TTF_BASE_DIR}-Debug/include,${SDL2TTF_BASE_DIR}-Release/include>;$,${SDL2TTF_BASE_DIR}-Debug/include/SDL2,${SDL2TTF_BASE_DIR}-Release/include/SDL2>" + INTERFACE_LINK_LIBRARIES + "SDL2_external_lib;freetype_external_lib" +) + +# =========================================== +# 7) Eigen (5.0.0.zip → eigen-5.0.0) - HEADER-ONLY # =========================================== set(EIGEN_SRC_DIR "${THIRDPARTY_DIR}/eigen-5.0.0") @@ -324,7 +532,7 @@ if(NOT TARGET eigen_external_lib) endif() # =========================================== -# 6) Boost (1.90.0) - HEADER-ONLY +# 8) Boost (1.90.0) - HEADER-ONLY # =========================================== set(BOOST_VERSION "1.90.0") set(BOOST_ARCHIVE_NAME "boost_1_90_0.zip") diff --git a/proj-windows/CMakeLists.txt b/proj-windows/CMakeLists.txt index 0f68441..a63029e 100644 --- a/proj-windows/CMakeLists.txt +++ b/proj-windows/CMakeLists.txt @@ -83,6 +83,8 @@ target_link_libraries(space-game001 PRIVATE libpng_external_lib zlib_external_lib libzip_external_lib + freetype_external_lib + SDL2_ttf_external_lib eigen_external_lib boost_external_lib ) @@ -106,6 +108,8 @@ if (WIN32) set(ZLIB_DLL_SRC "$,${ZLIB_INSTALL_DIR}/bin/zlibd.dll,${ZLIB_INSTALL_DIR}/bin/zlib.dll>") set(ZLIB_DLL_DST "$,$/zlibd.dll,$/zlib.dll>") + + set(SDL2TTF_DLL_SRC "$,${SDL2TTF_BASE_DIR}-Debug/bin/SDL2_ttfd.dll,${SDL2TTF_BASE_DIR}-Release/bin/SDL2_ttf.dll>") add_custom_command(TARGET space-game001 POST_BUILD @@ -124,6 +128,10 @@ if (WIN32) COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ZLIB_DLL_SRC}" "${ZLIB_DLL_DST}" + + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${SDL2TTF_DLL_SRC}" + "$" ) endif()