set(CMAKE_C_CLANG_TIDY) set(CMAKE_CXX_CLANG_TIDY) if(DOWNLOAD_DEPENDENCIES) include(FetchContent) FetchContent_Declare( miniaudio URL https://github.com/mackron/miniaudio/archive/refs/tags/0.11.24.tar.gz URL_MD5 19e8eb21223c56a4a2d167d04decddc9 ) block() set(BUILD_SHARED_LIBS OFF) FetchContent_MakeAvailable(miniaudio) endblock() else() add_library(miniaudio STATIC miniaudio/extras/miniaudio_split/miniaudio.c ) target_include_directories(miniaudio PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/miniaudio/extras/miniaudio_split") endif() # Disable most features since we don't need them. target_compile_definitions(miniaudio PUBLIC MA_ENABLE_ONLY_SPECIFIC_BACKENDS MA_NO_DECODING MA_NO_ENCODING MA_NO_WAV MA_NO_FLAC MA_NO_MP3 MA_NO_DEVICE_IO MA_NO_RESOURCE_MANAGER MA_NO_GENERATION MA_NO_THREADING MA_NO_RUNTIME_LINKING ) if(DOWNLOAD_DEPENDENCIES) include(FetchContent) FetchContent_Declare( libsmacker URL https://github.com/foxtacles/libsmacker/archive/b3d4e97e0c95d5259d858495a5addd2d93bce5f4.tar.gz URL_MD5 7f822319c489ec1a8e41c9f1e2629195 ) FetchContent_MakeAvailable(libsmacker) else() set(libsmacker_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libsmacker") endif() add_library(libsmacker STATIC ${libsmacker_SOURCE_DIR}/smacker.c ) target_include_directories(libsmacker PUBLIC ${libsmacker_SOURCE_DIR}) if(DOWNLOAD_DEPENDENCIES) include(FetchContent) FetchContent_Populate( libweaver URL https://github.com/isledecomp/SIEdit/archive/17c7736a6ff31413f1e74ab4e989011b545b6926.tar.gz URL_MD5 04edbc974df8884f283d920ded10f1f6 ) add_library(libweaver STATIC ${libweaver_SOURCE_DIR}/lib/core.cpp ${libweaver_SOURCE_DIR}/lib/file.cpp ${libweaver_SOURCE_DIR}/lib/interleaf.cpp ${libweaver_SOURCE_DIR}/lib/object.cpp ${libweaver_SOURCE_DIR}/lib/sitypes.cpp ) add_library(libweaver::libweaver ALIAS libweaver) target_compile_definitions(libweaver PRIVATE $<$:NOMINMAX>) target_include_directories(libweaver PUBLIC ${libweaver_SOURCE_DIR}/include/libweaver) set_property(TARGET libweaver PROPERTY CXX_STANDARD 98) set_property(TARGET libweaver PROPERTY CXX_STANDARD_REQUIRED ON) endif() if(ISLE_USE_LWS) if(DOWNLOAD_DEPENDENCIES) include(FetchContent) # Fetch mbedTLS for TLS/WSS support in libwebsockets FetchContent_Declare( mbedtls URL https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-3.6.5/mbedtls-3.6.5.tar.bz2 URL_MD5 bc79602daf85f1cf35a686b53056de58 # Patch cmake_minimum_required to avoid deprecation error with -Werror=dev PATCH_COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/patch_mbedtls_cmake.cmake ) block() set(ENABLE_TESTING OFF CACHE BOOL "" FORCE) set(ENABLE_PROGRAMS OFF CACHE BOOL "" FORCE) set(MBEDTLS_FATAL_WARNINGS OFF CACHE BOOL "" FORCE) set(BUILD_SHARED_LIBS OFF) FetchContent_MakeAvailable(mbedtls) # Point lws at the mbedTLS targets so it skips its own find logic # Must be inside block() to access mbedtls_SOURCE_DIR/mbedtls_BINARY_DIR set(LWS_MBEDTLS_INCLUDE_DIRS "${mbedtls_SOURCE_DIR}/include;${mbedtls_BINARY_DIR}/include" CACHE STRING "" FORCE ) set(LWS_MBEDTLS_LIBRARIES "mbedtls;mbedx509;mbedcrypto" CACHE STRING "" FORCE ) endblock() FetchContent_Declare( libwebsockets GIT_REPOSITORY "https://github.com/warmcat/libwebsockets.git" GIT_TAG "v4.5-stable" EXCLUDE_FROM_ALL ) block() set(LWS_WITH_SSL ON CACHE BOOL "" FORCE) set(LWS_WITH_MBEDTLS ON CACHE BOOL "" FORCE) set(LWS_WITH_EXPORT_LWSTARGETS OFF CACHE BOOL "" FORCE) # mbedTLS isn't built yet at configure time, so lws's check_function_exists # calls fail. Pre-set the results for APIs that exist in mbedTLS 3.x. set(LWS_HAVE_mbedtls_md_setup 1 CACHE INTERNAL "" FORCE) set(LWS_HAVE_mbedtls_rsa_complete 1 CACHE INTERNAL "" FORCE) set(LWS_WITH_SHARED OFF CACHE BOOL "" FORCE) set(LWS_WITH_STATIC ON CACHE BOOL "" FORCE) set(LWS_WITHOUT_TESTAPPS ON CACHE BOOL "" FORCE) set(LWS_WITH_MINIMAL_EXAMPLES OFF CACHE BOOL "" FORCE) # Disable treating warnings as errors in libwebsockets (GCC/Clang) set(DISABLE_WERROR ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(libwebsockets) endblock() # Disable MSVC /WX (warnings as errors) that lws sets unconditionally if(TARGET websockets AND MSVC) target_compile_options(websockets PRIVATE /WX-) endif() else() find_package(Libwebsockets REQUIRED) endif() endif()