From c2196d7dc8c7dd5fc73e125b8e88486223d97b2a Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 25 Jul 2026 19:28:29 +0300 Subject: [PATCH] Add freetype support on web --- CMakeLists.txt | 3 +++ libs/fonts/CMakeLists.txt | 5 ++++- package/CMakeLists.txt | 5 ++++- package/web/Dockerfile | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0267f63..ff5fbedd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,6 +86,9 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL Emscripten) set(PSEMEK_PACKAGE_AS_LIBRARY OFF CACHE INTERNAL "Build applications as shared libraries") list(APPEND PSEMEK_DEFINITIONS "-DPSEMEK_GLES=1") list(APPEND PSEMEK_CXX_FLAGS -sUSE_SDL=2 -fexperimental-library) + if(PSEMEK_USE_FREETYPE) + list(APPEND PSEMEK_CXX_FLAGS -sUSE_FREETYPE=1) + endif() # by default emcc doesn't produce catch clauses, but psemek is designed around exceptions list(APPEND PSEMEK_CXX_FLAGS -sDISABLE_EXCEPTION_CATCHING=0) if(CMAKE_BUILD_TYPE STREQUAL Debug) diff --git a/libs/fonts/CMakeLists.txt b/libs/fonts/CMakeLists.txt index e272fea6..2f678332 100644 --- a/libs/fonts/CMakeLists.txt +++ b/libs/fonts/CMakeLists.txt @@ -4,7 +4,10 @@ file(GLOB_RECURSE PSEMEK_FONTS_SOURCES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "s list(REMOVE_ITEM PSEMEK_FONTS_SOURCES "source/freetype.cpp") if(PSEMEK_USE_FREETYPE) - find_package(Freetype REQUIRED) + if(NOT PSEMEK_PLATFORM_WEB) + # Emscripten provides Freetype on web + find_package(Freetype REQUIRED) + endif() list(APPEND PSEMEK_FONTS_SOURCES "source/freetype.cpp") endif() diff --git a/package/CMakeLists.txt b/package/CMakeLists.txt index f32f4fc7..a019b9c6 100644 --- a/package/CMakeLists.txt +++ b/package/CMakeLists.txt @@ -8,7 +8,10 @@ if(PSEMEK_PACKAGE_MODE) set(PSEMEK_PACKAGE_LINK_FLAGS_RAW) if(PSEMEK_PLATFORM_WEB) - list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW -sUSE_SDL=2 -sMIN_WEBGL_VERSION=2 -sNO_DISABLE_EXCEPTION_CATCHING -sFULL_ES3 -sWASMFS -sALLOW_MEMORY_GROWTH -sGROWABLE_ARRAYBUFFERS=0 -sASYNCIFY) + list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW -sUSE_SDL=2 -sUSE_FREETYPE=1 -sMIN_WEBGL_VERSION=2 -sNO_DISABLE_EXCEPTION_CATCHING -sFULL_ES3 -sWASMFS -sALLOW_MEMORY_GROWTH -sGROWABLE_ARRAYBUFFERS=0 -sASYNCIFY) + if(PSEMEK_USE_FREETYPE) + list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW -sUSE_FREETYPE=1) + endif() list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='$autoResumeAudioContext','$dynCall'") if(CMAKE_BUILD_TYPE STREQUAL Debug) list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-g") diff --git a/package/web/Dockerfile b/package/web/Dockerfile index d59b4643..3741662a 100644 --- a/package/web/Dockerfile +++ b/package/web/Dockerfile @@ -6,7 +6,7 @@ RUN git clone --branch 6.0.2 https://github.com/emscripten-core/emsdk.git WORKDIR /home/emsdk RUN ./emsdk install 6.0.2 RUN ./emsdk activate 6.0.2 -RUN . ./emsdk_env.sh && embuilder build sdl2 sdl2-mt +RUN . ./emsdk_env.sh && embuilder build sdl2 sdl2-mt zlib freetype WORKDIR /home COPY env-helper.sh .