voice_audio_multi/app/server/server_frontends.cmake
Fabio c36510c21e
Some checks failed
Linux Build / Linux cpu (push) Has been cancelled
Linux Build / Linux cpu-clang (push) Has been cancelled
Linux Build / Linux vulkan (push) Has been cancelled
mac-build / macOS CPU (push) Has been cancelled
Nix Build / Nix (cpu) (push) Has been cancelled
Nix Build / Nix (vulkan) (push) Has been cancelled
windows-build / Windows CPU (push) Has been cancelled
Initial import: audio.cpp with Orange Pi documentation
2026-11-04 19:05:22 +01:00

181 lines
8.9 KiB
CMake

option(AUDIOCPP_BUILD_SERVER_FRONTENDS
"Build optional in-process audiocpp_server frontend adapters"
OFF)
set(AUDIOCPP_SERVER_FRONTEND_MODULES ""
CACHE STRING "Semicolon-separated optional audiocpp_server frontend modules to build")
set(AUDIOCPP_SERVER_FRONTENDS_DIR ""
CACHE PATH "Optional external server frontend module package")
if (NOT AUDIOCPP_BUILD_SERVER_FRONTENDS AND AUDIOCPP_SERVER_FRONTEND_MODULES)
message(FATAL_ERROR
"AUDIOCPP_SERVER_FRONTEND_MODULES requires AUDIOCPP_BUILD_SERVER_FRONTENDS=ON")
endif()
function(audiocpp_register_server_frontend AUDIOCPP_SERVER_FRONTEND_NAME)
set(options)
set(one_value_args REGISTER_FUNCTION)
set(multi_value_args SOURCES INCLUDE_DIRS LIBRARIES COMPILE_DEFINITIONS)
cmake_parse_arguments(
AUDIOCPP_REGISTERED_FRONTEND
"${options}"
"${one_value_args}"
"${multi_value_args}"
${ARGN})
set_property(GLOBAL APPEND PROPERTY
"AUDIOCPP_SERVER_FRONTEND_REGISTERED_MODULES"
"${AUDIOCPP_SERVER_FRONTEND_NAME}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_NAME}_REGISTER_FUNCTION"
"${AUDIOCPP_REGISTERED_FRONTEND_REGISTER_FUNCTION}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_NAME}_SOURCES"
"${AUDIOCPP_REGISTERED_FRONTEND_SOURCES}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_NAME}_INCLUDE_DIRS"
"${AUDIOCPP_REGISTERED_FRONTEND_INCLUDE_DIRS}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_NAME}_LIBRARIES"
"${AUDIOCPP_REGISTERED_FRONTEND_LIBRARIES}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_NAME}_COMPILE_DEFINITIONS"
"${AUDIOCPP_REGISTERED_FRONTEND_COMPILE_DEFINITIONS}")
endfunction()
function(audiocpp_collect_server_frontends)
get_property(AUDIOCPP_SERVER_FRONTENDS_ALREADY_COLLECTED GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTENDS_COLLECTED" SET)
if (AUDIOCPP_SERVER_FRONTENDS_ALREADY_COLLECTED)
return()
endif()
set_property(GLOBAL PROPERTY "AUDIOCPP_SERVER_FRONTENDS_COLLECTED" TRUE)
set(AUDIOCPP_SERVER_FRONTEND_DECLARATIONS "")
set(AUDIOCPP_SERVER_FRONTEND_REGISTRATIONS "")
set(AUDIOCPP_SERVER_FRONTEND_SOURCES "")
set(AUDIOCPP_SERVER_FRONTEND_INCLUDE_DIRS "")
set(AUDIOCPP_SERVER_FRONTEND_LIBRARIES "")
set(AUDIOCPP_SERVER_FRONTEND_COMPILE_DEFINITIONS "")
if (AUDIOCPP_BUILD_SERVER_FRONTENDS AND AUDIOCPP_SERVER_FRONTEND_MODULES)
if (NOT AUDIOCPP_SERVER_FRONTENDS_DIR)
message(FATAL_ERROR
"AUDIOCPP_BUILD_SERVER_FRONTENDS=ON requires AUDIOCPP_SERVER_FRONTENDS_DIR=<external frontend package>")
endif()
get_filename_component(
AUDIOCPP_SERVER_FRONTENDS_DIR_ABS
"${AUDIOCPP_SERVER_FRONTENDS_DIR}"
ABSOLUTE
BASE_DIR "${PROJECT_SOURCE_DIR}")
if (NOT EXISTS "${AUDIOCPP_SERVER_FRONTENDS_DIR_ABS}/server_frontends.cmake")
message(FATAL_ERROR
"AUDIOCPP_SERVER_FRONTENDS_DIR must contain server_frontends.cmake: ${AUDIOCPP_SERVER_FRONTENDS_DIR_ABS}")
endif()
set_property(GLOBAL PROPERTY "AUDIOCPP_SERVER_FRONTEND_REGISTERED_MODULES" "")
include("${AUDIOCPP_SERVER_FRONTENDS_DIR_ABS}/server_frontends.cmake")
get_property(AUDIOCPP_REGISTERED_SERVER_FRONTENDS GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_REGISTERED_MODULES")
foreach(AUDIOCPP_SERVER_FRONTEND_MODULE IN LISTS AUDIOCPP_SERVER_FRONTEND_MODULES)
list(FIND AUDIOCPP_REGISTERED_SERVER_FRONTENDS "${AUDIOCPP_SERVER_FRONTEND_MODULE}" AUDIOCPP_SERVER_FRONTEND_INDEX)
if (AUDIOCPP_SERVER_FRONTEND_INDEX EQUAL -1)
message(FATAL_ERROR
"External server frontend package did not register requested module: ${AUDIOCPP_SERVER_FRONTEND_MODULE}")
endif()
get_property(AUDIOCPP_FRONTEND_REGISTER_FUNCTION GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_MODULE}_REGISTER_FUNCTION")
get_property(AUDIOCPP_FRONTEND_SOURCES GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_MODULE}_SOURCES")
get_property(AUDIOCPP_FRONTEND_INCLUDE_DIRS GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_MODULE}_INCLUDE_DIRS")
get_property(AUDIOCPP_FRONTEND_LIBRARIES GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_MODULE}_LIBRARIES")
get_property(AUDIOCPP_FRONTEND_COMPILE_DEFINITIONS GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_${AUDIOCPP_SERVER_FRONTEND_MODULE}_COMPILE_DEFINITIONS")
if (AUDIOCPP_FRONTEND_REGISTER_FUNCTION)
string(APPEND AUDIOCPP_SERVER_FRONTEND_DECLARATIONS
"void ${AUDIOCPP_FRONTEND_REGISTER_FUNCTION}(ServerFrontendRegistry & registry);\n")
string(APPEND AUDIOCPP_SERVER_FRONTEND_REGISTRATIONS
" ${AUDIOCPP_FRONTEND_REGISTER_FUNCTION}(registry);\n")
endif()
list(APPEND AUDIOCPP_SERVER_FRONTEND_SOURCES ${AUDIOCPP_FRONTEND_SOURCES})
list(APPEND AUDIOCPP_SERVER_FRONTEND_INCLUDE_DIRS ${AUDIOCPP_FRONTEND_INCLUDE_DIRS})
list(APPEND AUDIOCPP_SERVER_FRONTEND_LIBRARIES ${AUDIOCPP_FRONTEND_LIBRARIES})
list(APPEND AUDIOCPP_SERVER_FRONTEND_COMPILE_DEFINITIONS ${AUDIOCPP_FRONTEND_COMPILE_DEFINITIONS})
endforeach()
endif()
if (AUDIOCPP_SERVER_FRONTEND_SOURCES)
list(REMOVE_DUPLICATES AUDIOCPP_SERVER_FRONTEND_INCLUDE_DIRS)
list(REMOVE_DUPLICATES AUDIOCPP_SERVER_FRONTEND_LIBRARIES)
list(REMOVE_DUPLICATES AUDIOCPP_SERVER_FRONTEND_COMPILE_DEFINITIONS)
endif()
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_DECLARATIONS"
"${AUDIOCPP_SERVER_FRONTEND_DECLARATIONS}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_REGISTRATIONS"
"${AUDIOCPP_SERVER_FRONTEND_REGISTRATIONS}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_SOURCES"
"${AUDIOCPP_SERVER_FRONTEND_SOURCES}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_INCLUDE_DIRS"
"${AUDIOCPP_SERVER_FRONTEND_INCLUDE_DIRS}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_LIBRARIES"
"${AUDIOCPP_SERVER_FRONTEND_LIBRARIES}")
set_property(GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_COMPILE_DEFINITIONS"
"${AUDIOCPP_SERVER_FRONTEND_COMPILE_DEFINITIONS}")
endfunction()
function(audiocpp_configure_server_frontends AUDIOCPP_SERVER_TARGET)
audiocpp_collect_server_frontends()
get_property(AUDIOCPP_SERVER_FRONTEND_DECLARATIONS GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_DECLARATIONS")
get_property(AUDIOCPP_SERVER_FRONTEND_REGISTRATIONS GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_REGISTRATIONS")
get_property(AUDIOCPP_SERVER_FRONTEND_SOURCES GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_SOURCES")
get_property(AUDIOCPP_SERVER_FRONTEND_INCLUDE_DIRS GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_INCLUDE_DIRS")
get_property(AUDIOCPP_SERVER_FRONTEND_LIBRARIES GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_LIBRARIES")
get_property(AUDIOCPP_SERVER_FRONTEND_COMPILE_DEFINITIONS GLOBAL PROPERTY
"AUDIOCPP_SERVER_FRONTEND_SELECTED_COMPILE_DEFINITIONS")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated")
if (AUDIOCPP_SERVER_FRONTEND_SOURCES)
add_library(audiocpp_server_frontends OBJECT
${AUDIOCPP_SERVER_FRONTEND_SOURCES}
)
target_include_directories(audiocpp_server_frontends PRIVATE
"${PROJECT_SOURCE_DIR}/app/server"
${AUDIOCPP_SERVER_FRONTEND_INCLUDE_DIRS}
)
target_link_libraries(audiocpp_server_frontends PUBLIC engine_runtime PRIVATE
${AUDIOCPP_SERVER_FRONTEND_LIBRARIES})
target_compile_definitions(audiocpp_server_frontends PRIVATE
${AUDIOCPP_SERVER_FRONTEND_COMPILE_DEFINITIONS})
target_sources(${AUDIOCPP_SERVER_TARGET} PRIVATE $<TARGET_OBJECTS:audiocpp_server_frontends>)
target_link_libraries(${AUDIOCPP_SERVER_TARGET} PRIVATE
audiocpp_server_frontends
${AUDIOCPP_SERVER_FRONTEND_LIBRARIES})
target_compile_definitions(${AUDIOCPP_SERVER_TARGET} PRIVATE
${AUDIOCPP_SERVER_FRONTEND_COMPILE_DEFINITIONS})
endif()
file(WRITE
"${CMAKE_CURRENT_BINARY_DIR}/generated/server_frontend_module_declarations.inc"
"${AUDIOCPP_SERVER_FRONTEND_DECLARATIONS}")
file(WRITE
"${CMAKE_CURRENT_BINARY_DIR}/generated/server_frontend_module_registrations.inc"
"${AUDIOCPP_SERVER_FRONTEND_REGISTRATIONS}")
endfunction()