@@ -4,6 +4,7 @@ project(jngl LANGUAGES C CXX)
44set (CMAKE_POLICY_VERSION_MINIMUM 3.5) # required for ogg, see https://github.com/jhasse/jngl/issues/107
55
66if (MSVC )
7+ string (APPEND CMAKE_C_FLAGS " /Zc:__cplusplus /wd4244 /wd4305 /wd4267" )
78 string (APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus /wd4244 /wd4305 /wd4267" )
89else ()
910 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=implicit-function-declaration" )
@@ -27,6 +28,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
2728file (GLOB SRC src/*.cpp src/jngl/*.cpp
2829 src/audio/*.cpp
2930 src/audio/effect/*.cpp
31+ src/timing/*.cpp
3032)
3133add_library (jngl ${SRC}
3234 src/jngl/record/VideoRecorder.cpp
@@ -75,6 +77,7 @@ target_include_directories(jngl PUBLIC include/public)
7577option (JNGL_VIDEO "Enable Theora video playback" ON )
7678option (JNGL_RECORD "Enable video recording using FFmpeg" OFF )
7779option (JNGL_STEAMWORKS "Enable Steamsworks SDK support for achievements" OFF )
80+ option (JNGL_TRACE "Enable tracing for debugging purposes" OFF )
7881
7982set (JNGL_BUILD_WEBP_FROM_SOURCE_DEFAULT OFF )
8083if (MSVC OR IOS OR ANDROID OR EMSCRIPTEN)
@@ -94,7 +97,7 @@ if (ANDROID)
9497 find_package (oboe REQUIRED CONFIG)
9598 target_link_libraries (jngl PRIVATE oboe::oboe)
9699 file (GLOB ANDROID_SOURCES src/android/*.cpp)
97- target_sources (jngl PRIVATE ${ANDROID_SOURCES} src/audio/android/engine.cpp)
100+ target_sources (jngl PRIVATE ${ANDROID_SOURCES} src/audio/android/engine.cpp src/font/simple.cpp )
98101elseif (IOS)
99102 file (GLOB SRC src/ios/*.cpp src/ios/*.mm src/audio/ios/Engine.mm src/ios/*.h)
100103 target_sources (jngl PRIVATE ${SRC} src/mac/message.cpp)
@@ -115,25 +118,18 @@ elseif (UNIX)
115118 file (GLOB SRC src/linux/*.cpp src/linux/*.c)
116119 target_sources (jngl PRIVATE ${SRC} )
117120 target_link_libraries (jngl PRIVATE atomic)
121+ option (JNGL_FONTCONFIG "Enable fontconfig for font discovery" ON )
122+ if (JNGL_FONTCONFIG)
123+ find_package (Fontconfig REQUIRED)
124+ target_link_libraries (jngl PRIVATE Fontconfig::Fontconfig)
125+ target_sources (jngl PRIVATE src/linux/fontconfig/fontconfig.cpp)
126+ else ()
127+ target_sources (jngl PRIVATE src/font/simple.cpp)
128+ endif ()
118129 endif ()
119130
120131 target_link_libraries (jngl PRIVATE $<$<AND :$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS :$<CXX_COMPILER_VERSION>,9.0>>:stdc++fs>)
121132else () # Windows
122- if (WINDOWS_STORE)
123- FetchContent_Declare(
124- angle
125- GIT_REPOSITORY https://github.com/jhasse/angle.git
126- GIT_TAG cmake
127- )
128- if (NOT angle_POPULATED)
129- FetchContent_Populate(angle)
130-
131- set (BUILD_SHARED_LIBS_OLD ${BUILD_SHARED_LIBS} )
132- set (BUILD_SHARED_LIBS ON CACHE INTERNAL "" )
133- add_subdirectory (${angle_SOURCE_DIR} ${angle_BINARY_DIR} )
134- set (BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_OLD} CACHE BOOL "" FORCE)
135- endif ()
136- endif ()
137133 option (JNGL_WINAPI "Use WinAPI instead of SDL" OFF )
138134
139135 target_compile_definitions (jngl PRIVATE _WIN32_WINNT=0x602 _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS UNICODE)
@@ -142,21 +138,13 @@ else() # Windows
142138 target_link_libraries (jngl PRIVATE opengl32)
143139 else ()
144140 file (GLOB SRC src/sdl/*.cpp)
145- if (WINDOWS_STORE)
146- target_sources (jngl PRIVATE src/xinput/XinputController.cpp)
147- else ()
148- target_sources (jngl PRIVATE src/sdl/controller/SdlController.cpp)
149- endif ()
141+ target_sources (jngl PRIVATE src/sdl/controller/SdlController.cpp)
150142 target_sources (jngl PRIVATE src/win32 /fontfile.cpp src/win32 /message.cpp src/win32 /other.cpp
151143 src/win32 /unicode.cpp)
152144 endif ()
153145 target_sources (jngl PRIVATE ${SRC} )
154146 target_link_libraries (jngl PUBLIC winmm)
155- if (WINDOWS_STORE)
156- target_link_libraries (jngl PUBLIC libEGL libGLESv2)
157- else ()
158- target_sources (jngl PRIVATE glad/src/wgl.c)
159- endif ()
147+ target_sources (jngl PRIVATE glad/src/wgl.c)
160148 if (MSVC )
161149 string (APPEND CMAKE_C_FLAGS " /D_CRT_SECURE_NO_WARNINGS" )
162150 string (APPEND CMAKE_CXX_FLAGS " /D_CRT_SECURE_NO_WARNINGS /D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING" )
@@ -166,14 +154,6 @@ else() # Windows
166154 endif ()
167155endif ()
168156
169- # fontconfig
170- if (UNIX AND NOT EMSCRIPTEN)
171- if (NOT APPLE AND NOT ANDROID)
172- find_package (Fontconfig REQUIRED)
173- target_link_libraries (jngl PRIVATE Fontconfig::Fontconfig)
174- endif ()
175- endif ()
176-
177157include (cmake/CPM.cmake)
178158if (ANDROID OR MSVC OR IOS)
179159 CPMAddPackage(NAME libogg
@@ -276,20 +256,13 @@ else()
276256 URL https://www.libsdl.org/release/SDL3-3.1.6.zip
277257 URL_HASH SHA1=b16ad311975378dcc87b11fc02c84eaa1f028b38
278258 OPTIONS
279- "SDL_SENSOR OFF" # doesn't work with UWP
280- "SDL_SHARED OFF"
281- "SDL_STATIC ON"
259+ "SDL_SENSOR OFF"
282260 )
283261 endif ()
284262 target_link_libraries (jngl PRIVATE SDL3-static )
285263 endif ()
286264 if (MSVC )
287265 target_compile_definitions (jngl PUBLIC _USE_MATH_DEFINES)
288- if (WINDOWS_STORE)
289- target_compile_definitions (jngl PUBLIC JNGL_UWP)
290- target_include_directories (jngl PUBLIC ${SDL_SOURCE_DIR} /include ${SDL_BINARY_DIR} /include ) # TODO: This should be PRIVATE
291- target_link_options (jngl PUBLIC $<IF:$<CONFIG:Debug>,/defaultlib:vccorlibd.lib /defaultlib:msvcrtd.lib,/defaultlib:vccorlib.lib /defaultlib:msvcrt.lib>)
292- endif ()
293266 elseif (IOS)
294267 target_compile_definitions (jngl PRIVATE IOS)
295268 target_compile_definitions (jngl PUBLIC GLES_SILENCE_DEPRECATION)
@@ -315,7 +288,10 @@ else()
315288 set_source_files_properties (data/test .ogg PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
316289 add_executable (jngl-test src/test /test .cpp src/ios/test /main.mm data/Arial.ttf
317290 data/jngl.webp data/test .ogg)
318- set_target_properties (jngl-test PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR} /data/ios/jngl-test.in.plist" )
291+ set_target_properties (jngl-test PROPERTIES
292+ MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR} /data/ios/jngl-test.in.plist"
293+ XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.bixense.jngl-test" )
294+ target_link_libraries (jngl-test jngl)
319295 endif ()
320296 else ()
321297 if (NOT JNGL_BUILD_WEBP_FROM_SOURCE)
@@ -366,6 +342,9 @@ else()
366342 target_link_libraries (jngl PRIVATE PkgConfig::FFMPEG)
367343 target_compile_definitions (jngl PUBLIC JNGL_RECORD)
368344 endif ()
345+ if (JNGL_TRACE)
346+ target_compile_definitions (jngl PUBLIC JNGL_TRACE)
347+ endif ()
369348 if (NOT EMSCRIPTEN)
370349 pkg_check_modules(VorbisFile REQUIRED vorbisfile)
371350 pkg_check_modules(FREETYPE REQUIRED freetype2)
@@ -387,46 +366,29 @@ else()
387366 target_sources (jngl PRIVATE glad/src/gl.c)
388367 endif ()
389368
390- if (NOT hasParent)
391- if (WINDOWS_STORE)
392- # WIN32 is needed to build for the Windows subsystem, not Console
393- add_executable (jngl-test WIN32 src/test /test .cpp src/uwp/SDL_winrt_main_NonXAML.cpp
394- data/Arial.ttf data/jngl.webp data/jngl-icon.webp data/test .ogg)
395- set_source_files_properties (data/Arial.ttf data/jngl.webp data/jngl-icon.webp
396- data/test .ogg
397- PROPERTIES VS_DEPLOYMENT_CONTENT 1)
398-
399- # Otherwise linking will fail with
400- # error LNK2038: mismatch detected for
401- # 'vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker': value '1' doesn't
402- # match value '0' in msvcrtd.lib(app_appinit.obj)
403- set_source_files_properties (src/uwp/SDL_winrt_main_NonXAML.cpp
404- PROPERTIES COMPILE_FLAGS "/ZW /Zc:twoPhase- /std:c++17" )
405- else ()
406- if (NOT IOS)
407- add_executable (jngl-test src/test /test .cpp)
408- if (WIN32 )
409- target_sources (jngl-test PRIVATE src/win32 /jngl.manifest)
410- endif ()
411-
412- add_executable (example-bike examples/bike/base.cpp examples/bike/bike.cpp
413- examples/bike/line.cpp examples/bike/main.cpp examples/bike/wheel.cpp)
414- target_link_libraries (example-bike jngl)
415- add_executable (example-throw examples/throw/main.cpp)
416- target_link_libraries (example-throw jngl)
417- add_executable (example-shader examples/shader/main.cpp)
418- target_link_libraries (example-shader jngl)
419-
420- add_executable (audioplayer examples/audioplayer.cpp)
421- target_link_libraries (audioplayer PRIVATE jngl)
422- add_custom_command (TARGET audioplayer POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR} /data/test .ogg "$<TARGET_FILE_DIR:audioplayer>" )
423- # add_executable(benchmark-shapes src/benchmarks/benchmark-shapes.cpp)
424- # target_link_libraries(benchmark-shapes jngl)
425-
426- add_executable (jngl-test -forceQuit src/test /integration/forceQuit.cpp)
427- target_link_libraries (jngl-test -forceQuit PRIVATE jngl)
428- endif ()
369+ if (NOT hasParent AND NOT IOS)
370+ add_executable (jngl-test src/test /test .cpp)
371+ set_property (DIRECTORY PROPERTY VS_STARTUP_PROJECT jngl-test )
372+ if (WIN32 )
373+ target_sources (jngl-test PRIVATE src/win32 /jngl.manifest)
429374 endif ()
375+
376+ add_executable (example-bike examples/bike/base.cpp examples/bike/bike.cpp
377+ examples/bike/line.cpp examples/bike/main.cpp examples/bike/wheel.cpp)
378+ target_link_libraries (example-bike jngl)
379+ add_executable (example-throw examples/throw/main.cpp)
380+ target_link_libraries (example-throw jngl)
381+ add_executable (example-shader examples/shader/main.cpp)
382+ target_link_libraries (example-shader jngl)
383+
384+ add_executable (audioplayer examples/audioplayer.cpp)
385+ target_link_libraries (audioplayer PRIVATE jngl)
386+ add_custom_command (TARGET audioplayer POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR} /data/test .ogg "$<TARGET_FILE_DIR:audioplayer>" )
387+ # add_executable(benchmark-shapes src/benchmarks/benchmark-shapes.cpp)
388+ # target_link_libraries(benchmark-shapes jngl)
389+
390+ add_executable (jngl-test -forceQuit src/test /integration/forceQuit.cpp)
391+ target_link_libraries (jngl-test -forceQuit PRIVATE jngl)
430392 target_link_libraries (jngl-test jngl)
431393 endif ()
432394endif ()
@@ -451,7 +413,7 @@ if(JNGL_BUILD_WEBP_FROM_SOURCE)
451413 target_link_libraries (jngl PRIVATE webpdecode webpdspdecode webputilsdecode)
452414endif ()
453415
454- if (ANDROID OR IOS OR APPLE OR WINDOWS_STORE )
416+ if (ANDROID OR IOS OR APPLE )
455417 if (JNGL_VIDEO)
456418 CPMAddPackage(NAME theora
457419 URL http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
@@ -481,7 +443,7 @@ target_include_directories(jngl PRIVATE ${FREETYPE_INCLUDE_DIRS})
481443target_link_directories (jngl PUBLIC ${FREETYPE_LIBRARY_DIRS} )
482444target_link_libraries (jngl PUBLIC ${FREETYPE_LIBRARIES} )
483445
484- if (NOT hasParent AND NOT WINDOWS_STORE )
446+ if (NOT hasParent)
485447 include (CTest)
486448 if (BUILD_TESTING)
487449 file (GLOB UNITTEST_SRC src/unittest/*.cpp)
0 commit comments