1277e512cSDirk Helbigcmake_minimum_required (VERSION 3.5) 2277e512cSDirk Helbig 3277e512cSDirk HelbigSET(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk) 4277e512cSDirk HelbigSET(CMAKE_EXPORT_COMPILE_COMMANDS ON) 5277e512cSDirk Helbig 6277e512cSDirk Helbig#set(CMAKE_BUILD_TYPE RelWithDebInfo) 7277e512cSDirk Helbig 8277e512cSDirk Helbigfind_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) 9277e512cSDirk Helbig 10277e512cSDirk Helbigproject(BTstack-Zephyr) 11277e512cSDirk Helbig 12277e512cSDirk Helbigset(BTSTACK_ROOT ${CMAKE_SOURCE_DIR}/../../) 13277e512cSDirk Helbigif( DEFINED ENV{BTSTACK_ROOT} ) 14277e512cSDirk Helbig set(BTSTACK_ROOT $ENV{BTSTACK_ROOT}) 15277e512cSDirk Helbigendif() 16277e512cSDirk Helbig 17277e512cSDirk Helbig# pkgconfig 18277e512cSDirk Helbigfind_package(PkgConfig REQUIRED) 19277e512cSDirk Helbig 20277e512cSDirk Helbig# to generate .h from .gatt files 21277e512cSDirk Helbigfind_package (Python REQUIRED COMPONENTS Interpreter) 22277e512cSDirk Helbiginclude_directories(${CMAKE_CURRENT_BINARY_DIR}) 23277e512cSDirk Helbig 24277e512cSDirk Helbig# local dir for btstack_config.h after build dir to avoid using .h from Makefile 25277e512cSDirk Helbigset(INCLUDES_PATH "" ) 26277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/micro-ecc ) 27277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/bluedroid/decoder/include) 28277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/bluedroid/encoder/include) 29277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/lc3-google/include) 30277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/md5) 31277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/hxcmod-player) 32277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/hxcmod-player/mod) 33277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/lwip/core/src/include) 34277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/lwip/dhcp-server) 35277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/rijndael) 36277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/yxml) 37277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/tinydir) 38277e512cSDirk Helbiglist(APPEND INCLUDES_PATH src) 39b7898607SDirk Helbiglist(APPEND INCLUDES_PATH chipset/zephyr) 40277e512cSDirk Helbiglist(APPEND INCLUDES_PATH platform/embedded) 41277e512cSDirk Helbiglist(APPEND INCLUDES_PATH platform/lwip) 42277e512cSDirk Helbiglist(APPEND INCLUDES_PATH platform/lwip/port) 43277e512cSDirk Helbiglist(TRANSFORM INCLUDES_PATH PREPEND ${BTSTACK_ROOT}/) 44277e512cSDirk Helbiglist(APPEND INCLUDES_PATH . ) 45277e512cSDirk Helbiginclude_directories( ${INCLUDES_PATH} ) 46277e512cSDirk Helbig 47277e512cSDirk Helbigfile(GLOB SOURCES_SRC "${BTSTACK_ROOT}/src/*.c" ) #"${BTSTACK_ROOT}/example/sco_demo_util.c") 48277e512cSDirk Helbig 49277e512cSDirk Helbigfile(GLOB SOURCES_BLE "${BTSTACK_ROOT}/src/ble/*.c") 50277e512cSDirk Helbigfile(GLOB SOURCES_GATT "${BTSTACK_ROOT}/src/ble/gatt-service/*.c") 51277e512cSDirk Helbigfile(GLOB SOURCES_CLASSIC "${BTSTACK_ROOT}/src/classic/*.c") 52*719fc9f9SMatthias Ringwaldfile(GLOB SOURCES_LE_AUDIO "${BTSTACK_ROOT}/src/le-audio/*.c" "${BTSTACK_ROOT}/src/le-audio/gatt-service/*.c") 53277e512cSDirk Helbigfile(GLOB SOURCES_MESH "${BTSTACK_ROOT}/src/mesh/*.c" "${BTSTACK_ROOT}/src/mesh/gatt-service/*.c") 54277e512cSDirk Helbigfile(GLOB SOURCES_BLUEDROID "${BTSTACK_ROOT}/3rd-party/bluedroid/encoder/srce/*.c" "${BTSTACK_ROOT}/3rd-party/bluedroid/decoder/srce/*.c") 55277e512cSDirk Helbigfile(GLOB SOURCES_MD5 "${BTSTACK_ROOT}/3rd-party/md5/md5.c") 56277e512cSDirk Helbigfile(GLOB SOURCES_UECC "${BTSTACK_ROOT}/3rd-party/micro-ecc/uECC.c") 57277e512cSDirk Helbigfile(GLOB SOURCES_YXML "${BTSTACK_ROOT}/3rd-party/yxml/yxml.c") 58*719fc9f9SMatthias Ringwaldfile(GLOB SOURCES_HXCMOD "${BTSTACK_ROOT}/3rd-party/hxcmod-player/*.c" "${BTSTACK_ROOT}/3rd-party/hxcmod-player/mods/*.c") 59277e512cSDirk Helbigfile(GLOB SOURCES_RIJNDAEL "${BTSTACK_ROOT}/3rd-party/rijndael/rijndael.c") 60277e512cSDirk Helbigfile(GLOB SOURCES_EMBEDDED "${BTSTACK_ROOT}/platform/embedded/*.c") 61b7898607SDirk Helbigfile(GLOB SOURCES_CHIPSET_ZEPHYR "${BTSTACK_ROOT}/chipset/zephyr/*.c") 62b51b065cSDirk Helbigfile(GLOB SOURCES_LC3_GOOGLE "${BTSTACK_ROOT}/3rd-party/lc3-google/src/*.c") 63277e512cSDirk Helbig 64277e512cSDirk Helbigset(LWIP_CORE_SRC 65277e512cSDirk Helbig 3rd-party/lwip/core/src/core/def.c 66277e512cSDirk Helbig 3rd-party/lwip/core/src/core/inet_chksum.c 67277e512cSDirk Helbig 3rd-party/lwip/core/src/core/init.c 68277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ip.c 69277e512cSDirk Helbig 3rd-party/lwip/core/src/core/mem.c 70277e512cSDirk Helbig 3rd-party/lwip/core/src/core/memp.c 71277e512cSDirk Helbig 3rd-party/lwip/core/src/core/netif.c 72277e512cSDirk Helbig 3rd-party/lwip/core/src/core/pbuf.c 73277e512cSDirk Helbig 3rd-party/lwip/core/src/core/tcp.c 74277e512cSDirk Helbig 3rd-party/lwip/core/src/core/tcp_in.c 75277e512cSDirk Helbig 3rd-party/lwip/core/src/core/tcp_out.c 76277e512cSDirk Helbig 3rd-party/lwip/core/src/core/timeouts.c 77277e512cSDirk Helbig 3rd-party/lwip/core/src/core/udp.c 78277e512cSDirk Helbig) 79277e512cSDirk Helbigset (LWIP_IPV4_SRC 80277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/acd.c 81277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/dhcp.c 82277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/etharp.c 83277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/icmp.c 84277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/ip4.c 85277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/ip4_addr.c 86277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/ip4_frag.c 87277e512cSDirk Helbig) 88277e512cSDirk Helbigset (LWIP_NETIF_SRC 89277e512cSDirk Helbig 3rd-party/lwip/core/src/netif/ethernet.c 90277e512cSDirk Helbig) 91277e512cSDirk Helbigset (LWIP_HTTPD 92277e512cSDirk Helbig 3rd-party/lwip/core/src/apps/http/altcp_proxyconnect.c 93277e512cSDirk Helbig 3rd-party/lwip/core/src/apps/http/fs.c 94277e512cSDirk Helbig 3rd-party/lwip/core/src/apps/http/httpd.c 95277e512cSDirk Helbig) 96277e512cSDirk Helbigset (LWIP_DHCPD 97277e512cSDirk Helbig 3rd-party/lwip/dhcp-server/dhserver.c 98277e512cSDirk Helbig) 99277e512cSDirk Helbigset (LWIP_PORT 100277e512cSDirk Helbig platform/lwip/port/sys_arch.c 101277e512cSDirk Helbig platform/lwip/bnep_lwip.c 102277e512cSDirk Helbig) 103277e512cSDirk Helbig 104277e512cSDirk Helbigset (SOURCES_LWIP ${LWIP_CORE_SRC} ${LWIP_IPV4_SRC} ${LWIP_NETIF_SRC} ${LWIP_HTTPD} ${LWIP_DHCPD} ${LWIP_PORT}) 105277e512cSDirk Helbiglist(TRANSFORM SOURCES_LWIP PREPEND ${BTSTACK_ROOT}/) 106277e512cSDirk Helbig 107277e512cSDirk Helbigfile(GLOB SOURCES_SRC_OFF "${BTSTACK_ROOT}/src/hci_transport_*.c") 108277e512cSDirk Helbiglist(REMOVE_ITEM SOURCES_SRC ${SOURCES_SRC_OFF}) 109277e512cSDirk Helbig 110277e512cSDirk Helbigfile(GLOB SOURCES_BLE_OFF "${BTSTACK_ROOT}/src/ble/att_db_util.c") 111277e512cSDirk Helbiglist(REMOVE_ITEM SOURCES_BLE ${SOURCES_BLE_OFF}) 112277e512cSDirk Helbig 113277e512cSDirk Helbigset(SOURCES 114277e512cSDirk Helbig ${SOURCES_MD5} 115277e512cSDirk Helbig ${SOURCES_YXML} 116277e512cSDirk Helbig ${SOURCES_BLUEDROID} 117277e512cSDirk Helbig ${SOURCES_EMBEDDED} 118277e512cSDirk Helbig ${SOURCES_RIJNDAEL} 119277e512cSDirk Helbig ${SOURCES_LC3_GOOGLE} 120277e512cSDirk Helbig ${SOURCES_SRC} 121277e512cSDirk Helbig ${SOURCES_BLE} 122277e512cSDirk Helbig ${SOURCES_GATT} 123*719fc9f9SMatthias Ringwald ${SOURCES_LE_AUDIO} 124277e512cSDirk Helbig ${SOURCES_UECC} 125*719fc9f9SMatthias Ringwald ${SOURCES_HXCMOD} 126b7898607SDirk Helbig ${SOURCES_CHIPSET_ZEPHYR} 127277e512cSDirk Helbig) 128277e512cSDirk Helbiglist(SORT SOURCES) 129277e512cSDirk Helbig 130277e512cSDirk Helbig# create static lib 131277e512cSDirk Helbigadd_library(btstack STATIC ${SOURCES}) 132277e512cSDirk Helbig 133277e512cSDirk Helbig# extra compiler warnings 134277e512cSDirk Helbigtarget_compile_options(btstack PRIVATE 135277e512cSDirk Helbig $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>: 136277e512cSDirk Helbig -Wunused-variable -Wswitch-default -Werror -Wall> 137277e512cSDirk Helbig $<$<CXX_COMPILER_ID:GNU>: 138277e512cSDirk Helbig -Wunused-but-set-variable -Wunused-variable -Wswitch-default -Werror -Wall> 139277e512cSDirk Helbig $<$<CXX_COMPILER_ID:MSVC>: 140277e512cSDirk Helbig /W4>) 141277e512cSDirk Helbig 142277e512cSDirk Helbig# get zephyr's idea of build flags 143277e512cSDirk Helbigzephyr_get_include_directories_for_lang( C includes) 144277e512cSDirk Helbigzephyr_get_system_include_directories_for_lang(C system_includes) 145277e512cSDirk Helbigzephyr_get_compile_definitions_for_lang( C definitions) 146277e512cSDirk Helbigzephyr_get_compile_options_for_lang( C options) 147277e512cSDirk Helbig 148277e512cSDirk Helbigset(external_project_cflags 149277e512cSDirk Helbig ${includes}$<SEMICOLON>${definitions}$<SEMICOLON>${options}$<SEMICOLON>${system_includes} 150277e512cSDirk Helbig ) 151277e512cSDirk Helbig 152277e512cSDirk Helbig# prevent imacros argument from deduplication 153277e512cSDirk Helbigstring( REGEX REPLACE "\\$<TARGET_PROPERTY:compiler,imacros>\\$<SEMICOLON>([^\\$]+)" 154277e512cSDirk Helbig "\$<1:SHELL:-imacros \\1>" 155277e512cSDirk Helbig _all_options ${external_project_cflags} ) 156277e512cSDirk Helbig 157277e512cSDirk Helbigtarget_compile_options( btstack PUBLIC ${_all_options}) 158b51b065cSDirk Helbigtarget_compile_options( btstack PUBLIC -std=c11 ) 159277e512cSDirk Helbig 160277e512cSDirk Helbigset(EXAMPLES "gatt_counter" ) 161277e512cSDirk Helbigif(DEFINED ENV{EXAMPLE}) 162277e512cSDirk Helbig set( EXAMPLES $ENV{EXAMPLE} ) 163277e512cSDirk Helbigendif() 164277e512cSDirk Helbig 165277e512cSDirk Helbiglist(SORT EXAMPLES) 166277e512cSDirk Helbigfile(GLOB EXAMPLES_GATT "${BTSTACK_ROOT}/example/*.gatt") 167277e512cSDirk Helbig 168277e512cSDirk Helbig# on Mac 10.14, adding lwip to libstack results in a yet not understood link error 169277e512cSDirk Helbig# workaround: add lwip sources only to lwip_examples 170277e512cSDirk Helbigset (LWIP_EXAMPLES pan_lwip_http_server) 171277e512cSDirk Helbig 172277e512cSDirk Helbig# create targets 173277e512cSDirk Helbigforeach(EXAMPLE ${EXAMPLES}) 174277e512cSDirk Helbig # get_filename_component(EXAMPLE ${EXAMPLE_FILE} NAME_WE) 175277e512cSDirk Helbig 176*719fc9f9SMatthias Ringwald # get c file, either from examples or local 177*719fc9f9SMatthias Ringwald if( EXISTS "${BTSTACK_ROOT}/example/${EXAMPLE}.c" ) 178277e512cSDirk Helbig set (SOURCES_EXAMPLE ${BTSTACK_ROOT}/example/${EXAMPLE}.c) 179*719fc9f9SMatthias Ringwald else() 180*719fc9f9SMatthias Ringwald set (SOURCES_EXAMPLE ${EXAMPLE}.c) 181*719fc9f9SMatthias Ringwald endif() 182277e512cSDirk Helbig list(APPEND SOURCES_EXAMPLE "${CMAKE_SOURCE_DIR}/src/main.c") 183277e512cSDirk Helbig message("${BTSTACK_ROOT}") 184277e512cSDirk Helbig message("${SOURCES_EXAMPLE}") 185277e512cSDirk Helbig # add lwip sources for lwip examples 186277e512cSDirk Helbig if ( "${LWIP_EXAMPLES}" MATCHES ${EXAMPLE} ) 187277e512cSDirk Helbig list(APPEND SOURCES_EXAMPLE ${SOURCES_LWIP}) 188277e512cSDirk Helbig endif() 189277e512cSDirk Helbig 190277e512cSDirk Helbig # add GATT DB creation 191277e512cSDirk Helbig if ( "${EXAMPLES_GATT}" MATCHES ${EXAMPLE} ) 192277e512cSDirk Helbig message("example ${EXAMPLE} -- with GATT DB") 193277e512cSDirk Helbig add_custom_command( 194277e512cSDirk Helbig OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 195277e512cSDirk Helbig DEPENDS ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt 196277e512cSDirk Helbig COMMAND ${Python_EXECUTABLE} 197277e512cSDirk Helbig ARGS ${BTSTACK_ROOT}/tool/compile_gatt.py ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 198277e512cSDirk Helbig ) 199277e512cSDirk Helbig list(APPEND SOURCES_EXAMPLE ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h) 200277e512cSDirk Helbig else() 201277e512cSDirk Helbig message("example ${EXAMPLE}") 202277e512cSDirk Helbig endif() 203277e512cSDirk Helbig target_sources( app PRIVATE ${SOURCES_EXAMPLE} ) 204277e512cSDirk Helbig target_link_libraries( app PRIVATE btstack ) 205277e512cSDirk Helbigendforeach(EXAMPLE) 206