cmake_minimum_required(VERSION 3.6) project (iamf-ahal) message(STATUS "start build iamf") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -Werror=unused-variable") SET(CMAKE_POSITION_INDEPENDENT_CODE ON) option(BUILD_SHARED_LIBS "Build shared library" ON) if (CMAKE_SYSTEM_PROCESSOR MATCHES "(arm)") set(CODEC_LIB_DIR "${PROJECT_SOURCE_DIR}/dep_codecs/lib") message(WARNING "linux 32 bit!!!") else () set(CODEC_LIB_DIR "${PROJECT_SOURCE_DIR}/dep_codecs/lib64") message(WARNING "linux 64 bit!!!") endif () set(CODEC_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/dep_codecs/include") set(EXTER_LIB_DIR "${PROJECT_SOURCE_DIR}/dep_external/lib") set(EXTER_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/dep_external/include") option(SUPPORT_VERIFIER "Output vlogging file" OFF) if (SUPPORT_VERIFIER) message(STATUS "Output vlogging file") add_definitions(-DSUPPORT_VERIFIER=1) endif() option(CODEC_CAP "Codec capability check" ON) option(MULTICHANNEL_BINAURALIZER "Enable multichannel binaural rendering" OFF) option(HOA_BINAURALIZER "Enable HOA binaural rendering" OFF) if (CMAKE_BUILD_TYPE) string(TOLOWER ${CMAKE_BUILD_TYPE} BUILD_TYPE) if ("${BUILD_TYPE}" STREQUAL "debug") add_definitions(-DIA_DBG) message(STATUS "Debug mode.") endif() endif() if(MULTICHANNEL_BINAURALIZER) message(STATUS "Enable multichannel binaural rendering") add_definitions(-DENABLE_MULTICHANNEL_TO_BINAURAL=1) endif() if(HOA_BINAURALIZER) message(STATUS "Enable HOA binaural rendering") add_definitions(-DENABLE_HOA_TO_BINAURAL=1) endif() message(STATUS "CODEC_LIB_DIR: ${CODEC_LIB_DIR}") if(CODEC_CAP) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) unset(find_opus CACHE) find_library(find_opus NAMES opus PATHS ${CODEC_LIB_DIR} NO_DEFAULT_PATH) if(${find_opus} STREQUAL "find_opus-NOTFOUND") message(WARNING "the opus library was not found") else() add_definitions(-DCONFIG_OPUS_CODEC) endif() unset(find_aac CACHE) find_library(find_aac NAMES fdk-aac PATHS ${CODEC_LIB_DIR} NO_DEFAULT_PATH) if(${find_aac} STREQUAL "find_aac-NOTFOUND") message(WARNING "the fdk-aac library was not found") else() add_definitions(-DCONFIG_AAC_CODEC) endif() unset(find_flac CACHE) find_library(find_flac NAMES FLAC PATHS ${CODEC_LIB_DIR} NO_DEFAULT_PATH) if(${find_flac} STREQUAL "find_flac-NOTFOUND") message(WARNING "the FLAC library was not found") else() add_definitions(-DCONFIG_FLAC_CODEC) if(CMAKE_SYSTEM_NAME MATCHES "Windows") add_definitions(-DFLAC__NO_DLL) endif() endif() endif() include_directories (include) aux_source_directory (dep_external/src/wav DIR_DEP_EXTERNAL_WAV) aux_source_directory (src/common DIR_IAMF_COMMON) aux_source_directory (src/iamf_dec DIR_IAMF_DEC) aux_source_directory (src/iamf_dec/arch DIR_IAMF_DEC_ARCH) aux_source_directory (src/iamf_dec/arch/arm DIR_IAMF_DEC_ARCH_ARM) aux_source_directory (src/iamf_dec/arch/x86 DIR_IAMF_DEC_ARCH_X86) if(NOT ${find_opus} STREQUAL "find_opus-NOTFOUND") aux_source_directory (src/iamf_dec/opus DIR_IAMF_DEC_OPUS) endif() if(NOT ${find_aac} STREQUAL "find_aac-NOTFOUND") aux_source_directory (src/iamf_dec/aac DIR_IAMF_DEC_AAC) endif() if(NOT ${find_flac} STREQUAL "find_flac-NOTFOUND") aux_source_directory (src/iamf_dec/flac DIR_IAMF_DEC_FLAC) endif() aux_source_directory (src/iamf_dec/pcm DIR_IAMF_DEC_PCM) include_directories( ${CODEC_INCLUDE_DIR} ${EXTER_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/src/common ${PROJECT_SOURCE_DIR}/src/iamf_dec ${PROJECT_SOURCE_DIR}/src/iamf_dec/arch ${PROJECT_SOURCE_DIR}/src/iamf_dec/arch/arm ${PROJECT_SOURCE_DIR}/src/iamf_dec/arch/x86 ${PROJECT_SOURCE_DIR}/src/iamf_dec/opus ${PROJECT_SOURCE_DIR}/src/iamf_dec/aac ${PROJECT_SOURCE_DIR}/src/iamf_dec/flac ) link_directories ( ${CODEC_LIB_DIR} ) if(MULTICHANNEL_BINAURALIZER OR HOA_BINAURALIZER) link_directories( ${EXTER_LIB_DIR}/binaural ) endif() if(BUILD_SHARED_LIBS) add_library(${PROJECT_NAME} SHARED ${DIR_DEP_EXTERNAL_WAV} ${DIR_IAMF_COMMON} ${DIR_IAMF_DEC_OPUS} ${DIR_IAMF_DEC_AAC} ${DIR_IAMF_DEC_FLAC} ${DIR_IAMF_DEC_PCM} ${DIR_IAMF_DEC} ${DIR_IAMF_DEC_ARCH} ${DIR_IAMF_DEC_ARCH_ARM} ${DIR_IAMF_DEC_ARCH_X86} src/aml_decoder.c) if(NOT ${find_opus} STREQUAL "find_opus-NOTFOUND") target_link_libraries (${PROJECT_NAME} opus) endif() if(NOT ${find_aac} STREQUAL "find_aac-NOTFOUND") target_link_libraries (${PROJECT_NAME} fdk-aac) endif() if(NOT ${find_flac} STREQUAL "find_flac-NOTFOUND") target_link_libraries (${PROJECT_NAME} FLAC) endif() if(MULTICHANNEL_BINAURALIZER) target_link_libraries (${PROJECT_NAME} iamf2bear) endif() if(HOA_BINAURALIZER) target_link_libraries (${PROJECT_NAME} iamf2resonance) endif() target_link_libraries (${PROJECT_NAME} m) else() add_library(${PROJECT_NAME} STATIC ${DIR_DEP_EXTERNAL_WAV} ${DIR_IAMF_COMMON} ${DIR_IAMF_DEC_OPUS} ${DIR_IAMF_DEC_AAC} ${DIR_IAMF_DEC_PCM} ${DIR_IAMF_DEC_FLAC} ${DIR_IAMF_DEC} ${DIR_IAMF_DEC_ARCH} ${DIR_IAMF_DEC_ARCH_ARM} ${DIR_IAMF_DEC_ARCH_X86}) endif() set(IAMF_PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/IAMF_decoder.h ${CMAKE_CURRENT_SOURCE_DIR}/include/IAMF_defines.h ${CMAKE_CURRENT_SOURCE_DIR}/include/vlogging_tool_sr.h ) set_target_properties(iamf-ahal PROPERTIES PUBLIC_HEADER "${IAMF_PUBLIC_HEADER}") set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix ${CMAKE_INSTALL_PREFIX}) set(libdir ${CMAKE_INSTALL_PREFIX}/lib) set(includedir ${CMAKE_INSTALL_PREFIX}/include) configure_file(iamf.pc.in iamf.pc) #install(FILES ${CMAKE_CURRENT_BINARY_DIR}/iamf.pc # DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig) if(BUILD_SHARED_LIBS) install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION lib) else() install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/include/iamf) endif() if(MULTICHANNEL_BINAURALIZER OR HOA_BINAURALIZER) install(DIRECTORY ${EXTER_LIB_DIR}/binaural DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) endif()