1cmake_minimum_required (VERSION 3.12) 2project(BTstack-LE-Audio) 3set (CMAKE_CXX_STANDARD 11) 4 5# fink pkgconfig 6find_package(PkgConfig REQUIRED) 7 8# libusb 9pkg_check_modules(LIBUSB REQUIRED libusb-1.0) 10include_directories(${LIBUSB_INCLUDE_DIRS}) 11link_directories(${LIBUSB_LIBRARY_DIRS}) 12link_libraries(${LIBUSB_LIBRARIES}) 13 14# portaudio 15pkg_check_modules(PORTAUDIO portaudio-2.0) 16if(PORTAUDIO_FOUND) 17 include_directories(${PORTAUDIO_INCLUDE_DIRS}) 18 link_directories(${PORTAUDIO_LIBRARY_DIRS}) 19 link_libraries(${PORTAUDIO_LIBRARIES}) 20 add_compile_definitions(HAVE_PORTAUDIO) 21endif() 22 23# fdk-aac 24pkg_check_modules(FDK_AAC fdk-aac) 25if(FDK_AAC_FOUND) 26 message("HAVE_AAC_FDK") 27 include_directories(${FDK_AAC_INCLUDE_DIRS}) 28 link_directories(${FDK_AAC_LIBRARY_DIRS}) 29 link_libraries(${FDK_AAC_LIBRARIES}) 30 add_compile_definitions(HAVE_AAC_FDK) 31endif() 32 33# ldac encoder 34pkg_check_modules(LDAC_ENCODER ldacBT-enc) 35if (LDAC_ENCODER_FOUND) 36 message("HAVE_LDAC_ENCODER") 37 include_directories(${LDAC_ENCODER_INCLUDE_DIRS}) 38 link_directories(${LDAC_ENCODER_LIBRARY_DIRS}) 39 link_libraries(${LDAC_ENCODER_LIBRARIES}) 40 add_compile_definitions(HAVE_LDAC_ENCODER) 41endif() 42 43# ldac decoder 44pkg_check_modules(LDAC_DECODER libldacdec) 45if (LDAC_DECODER_FOUND) 46 message("HAVE_LDAC_DECODER") 47 include_directories(${LDAC_DECODER_INCLUDE_DIRS}) 48 link_directories(${LDAC_DECODER_LIBRARY_DIRS}) 49 link_libraries(${LDAC_DECODER_LIBRARIES}) 50 add_compile_definitions(HAVE_LDAC_DECODER) 51endif() 52 53# openaptx 54pkg_check_modules(APTX libopenaptx) 55if (APTX_FOUND) 56 message("HAVE_APTX") 57 include_directories(${APTX_INCLUDE_DIRS}) 58 link_directories(${APTX_LIBRARY_DIRS}) 59 link_libraries(${APTX_LIBRARIES}) 60 add_compile_definitions(HAVE_APTX) 61endif() 62 63# enable optional features 64add_compile_definitions(ENABLE_TESTING_SUPPORT) 65 66# to find generated .h from .gatt files 67include_directories(${CMAKE_CURRENT_BINARY_DIR}) 68 69# local dir for btstack_config.h after build dir to avoid using .h from Makefile 70include_directories(.) 71 72include_directories(../../3rd-party/micro-ecc) 73include_directories(../../3rd-party/bluedroid/decoder/include) 74include_directories(../../3rd-party/bluedroid/encoder/include) 75include_directories(../../3rd-party/md5) 76include_directories(../../3rd-party/hxcmod-player) 77include_directories(../../3rd-party/hxcmod-player/mod) 78include_directories(../../3rd-party/lc3-google/include) 79include_directories(../../3rd-party/lwip/core/src/include) 80include_directories(../../3rd-party/lwip/dhcp-server) 81include_directories(../../3rd-party/rijndael) 82include_directories(../../3rd-party/yxml) 83include_directories(../../3rd-party/tinydir) 84include_directories(../../src) 85include_directories(../../example) 86include_directories(../../chipset/zephyr) 87include_directories(../../platform/posix) 88include_directories(../../platform/embedded) 89include_directories(../../platform/lwip) 90include_directories(../../platform/lwip/port) 91 92file(GLOB SOURCES_SRC "../../src/*.c" "../../src/*.cpp" "../../example/sco_demo_util.c") 93file(GLOB SOURCES_BLE "../../src/ble/*.c") 94file(GLOB SOURCES_GATT "../../src/ble/gatt-service/*.c") 95file(GLOB SOURCES_CLASSIC "../../src/classic/*.c") 96file(GLOB SOURCES_MESH "../../src/mesh/*.c") 97file(GLOB SOURCES_MD5 "../../3rd-party/md5/md5.c") 98file(GLOB SOURCES_UECC "../../3rd-party/micro-ecc/uECC.c") 99file(GLOB SOURCES_YXML "../../3rd-party/yxml/yxml.c") 100file(GLOB SOURCES_HXCMOD "../../3rd-party/hxcmod-player/*.c" "../../3rd-party/hxcmod-player/mods/*.c") 101file(GLOB SOURCES_RIJNDAEL "../../3rd-party/rijndael/rijndael.c") 102file(GLOB SOURCES_POSIX "../../platform/posix/*.c") 103file(GLOB SOURCES_MAIN "main.c") 104file(GLOB SOURCES_ZEPHYR "../../chipset/zephyr/*.c") 105file(GLOB SOURCES_LC3_GOOGLE "../../3rd-party/lc3-google/src/*.c") 106 107file(GLOB SOURCES_BLE_OFF "../../src/ble/le_device_db_memory.c") 108list(REMOVE_ITEM SOURCES_BLE ${SOURCES_BLE_OFF}) 109 110file(GLOB SOURCES_POSIX_OFF "../../platform/posix/le_device_db_fs.c") 111list(REMOVE_ITEM SOURCES_POSIX ${SOURCES_POSIX_OFF}) 112 113set(SOURCES 114 ${SOURCES_MD5} 115 ${SOURCES_YXML} 116 ${SOURCES_LC3_GOOGLE} 117 ${SOURCES_POSIX} 118 ${SOURCES_MAIN} 119 ${SOURCES_RIJNDAEL} 120 ${SOURCES_SRC} 121 ${SOURCES_BLE} 122 ${SOURCES_GATT} 123 ${SOURCES_MESH} 124 ${SOURCES_CLASSIC} 125 ${SOURCES_UECC} 126 ${SOURCES_HXCMOD} 127 ${SOURCES_ZEPHYR} 128) 129list(SORT SOURCES) 130 131# create static lib 132add_library(btstack STATIC ${SOURCES}) 133 134# create targets for all examples 135file(GLOB EXAMPLES_C "le_audio_*.c") 136list(SORT EXAMPLES_C) 137file(GLOB EXAMPLES_GATT "*.gatt") 138 139# create targets 140foreach(EXAMPLE_FILE ${EXAMPLES_C}) 141 get_filename_component(EXAMPLE ${EXAMPLE_FILE} NAME_WE) 142 143 # add GATT DB creation 144 if ( "${EXAMPLES_GATT}" MATCHES ${EXAMPLE} ) 145 message("LE Audio Tool: ${EXAMPLE} -- with GATT DB") 146 add_custom_command( 147 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 148 DEPENDS ${CMAKE_SOURCE_DIR}/${EXAMPLE}.gatt 149 COMMAND ${CMAKE_SOURCE_DIR}/../../tool/compile_gatt.py 150 ARGS ${CMAKE_SOURCE_DIR}/${EXAMPLE}.gatt ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 151 ) 152 list(APPEND SOURCE_FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h) 153 else() 154 message("LE Audio Tool: ${EXAMPLE}") 155 endif() 156 add_executable(${EXAMPLE} ${EXAMPLE_FILE} ) 157 target_link_libraries(${EXAMPLE} btstack m pthread) 158endforeach(EXAMPLE_FILE) 159