Show More
Commit Description:
Dialog tweaks and update swear list....
Commit Description:
Dialog tweaks and update swear list.
Keep the list of swears to censor up to date, lol.
References:
File last commit:
Show/Diff file:
Action:
FNA/lib/FAudio/CMakeLists.txt
320 lines | 9.5 KiB | text/plain | TextLexer
320 lines | 9.5 KiB | text/plain | TextLexer
r0 | # CMake Project for FAudio | |||
# Written by @NeroBurner | ||||
cmake_minimum_required(VERSION 2.8.12) | ||||
r690 | project(FAudio C) | |||
r0 | ||||
# Options | ||||
option(BUILD_UTILS "Build utils/ folder" OFF) | ||||
option(BUILD_TESTS "Build tests/ folder for unit tests to be executed on the host against FAudio" OFF) | ||||
if(WIN32) | ||||
r690 | option(PLATFORM_WIN32 "Enable native Win32 platform instead of SDL2" OFF) | |||
r0 | endif() | |||
option(XNASONG "Build with XNA_Song.c" ON) | ||||
option(LOG_ASSERTIONS "Bind FAudio_assert to log, instead of platform's assert" OFF) | ||||
option(FORCE_ENABLE_DEBUGCONFIGURATION "Enable DebugConfiguration in all build types" OFF) | ||||
option(DUMP_VOICES "Dump voices to RIFF WAVE files" OFF) | ||||
option(BUILD_SHARED_LIBS "Build shared library" ON) | ||||
if(WIN32) | ||||
option(INSTALL_MINGW_DEPENDENCIES "Add dependent libraries to MinGW install target" OFF) | ||||
endif() | ||||
# C99 Requirement | ||||
if(${CMAKE_VERSION} VERSION_LESS "3.1.3") | ||||
message(WARNING "Your CMake version is too old, set -std=c99 yourself!") | ||||
else() | ||||
set(CMAKE_C_STANDARD 99) | ||||
set(CMAKE_C_EXTENSIONS OFF) | ||||
endif() | ||||
# Version | ||||
SET(LIB_MAJOR_VERSION "0") | ||||
r690 | SET(LIB_MINOR_VERSION "22") | |||
SET(LIB_REVISION "12") | ||||
r0 | SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}") | |||
# Build Type | ||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) | ||||
# By default, we use Release | ||||
message(STATUS "Setting build type to 'Release' as none was specified.") | ||||
set(CMAKE_BUILD_TYPE "Release" CACHE | ||||
STRING "Choose the type of build." FORCE | ||||
) | ||||
# Set the possible values of build type for cmake-gui | ||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY | ||||
STRINGS "Debug" "Release" "RelWithDebInfo" | ||||
) | ||||
endif() | ||||
# Add our repository's module path to CMake's module path list | ||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") | ||||
# Platform Flags | ||||
if(APPLE) | ||||
set(CMAKE_MACOSX_RPATH ON) | ||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9) | ||||
elseif(WIN32) | ||||
# "FAudio.dll", not "libFAudio.dll" | ||||
set(CMAKE_SHARED_LIBRARY_PREFIX "") | ||||
endif() | ||||
# Helper function for finding/installing MinGW libs | ||||
if(INSTALL_MINGW_DEPENDENCIES) | ||||
include(cmake/install_shared_libs.cmake) | ||||
endif() | ||||
# Source lists | ||||
add_library(FAudio | ||||
# Public Headers | ||||
include/F3DAudio.h | ||||
include/FACT3D.h | ||||
include/FACT.h | ||||
include/FAPOBase.h | ||||
include/FAPOFX.h | ||||
include/FAPO.h | ||||
include/FAudioFX.h | ||||
include/FAudio.h | ||||
# Internal Headers | ||||
src/FACT_internal.h | ||||
src/FAudio_internal.h | ||||
src/stb.h | ||||
src/stb_vorbis.h | ||||
# Source Files | ||||
src/F3DAudio.c | ||||
src/FACT3D.c | ||||
src/FACT.c | ||||
src/FACT_internal.c | ||||
src/FAPOBase.c | ||||
src/FAPOFX.c | ||||
src/FAPOFX_echo.c | ||||
src/FAPOFX_eq.c | ||||
src/FAPOFX_masteringlimiter.c | ||||
src/FAPOFX_reverb.c | ||||
src/FAudio.c | ||||
src/FAudioFX_reverb.c | ||||
src/FAudioFX_volumemeter.c | ||||
src/FAudio_internal.c | ||||
src/FAudio_internal_simd.c | ||||
src/FAudio_operationset.c | ||||
src/FAudio_platform_sdl2.c | ||||
r690 | src/FAudio_platform_win32.c | |||
r0 | # Optional source files | |||
src/XNA_Song.c | ||||
) | ||||
r690 | if(PLATFORM_WIN32) | |||
target_link_libraries(FAudio PRIVATE -ldxguid -luuid -lwinmm -lole32 -ladvapi32 -luser32 -lmfplat -lmfreadwrite -lmfuuid -lpropsys) | ||||
target_compile_definitions(FAudio PUBLIC FAUDIO_WIN32_PLATFORM) | ||||
target_compile_definitions(FAudio PRIVATE HAVE_WMADEC=1) | ||||
set(PLATFORM_CFLAGS "-DFAUDIO_WIN32_PLATFORM") | ||||
set(XNASONG OFF) | ||||
else() | ||||
set(PLATFORM_CFLAGS) | ||||
endif() | ||||
r0 | # Only disable DebugConfiguration in release builds | |||
if(NOT FORCE_ENABLE_DEBUGCONFIGURATION) | ||||
target_compile_definitions(FAudio PRIVATE $<$<CONFIG:Release>:FAUDIO_DISABLE_DEBUGCONFIGURATION>) | ||||
endif() | ||||
# FAudio_assert Customization | ||||
if(LOG_ASSERTIONS) | ||||
target_compile_definitions(FAudio PUBLIC FAUDIO_LOG_ASSERTIONS) | ||||
endif() | ||||
# FAudio folders as includes, for other targets to consume | ||||
target_include_directories(FAudio PUBLIC | ||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> | ||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||||
) | ||||
# MinGW builds should statically link libgcc | ||||
if(MINGW) | ||||
target_link_libraries(FAudio PRIVATE -static-libgcc) | ||||
endif() | ||||
# Soname | ||||
set_target_properties(FAudio PROPERTIES OUTPUT_NAME "FAudio" | ||||
VERSION ${LIB_VERSION} | ||||
SOVERSION ${LIB_MAJOR_VERSION} | ||||
) | ||||
# XNA_Song Support | ||||
if(NOT XNASONG) | ||||
target_compile_definitions(FAudio PRIVATE DISABLE_XNASONG) | ||||
endif() | ||||
# Dump source voices to RIFF WAVE files | ||||
if(DUMP_VOICES) | ||||
target_compile_definitions(FAudio PRIVATE FAUDIO_DUMP_VOICES) | ||||
endif() | ||||
# SDL2 Dependency | ||||
r690 | if (PLATFORM_WIN32) | |||
message(STATUS "not using SDL2") | ||||
elseif (DEFINED SDL2_INCLUDE_DIRS AND DEFINED SDL2_LIBRARIES) | ||||
r0 | message(STATUS "using pre-defined SDL2 variables SDL2_INCLUDE_DIRS and SDL2_LIBRARIES") | |||
target_include_directories(FAudio PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>") | ||||
target_link_libraries(FAudio PUBLIC ${SDL2_LIBRARIES}) | ||||
if(INSTALL_MINGW_DEPENDENCIES) | ||||
install_shared_libs(${SDL2_LIBRARIES} DESTINATION bin NO_INSTALL_SYMLINKS) | ||||
endif() | ||||
else() | ||||
# Only try to autodetect if both SDL2 variables aren't explicitly set | ||||
find_package(SDL2 CONFIG) | ||||
if (TARGET SDL2::SDL2) | ||||
message(STATUS "using TARGET SDL2::SDL2") | ||||
target_link_libraries(FAudio PUBLIC SDL2::SDL2) | ||||
if(INSTALL_MINGW_DEPENDENCIES) | ||||
install_shared_libs(TARGETS SDL2::SDL2 DESTINATION bin NO_INSTALL_SYMLINKS REQUIRED) | ||||
endif() | ||||
elseif (TARGET SDL2) | ||||
message(STATUS "using TARGET SDL2") | ||||
target_link_libraries(FAudio PUBLIC SDL2) | ||||
if(INSTALL_MINGW_DEPENDENCIES) | ||||
install_shared_libs(TARGETS SDL2 DESTINATION bin NO_INSTALL_SYMLINKS REQUIRED) | ||||
endif() | ||||
else() | ||||
message(STATUS "no TARGET SDL2::SDL2, or SDL2, using variables") | ||||
target_include_directories(FAudio PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>") | ||||
target_link_libraries(FAudio PUBLIC ${SDL2_LIBRARIES}) | ||||
if(INSTALL_MINGW_DEPENDENCIES) | ||||
install_shared_libs(${SDL2_LIBRARIES} DESTINATION bin NO_INSTALL_SYMLINKS) | ||||
endif() | ||||
endif() | ||||
endif() | ||||
# utils/ Folder | ||||
if(BUILD_UTILS) | ||||
r690 | enable_language(CXX) | |||
r0 | # Shared ImGui Framework | |||
add_library(uicommon STATIC | ||||
utils/uicommon/FAudioUI_main.cpp | ||||
utils/uicommon/imconfig.h | ||||
utils/uicommon/imgui.cpp | ||||
utils/uicommon/imgui_demo.cpp | ||||
utils/uicommon/imgui_draw.cpp | ||||
utils/uicommon/imgui_widgets.cpp | ||||
utils/uicommon/imgui.h | ||||
utils/uicommon/imgui_internal.h | ||||
utils/uicommon/imstb_rectpack.h | ||||
utils/uicommon/imstb_textedit.h | ||||
utils/uicommon/imstb_truetype.h | ||||
) | ||||
target_link_libraries(uicommon PUBLIC FAudio) | ||||
# Shared WAV Resources | ||||
add_library(wavs STATIC utils/wavcommon/wavs.cpp) | ||||
target_compile_definitions(wavs PUBLIC | ||||
RESOURCE_PATH="${CMAKE_SOURCE_DIR}/utils/wavcommon/resources" | ||||
) | ||||
# These tools do NOT use uicommon | ||||
add_executable(testparse utils/testparse/testparse.c) | ||||
target_link_libraries(testparse PRIVATE FAudio) | ||||
add_executable(testxwma utils/testxwma/testxwma.cpp) | ||||
target_link_libraries(testxwma PRIVATE FAudio) | ||||
add_executable(showriffheader utils/showriffheader/showriffheader.cpp) | ||||
target_link_libraries(showriffheader PRIVATE FAudio) | ||||
# These tools use uicommon, but NOT wavs | ||||
add_executable(facttool utils/facttool/facttool.cpp) | ||||
target_link_libraries(facttool PRIVATE uicommon) | ||||
add_executable(testfilter | ||||
utils/testfilter/audio.cpp | ||||
utils/testfilter/audio_faudio.cpp | ||||
utils/testfilter/audio.h | ||||
utils/testfilter/audio_player.h | ||||
utils/testfilter/audio_xaudio.cpp | ||||
utils/testfilter/oscillator.cpp | ||||
utils/testfilter/oscillator.h | ||||
utils/testfilter/testfilter.cpp | ||||
) | ||||
target_link_libraries(testfilter PRIVATE uicommon) | ||||
# These tools use both uicommon and wavs | ||||
add_executable(testreverb | ||||
utils/testreverb/audio.cpp | ||||
utils/testreverb/audio_faudio.cpp | ||||
utils/testreverb/audio.h | ||||
utils/testreverb/audio_xaudio.cpp | ||||
utils/testreverb/testreverb.cpp | ||||
) | ||||
target_link_libraries(testreverb PRIVATE uicommon wavs) | ||||
add_executable(testvolumemeter | ||||
utils/testvolumemeter/audio.cpp | ||||
utils/testvolumemeter/audio_faudio.cpp | ||||
utils/testvolumemeter/audio.h | ||||
utils/testvolumemeter/testvolumemeter.cpp | ||||
) | ||||
target_link_libraries(testvolumemeter PRIVATE uicommon wavs) | ||||
endif() | ||||
# define install directories | ||||
# on mingw-w64 cross compilation $CMAKE_INSTALL_LIBDIR is set to an absolute | ||||
# path. Work around that by hard coding the directories on windows | ||||
if(WIN32) | ||||
set(FAudio_INSTALL_INCLUDEDIR include) | ||||
set(FAudio_INSTALL_BINDIR bin) | ||||
set(FAudio_INSTALL_LIBDIR lib) | ||||
else() | ||||
include(GNUInstallDirs) | ||||
set(FAudio_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}) | ||||
set(FAudio_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR}) | ||||
set(FAudio_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) | ||||
endif() | ||||
# tests/ Folder | ||||
if(BUILD_TESTS) | ||||
add_executable(faudio_tests tests/xaudio2.c) | ||||
target_link_libraries(faudio_tests PRIVATE FAudio) | ||||
endif() | ||||
# Installation | ||||
# Public Headers... | ||||
install( | ||||
DIRECTORY include/ | ||||
DESTINATION ${FAudio_INSTALL_INCLUDEDIR} | ||||
) | ||||
# Libraries... | ||||
install( | ||||
TARGETS ${PROJECT_NAME} | ||||
EXPORT ${PROJECT_NAME}-targets | ||||
INCLUDES DESTINATION ${FAudio_INSTALL_INCLUDEDIR} | ||||
RUNTIME DESTINATION ${FAudio_INSTALL_BINDIR} | ||||
LIBRARY DESTINATION ${FAudio_INSTALL_LIBDIR} | ||||
ARCHIVE DESTINATION ${FAudio_INSTALL_LIBDIR} | ||||
) | ||||
r690 | # Generate a pkgconfig file | |||
include(cmake/JoinPaths.cmake) | ||||
join_paths(FAUDIO_PKGCONF_LIBDIR "\${prefix}" "${CMAKE_INSTALL_LIBDIR}") | ||||
join_paths(FAUDIO_PKGCONF_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") | ||||
configure_file( | ||||
"${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.pc.in" | ||||
${PROJECT_BINARY_DIR}/generated/${PROJECT_NAME}.pc | ||||
@ONLY | ||||
) | ||||
install( | ||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/generated/${PROJECT_NAME}.pc | ||||
DESTINATION ${FAudio_INSTALL_LIBDIR}/pkgconfig | ||||
) | ||||
r0 | # Generate cmake-config file, install CMake files | |||
include(CMakePackageConfigHelpers) | ||||
configure_package_config_file( | ||||
cmake/config.cmake.in | ||||
r690 | ${CMAKE_CURRENT_BINARY_DIR}/generated/${PROJECT_NAME}Config.cmake | |||
r0 | INSTALL_DESTINATION ${FAudio_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} | |||
) | ||||
install( | ||||
r690 | FILES ${CMAKE_CURRENT_BINARY_DIR}/generated/${PROJECT_NAME}Config.cmake | |||
r0 | DESTINATION ${FAudio_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} | |||
) | ||||
install( | ||||
EXPORT ${PROJECT_NAME}-targets | ||||
NAMESPACE ${PROJECT_NAME}:: | ||||
DESTINATION ${FAudio_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} | ||||
) | ||||