Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmake/curl.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
# Finds libcurl via vcpkg on Linux/macOS. Windows builds do not use this module.

if(SAGE_UPDATE_CHECK)
find_package(CURL CONFIG REQUIRED)
find_package(CURL REQUIRED)
message(STATUS "libcurl found: ${CURL_VERSION_STRING}")
endif()
77 changes: 47 additions & 30 deletions cmake/miniaudio.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,56 @@
# Reference: https://github.com/feliwir/CnC_Generals_Zero_Hour (MiniAudio backend by Stephan Vedder)

if(SAGE_USE_MINIAUDIO)
message(STATUS "Configuring miniaudio via FetchContent...")
set(MINIAUDIO_INCLUDE_DIR FALSE)

if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_path(MINIAUDIO_INCLUDE_DIR miniaudio.h)
endif()

include(FetchContent)
if(MINIAUDIO_INCLUDE_DIR)
message(STATUS "✓ Found system miniaudio header at ${MINIAUDIO_INCLUDE_DIR}")
add_library(miniaudio_lib INTERFACE)
target_include_directories(miniaudio_lib INTERFACE ${MINIAUDIO_INCLUDE_DIR})
target_compile_definitions(miniaudio_lib INTERFACE SAGE_USE_MINIAUDIO)

# Platform-specific audio backend configuration
if(APPLE)
target_compile_definitions(miniaudio_lib INTERFACE
MA_NO_WASAPI MA_NO_DSOUND MA_NO_WINMM)
elseif(UNIX)
target_compile_definitions(miniaudio_lib INTERFACE
MA_NO_WASAPI MA_NO_DSOUND MA_NO_WINMM MA_NO_COREAUDIO)
endif()
else()
message(STATUS "Configuring miniaudio via FetchContent...")

FetchContent_Declare(
miniaudio
URL "https://github.com/mackron/miniaudio/archive/refs/heads/master.tar.gz"
)
include(FetchContent)

# miniaudio is a single-header library; we just need the source directory
# Use FETCHCONTENT_UPDATES_DISCONNECTED to avoid re-downloading
FetchContent_GetProperties(miniaudio)
if(NOT miniaudio_POPULATED)
FetchContent_Populate(miniaudio)
endif()
FetchContent_Declare(
miniaudio
URL "https://github.com/mackron/miniaudio/archive/refs/heads/master.tar.gz"
)

# Create an interface target for miniaudio (single-header library)
# We don't use miniaudio's CMakeLists.txt because it builds optional node
# libraries with incorrect linking. Instead, we use the single-header approach.
add_library(miniaudio_lib INTERFACE)
target_include_directories(miniaudio_lib INTERFACE ${miniaudio_SOURCE_DIR})
target_compile_definitions(miniaudio_lib INTERFACE SAGE_USE_MINIAUDIO)

# Platform-specific audio backend configuration
if(APPLE)
# Use CoreAudio on macOS
target_compile_definitions(miniaudio_lib INTERFACE
MA_NO_WASAPI MA_NO_DSOUND MA_NO_WINMM)
elseif(UNIX)
# Use ALSA on Linux (PulseAudio/PipeWire via ALSA compat)
target_compile_definitions(miniaudio_lib INTERFACE
MA_NO_WASAPI MA_NO_DSOUND MA_NO_WINMM MA_NO_COREAUDIO)
endif()
FetchContent_GetProperties(miniaudio)
if(NOT miniaudio_POPULATED)
FetchContent_Populate(miniaudio)
endif()

message(STATUS "miniaudio configured: target miniaudio_lib available")
add_library(miniaudio_lib INTERFACE)
target_include_directories(miniaudio_lib INTERFACE ${miniaudio_SOURCE_DIR})
target_compile_definitions(miniaudio_lib INTERFACE SAGE_USE_MINIAUDIO)

