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/kissfft) 79include_directories(../../3rd-party/liblc3codec/Api) 80include_directories(../../3rd-party/liblc3codec/Common) 81include_directories(../../3rd-party/liblc3codec/Common/KissFft) 82include_directories(../../3rd-party/liblc3codec/Common/Tables) 83include_directories(../../3rd-party/liblc3codec/TestSupport) 84include_directories(../../3rd-party/lwip/core/src/include) 85include_directories(../../3rd-party/lwip/dhcp-server) 86include_directories(../../3rd-party/rijndael) 87include_directories(../../3rd-party/yxml) 88include_directories(../../3rd-party/tinydir) 89include_directories(../../src) 90include_directories(../../example) 91include_directories(../../chipset/zephyr) 92include_directories(../../platform/posix) 93include_directories(../../platform/embedded) 94include_directories(../../platform/lwip) 95include_directories(../../platform/lwip/port) 96 97file(GLOB SOURCES_SRC "../../src/*.c" "../../src/*.cpp" "../../example/sco_demo_util.c") 98file(GLOB SOURCES_BLE "../../src/ble/*.c") 99file(GLOB SOURCES_GATT "../../src/ble/gatt-service/*.c") 100file(GLOB SOURCES_CLASSIC "../../src/classic/*.c") 101file(GLOB SOURCES_MESH "../../src/mesh/*.c") 102file(GLOB SOURCES_MD5 "../../3rd-party/md5/md5.c") 103file(GLOB SOURCES_UECC "../../3rd-party/micro-ecc/uECC.c") 104file(GLOB SOURCES_YXML "../../3rd-party/yxml/yxml.c") 105file(GLOB SOURCES_HXCMOD "../../3rd-party/hxcmod-player/*.c" "../../3rd-party/hxcmod-player/mods/*.c") 106file(GLOB SOURCES_RIJNDAEL "../../3rd-party/rijndael/rijndael.c") 107file(GLOB SOURCES_POSIX "../../platform/posix/*.c") 108file(GLOB SOURCES_MAIN "main.c") 109file(GLOB SOURCES_ZEPHYR "../../chipset/zephyr/*.c") 110 111file(GLOB LC3_COMMON "../../3rd-party/liblc3codec/Common/*.cpp") 112file(GLOB LC3_TABLES "../../3rd-party/liblc3codec/Common/Tables/*.cpp") 113file(GLOB LC3_DECODER "../../3rd-party/liblc3codec/Decoder/*.cpp") 114file(GLOB LC3_ENCODER "../../3rd-party/liblc3codec/Encoder/*.cpp") 115 116set (SOURCES_LC3 ${LC3_COMMON} ${LC3_TABLES} ${LC3_DECODER} ${LC3_ENCODER} ${LC3_TESTSUPPORT}) 117 118file(GLOB SOURCES_BLE_OFF "../../src/ble/le_device_db_memory.c") 119list(REMOVE_ITEM SOURCES_BLE ${SOURCES_BLE_OFF}) 120 121file(GLOB SOURCES_POSIX_OFF "../../platform/posix/le_device_db_fs.c") 122list(REMOVE_ITEM SOURCES_POSIX ${SOURCES_POSIX_OFF}) 123 124set(SOURCES 125 ${SOURCES_MD5} 126 ${SOURCES_YXML} 127 ${SOURCES_LC3} 128 ${SOURCES_POSIX} 129 ${SOURCES_MAIN} 130 ${SOURCES_RIJNDAEL} 131 ${SOURCES_SRC} 132 ${SOURCES_BLE} 133 ${SOURCES_GATT} 134 ${SOURCES_MESH} 135 ${SOURCES_CLASSIC} 136 ${SOURCES_UECC} 137 ${SOURCES_HXCMOD} 138 ${SOURCES_ZEPHYR} 139) 140list(SORT SOURCES) 141 142# Enable ASAN 143add_compile_options( -g -fsanitize=address) 144add_link_options( -fsanitize=address) 145 146# create static lib 147add_library(btstack STATIC ${SOURCES}) 148 149# create targets for all examples 150file(GLOB EXAMPLES_C "le_audio_*.c") 151list(SORT EXAMPLES_C) 152file(GLOB EXAMPLES_GATT "*.gatt") 153 154# create targets 155foreach(EXAMPLE_FILE ${EXAMPLES_C}) 156 get_filename_component(EXAMPLE ${EXAMPLE_FILE} NAME_WE) 157 158 # add GATT DB creation 159 if ( "${EXAMPLES_GATT}" MATCHES ${EXAMPLE} ) 160 message("LE Audio Tool: ${EXAMPLE} -- with GATT DB") 161 add_custom_command( 162 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 163 DEPENDS ${CMAKE_SOURCE_DIR}/${EXAMPLE}.gatt 164 COMMAND ${CMAKE_SOURCE_DIR}/../../tool/compile_gatt.py 165 ARGS ${CMAKE_SOURCE_DIR}/${EXAMPLE}.gatt ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 166 ) 167 list(APPEND SOURCE_FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h) 168 else() 169 message("LE Audio Tool: ${EXAMPLE}") 170 endif() 171 add_executable(${EXAMPLE} ${EXAMPLE_FILE} ) 172 target_link_libraries(${EXAMPLE} btstack) 173endforeach(EXAMPLE_FILE) 174