Linux build for cubeb
This commit is contained in:
parent
7bdcd00852
commit
4de82bda6d
|
@ -1,3 +1,4 @@
|
||||||
|
add_subdirectory(cubeb)
|
||||||
add_subdirectory(glad)
|
add_subdirectory(glad)
|
||||||
add_subdirectory(imgui)
|
add_subdirectory(imgui)
|
||||||
add_subdirectory(libcue)
|
add_subdirectory(libcue)
|
||||||
|
|
|
@ -5,16 +5,6 @@ cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
|
||||||
project(cubeb
|
project(cubeb
|
||||||
VERSION 0.0.0)
|
VERSION 0.0.0)
|
||||||
|
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
|
|
||||||
option(BUILD_TESTS "Build tests" ON)
|
|
||||||
option(BUILD_RUST_LIBS "Build rust backends" OFF)
|
|
||||||
option(BUILD_TOOLS "Build tools" ON)
|
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
|
|
||||||
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(POLICY CMP0063)
|
if(POLICY CMP0063)
|
||||||
cmake_policy(SET CMP0063 NEW)
|
cmake_policy(SET CMP0063 NEW)
|
||||||
endif()
|
endif()
|
||||||
|
@ -22,34 +12,6 @@ set(CMAKE_C_STANDARD 99)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
if(NOT COMMAND add_sanitizers)
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/sanitizers-cmake/cmake")
|
|
||||||
find_package(Sanitizers)
|
|
||||||
if(NOT COMMAND add_sanitizers)
|
|
||||||
message(FATAL_ERROR "Could not find sanitizers-cmake: run\n\tgit submodule update --init --recursive\nin base git checkout")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(BUILD_TESTS)
|
|
||||||
if(NOT TARGET gtest_main)
|
|
||||||
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/googletest/CMakeLists.txt")
|
|
||||||
message(FATAL_ERROR "Could not find googletest: run\n\tgit submodule update --init --recursive\nin base git checkout")
|
|
||||||
endif()
|
|
||||||
add_definitions(-DGTEST_HAS_TR1_TUPLE=0)
|
|
||||||
set(gtest_force_shared_crt ON CACHE BOOL "")
|
|
||||||
add_subdirectory(googletest)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (BUILD_RUST_LIBS)
|
|
||||||
if(EXISTS "${PROJECT_SOURCE_DIR}/src/cubeb-pulse-rs")
|
|
||||||
set(USE_PULSE_RUST 1)
|
|
||||||
endif()
|
|
||||||
if(EXISTS "${PROJECT_SOURCE_DIR}/src/cubeb-coreaudio-rs")
|
|
||||||
set(USE_AUDIOUNIT_RUST 1)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# On OS/2, visibility attribute is not supported.
|
# On OS/2, visibility attribute is not supported.
|
||||||
if(NOT OS2)
|
if(NOT OS2)
|
||||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
||||||
|
@ -72,65 +34,14 @@ add_library(cubeb
|
||||||
src/cubeb_utils.cpp
|
src/cubeb_utils.cpp
|
||||||
$<TARGET_OBJECTS:speex>)
|
$<TARGET_OBJECTS:speex>)
|
||||||
target_include_directories(cubeb
|
target_include_directories(cubeb
|
||||||
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>
|
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
|
||||||
)
|
|
||||||
target_include_directories(cubeb PRIVATE src)
|
target_include_directories(cubeb PRIVATE src)
|
||||||
target_compile_definitions(cubeb PRIVATE OUTSIDE_SPEEX)
|
target_compile_definitions(cubeb PRIVATE OUTSIDE_SPEEX)
|
||||||
target_compile_definitions(cubeb PRIVATE FLOATING_POINT)
|
target_compile_definitions(cubeb PRIVATE FLOATING_POINT)
|
||||||
target_compile_definitions(cubeb PRIVATE EXPORT=)
|
target_compile_definitions(cubeb PRIVATE EXPORT=)
|
||||||
target_compile_definitions(cubeb PRIVATE RANDOM_PREFIX=speex)
|
target_compile_definitions(cubeb PRIVATE RANDOM_PREFIX=speex)
|
||||||
|
|
||||||
add_sanitizers(cubeb)
|
|
||||||
|
|
||||||
include(GenerateExportHeader)
|
|
||||||
generate_export_header(cubeb EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/exports/cubeb_export.h)
|
|
||||||
target_include_directories(cubeb
|
|
||||||
PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/exports>
|
|
||||||
)
|
|
||||||
|
|
||||||
if(UNIX)
|
|
||||||
include(GNUInstallDirs)
|
|
||||||
else()
|
|
||||||
set(CMAKE_INSTALL_LIBDIR "lib")
|
|
||||||
set(CMAKE_INSTALL_BINDIR "bin")
|
|
||||||
set(CMAKE_INSTALL_DATADIR "share")
|
|
||||||
set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATADIR}/doc")
|
|
||||||
set(CMAKE_INSTALL_INCLUDEDIR "include")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
||||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/exports/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
|
|
||||||
|
|
||||||
include(CMakePackageConfigHelpers)
|
|
||||||
write_basic_package_version_file(
|
|
||||||
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
|
||||||
COMPATIBILITY SameMajorVersion
|
|
||||||
)
|
|
||||||
|
|
||||||
configure_package_config_file(
|
|
||||||
"Config.cmake.in"
|
|
||||||
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
|
|
||||||
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
|
|
||||||
)
|
|
||||||
|
|
||||||
install(TARGETS cubeb
|
|
||||||
EXPORT "${PROJECT_NAME}Targets"
|
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}
|
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
||||||
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
||||||
)
|
|
||||||
install(
|
|
||||||
FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
|
||||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
|
|
||||||
)
|
|
||||||
install(
|
|
||||||
EXPORT "${PROJECT_NAME}Targets"
|
|
||||||
NAMESPACE "${PROJECT_NAME}::"
|
|
||||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(speex OBJECT
|
add_library(speex OBJECT
|
||||||
src/speex/resample.c)
|
src/speex/resample.c)
|
||||||
set_target_properties(speex PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
|
set_target_properties(speex PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
|
||||||
|
@ -231,102 +142,3 @@ if(USE_KAI)
|
||||||
target_link_libraries(cubeb PRIVATE kai)
|
target_link_libraries(cubeb PRIVATE kai)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(USE_PULSE_RUST)
|
|
||||||
include(ExternalProject)
|
|
||||||
set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/rust)
|
|
||||||
ExternalProject_Add(
|
|
||||||
cubeb_pulse_rs
|
|
||||||
DOWNLOAD_COMMAND ""
|
|
||||||
CONFIGURE_COMMAND ""
|
|
||||||
BUILD_COMMAND cargo build COMMAND cargo build --release
|
|
||||||
BINARY_DIR "${CMAKE_SOURCE_DIR}/src/cubeb-pulse-rs"
|
|
||||||
INSTALL_COMMAND ""
|
|
||||||
LOG_BUILD ON)
|
|
||||||
add_dependencies(cubeb cubeb_pulse_rs)
|
|
||||||
target_compile_definitions(cubeb PRIVATE USE_PULSE_RUST)
|
|
||||||
target_link_libraries(cubeb PRIVATE
|
|
||||||
debug "${CMAKE_SOURCE_DIR}/src/cubeb-pulse-rs/target/debug/libcubeb_pulse.a"
|
|
||||||
optimized "${CMAKE_SOURCE_DIR}/src/cubeb-pulse-rs/target/release/libcubeb_pulse.a" pulse)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(USE_AUDIOUNIT_RUST)
|
|
||||||
include(ExternalProject)
|
|
||||||
set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/rust)
|
|
||||||
ExternalProject_Add(
|
|
||||||
cubeb_coreaudio_rs
|
|
||||||
DOWNLOAD_COMMAND ""
|
|
||||||
CONFIGURE_COMMAND ""
|
|
||||||
BUILD_COMMAND cargo build COMMAND cargo build --release
|
|
||||||
BINARY_DIR "${CMAKE_SOURCE_DIR}/src/cubeb-coreaudio-rs"
|
|
||||||
INSTALL_COMMAND ""
|
|
||||||
LOG_BUILD ON)
|
|
||||||
add_dependencies(cubeb cubeb_coreaudio_rs)
|
|
||||||
target_compile_definitions(cubeb PRIVATE USE_AUDIOUNIT_RUST)
|
|
||||||
target_link_libraries(cubeb PRIVATE
|
|
||||||
debug "${CMAKE_SOURCE_DIR}/src/cubeb-coreaudio-rs/target/debug/libcubeb_coreaudio.a"
|
|
||||||
optimized "${CMAKE_SOURCE_DIR}/src/cubeb-coreaudio-rs/target/release/libcubeb_coreaudio.a")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_package(Doxygen)
|
|
||||||
if(DOXYGEN_FOUND)
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile @ONLY)
|
|
||||||
add_custom_target(doc ALL
|
|
||||||
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs
|
|
||||||
COMMENT "Generating API documentation with Doxygen" VERBATIM)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(BUILD_TESTS)
|
|
||||||
enable_testing()
|
|
||||||
|
|
||||||
macro(cubeb_add_test NAME)
|
|
||||||
add_executable(test_${NAME} test/test_${NAME}.cpp)
|
|
||||||
target_include_directories(test_${NAME} PRIVATE ${gtest_SOURCE_DIR}/include)
|
|
||||||
target_include_directories(test_${NAME} PRIVATE src)
|
|
||||||
target_link_libraries(test_${NAME} PRIVATE cubeb gtest_main)
|
|
||||||
add_test(${NAME} test_${NAME})
|
|
||||||
add_sanitizers(test_${NAME})
|
|
||||||
install(TARGETS test_${NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
|
|
||||||
endmacro(cubeb_add_test)
|
|
||||||
|
|
||||||
cubeb_add_test(sanity)
|
|
||||||
cubeb_add_test(tone)
|
|
||||||
cubeb_add_test(audio)
|
|
||||||
cubeb_add_test(record)
|
|
||||||
cubeb_add_test(devices)
|
|
||||||
cubeb_add_test(callback_ret)
|
|
||||||
|
|
||||||
add_executable(test_resampler test/test_resampler.cpp src/cubeb_resampler.cpp $<TARGET_OBJECTS:speex>)
|
|
||||||
target_include_directories(test_resampler PRIVATE ${gtest_SOURCE_DIR}/include)
|
|
||||||
target_include_directories(test_resampler PRIVATE src)
|
|
||||||
target_compile_definitions(test_resampler PRIVATE OUTSIDE_SPEEX)
|
|
||||||
target_compile_definitions(test_resampler PRIVATE FLOATING_POINT)
|
|
||||||
target_compile_definitions(test_resampler PRIVATE EXPORT=)
|
|
||||||
target_compile_definitions(test_resampler PRIVATE RANDOM_PREFIX=speex)
|
|
||||||
target_link_libraries(test_resampler PRIVATE cubeb gtest_main)
|
|
||||||
add_test(resampler test_resampler)
|
|
||||||
add_sanitizers(test_resampler)
|
|
||||||
install(TARGETS test_resampler DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
|
|
||||||
|
|
||||||
cubeb_add_test(duplex)
|
|
||||||
|
|
||||||
if (USE_WASAPI)
|
|
||||||
cubeb_add_test(overload_callback)
|
|
||||||
cubeb_add_test(loopback)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
cubeb_add_test(latency test_latency)
|
|
||||||
cubeb_add_test(ring_array)
|
|
||||||
|
|
||||||
cubeb_add_test(utils)
|
|
||||||
cubeb_add_test(ring_buffer)
|
|
||||||
cubeb_add_test(device_changed_callback)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(BUILD_TOOLS)
|
|
||||||
add_executable(cubeb-test tools/cubeb-test.cpp)
|
|
||||||
target_include_directories(cubeb-test PRIVATE src)
|
|
||||||
target_link_libraries(cubeb-test PRIVATE cubeb)
|
|
||||||
add_sanitizers(cubeb-test)
|
|
||||||
install(TARGETS cubeb-test DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
|
|
||||||
endif()
|
|
||||||
|
|
|
@ -16,6 +16,8 @@ add_library(common
|
||||||
cd_xa.cpp
|
cd_xa.cpp
|
||||||
cd_xa.h
|
cd_xa.h
|
||||||
cpu_detect.h
|
cpu_detect.h
|
||||||
|
cubeb_audio_stream.cpp
|
||||||
|
cubeb_audio_stream.h
|
||||||
fifo_queue.h
|
fifo_queue.h
|
||||||
file_system.cpp
|
file_system.cpp
|
||||||
file_system.h
|
file_system.h
|
||||||
|
@ -52,7 +54,7 @@ add_library(common
|
||||||
|
|
||||||
target_include_directories(common PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
target_include_directories(common PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
||||||
target_include_directories(common PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
target_include_directories(common PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
||||||
target_link_libraries(common PRIVATE glad libcue Threads::Threads)
|
target_link_libraries(common PRIVATE glad libcue Threads::Threads cubeb)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
target_sources(common PRIVATE
|
target_sources(common PRIVATE
|
||||||
|
|
Loading…
Reference in New Issue