# Platform-specific audio backend configuration
if(APPLE)
# Use CoreAudio on macOS
target_compile_definitions(miniaudio_lib INTERFACE
MA_NO_WASAPI MA_NO_DSOUND MA_NO_WINMM)
elseif(UNIX)
# Use ALSA on Linux (PulseAudio/PipeWire via ALSA compat)
target_compile_definitions(miniaudio_lib INTERFACE
MA_NO_WASAPI MA_NO_DSOUND MA_NO_WINMM MA_NO_COREAUDIO)
endif()

message(STATUS "miniaudio configured: target miniaudio_lib available")
endif()
endif()
57 changes: 34 additions & 23 deletions cmake/openal.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,30 +25,41 @@
# Reference: jmarshall OpenAL implementation uses <AL/al.h> throughout.

if(SAGE_USE_OPENAL)
message(STATUS "Configuring OpenAL Soft (v1.24.2) with FetchContent...")

include(FetchContent)

FetchContent_Declare(
openal_soft
URL "https://github.com/kcat/openal-soft/archive/refs/tags/1.24.2.tar.gz"
URL_HASH "SHA256=7efd383d70508587fbc146e4c508771a2235a5fc8ae05bf6fe721c20a348bd7c"
)

# Minimal build: no utilities, examples, or tests
set(ALSOFT_INSTALL_RUNTIME_LIBS ON CACHE BOOL "Install runtime libs" FORCE)
set(ALSOFT_EXAMPLES OFF CACHE BOOL "Build examples" FORCE)
set(ALSOFT_TESTS OFF CACHE BOOL "Build tests" FORCE)
set(ALSOFT_UTILS OFF CACHE BOOL "Build utils" FORCE)
set(ALSOFT_NO_CONFIG_UTIL ON CACHE BOOL "Disable config util" FORCE)

if(WIN32)
# Windows: WASAPI is the modern low-latency audio API
set(ALSOFT_REQUIRE_WASAPI ON CACHE BOOL "Require WASAPI backend on Windows" FORCE)
set(OPENAL_FOUND FALSE)
set(OpenAL_FOUND FALSE)

if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
find_package(OpenAL QUIET)
endif()

FetchContent_MakeAvailable(openal_soft)
if(OPENAL_FOUND OR OpenAL_FOUND)
message(STATUS "✓ Found system OpenAL. Using it.")
else()
message(STATUS "Configuring OpenAL Soft (v1.24.2) with FetchContent...")

include(FetchContent)

FetchContent_Declare(
openal_soft
URL "https://github.com/kcat/openal-soft/archive/refs/tags/1.24.2.tar.gz"
URL_HASH "SHA256=7efd383d70508587fbc146e4c508771a2235a5fc8ae05bf6fe721c20a348bd7c"
)

# Minimal build: no utilities, examples, or tests
set(ALSOFT_INSTALL_RUNTIME_LIBS ON CACHE BOOL "Install runtime libs" FORCE)
set(ALSOFT_EXAMPLES OFF CACHE BOOL "Build examples" FORCE)
set(ALSOFT_TESTS OFF CACHE BOOL "Build tests" FORCE)
set(ALSOFT_UTILS OFF CACHE BOOL "Build utils" FORCE)
set(ALSOFT_NO_CONFIG_UTIL ON CACHE BOOL "Disable config util" FORCE)

# openal-soft FetchContent creates the OpenAL::OpenAL imported target
message(STATUS "OpenAL Soft configured: target OpenAL::OpenAL available")
if(WIN32)
# Windows: WASAPI is the modern low-latency audio API
set(ALSOFT_REQUIRE_WASAPI ON CACHE BOOL "Require WASAPI backend on Windows" FORCE)
endif()

FetchContent_MakeAvailable(openal_soft)

# openal-soft FetchContent creates the OpenAL::OpenAL imported target
message(STATUS "OpenAL Soft configured: target OpenAL::OpenAL available")
endif()
endif()
Loading
Loading