1*277e512cSDirk Helbigcmake_minimum_required (VERSION 3.5) 2*277e512cSDirk Helbig 3*277e512cSDirk HelbigSET(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk) 4*277e512cSDirk HelbigSET(CMAKE_EXPORT_COMPILE_COMMANDS ON) 5*277e512cSDirk Helbig 6*277e512cSDirk Helbig#set(CMAKE_BUILD_TYPE RelWithDebInfo) 7*277e512cSDirk Helbig 8*277e512cSDirk Helbigfind_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) 9*277e512cSDirk Helbig 10*277e512cSDirk Helbigproject(BTstack-Zephyr) 11*277e512cSDirk Helbig 12*277e512cSDirk Helbigset(BTSTACK_ROOT ${CMAKE_SOURCE_DIR}/../../) 13*277e512cSDirk Helbigif( DEFINED ENV{BTSTACK_ROOT} ) 14*277e512cSDirk Helbig set(BTSTACK_ROOT $ENV{BTSTACK_ROOT}) 15*277e512cSDirk Helbigendif() 16*277e512cSDirk Helbig 17*277e512cSDirk Helbig# pkgconfig 18*277e512cSDirk Helbigfind_package(PkgConfig REQUIRED) 19*277e512cSDirk Helbig 20*277e512cSDirk Helbig# to generate .h from .gatt files 21*277e512cSDirk Helbigfind_package (Python REQUIRED COMPONENTS Interpreter) 22*277e512cSDirk Helbiginclude_directories(${CMAKE_CURRENT_BINARY_DIR}) 23*277e512cSDirk Helbig 24*277e512cSDirk Helbig# local dir for btstack_config.h after build dir to avoid using .h from Makefile 25*277e512cSDirk Helbigset(INCLUDES_PATH "" ) 26*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/micro-ecc ) 27*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/bluedroid/decoder/include) 28*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/bluedroid/encoder/include) 29*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/lc3-google/include) 30*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/md5) 31*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/hxcmod-player) 32*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/hxcmod-player/mod) 33*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/lwip/core/src/include) 34*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/lwip/dhcp-server) 35*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/rijndael) 36*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/yxml) 37*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH 3rd-party/tinydir) 38*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH src) 39*277e512cSDirk Helbig#list(APPEND INCLUDES_PATH chipset/realtek) 40*277e512cSDirk Helbig#list(APPEND INCLUDES_PATH chipset/zephyr) 41*277e512cSDirk Helbig#list(APPEND INCLUDES_PATH platform/posix) 42*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH platform/embedded) 43*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH platform/lwip) 44*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH platform/lwip/port) 45*277e512cSDirk Helbiglist(TRANSFORM INCLUDES_PATH PREPEND ${BTSTACK_ROOT}/) 46*277e512cSDirk Helbiglist(APPEND INCLUDES_PATH . ) 47*277e512cSDirk Helbiginclude_directories( ${INCLUDES_PATH} ) 48*277e512cSDirk Helbig 49*277e512cSDirk Helbigfile(GLOB SOURCES_SRC "${BTSTACK_ROOT}/src/*.c" ) #"${BTSTACK_ROOT}/example/sco_demo_util.c") 50*277e512cSDirk Helbig 51*277e512cSDirk Helbig#message("${SOURCES_SRC}") 52*277e512cSDirk Helbig 53*277e512cSDirk Helbigfile(GLOB SOURCES_BLE "${BTSTACK_ROOT}/src/ble/*.c") 54*277e512cSDirk Helbigfile(GLOB SOURCES_GATT "${BTSTACK_ROOT}/src/ble/gatt-service/*.c") 55*277e512cSDirk Helbigfile(GLOB SOURCES_CLASSIC "${BTSTACK_ROOT}/src/classic/*.c") 56*277e512cSDirk Helbigfile(GLOB SOURCES_MESH "${BTSTACK_ROOT}/src/mesh/*.c" "${BTSTACK_ROOT}/src/mesh/gatt-service/*.c") 57*277e512cSDirk Helbigfile(GLOB SOURCES_BLUEDROID "${BTSTACK_ROOT}/3rd-party/bluedroid/encoder/srce/*.c" "${BTSTACK_ROOT}/3rd-party/bluedroid/decoder/srce/*.c") 58*277e512cSDirk Helbigfile(GLOB SOURCES_MD5 "${BTSTACK_ROOT}/3rd-party/md5/md5.c") 59*277e512cSDirk Helbigfile(GLOB SOURCES_UECC "${BTSTACK_ROOT}/3rd-party/micro-ecc/uECC.c") 60*277e512cSDirk Helbigfile(GLOB SOURCES_YXML "${BTSTACK_ROOT}/3rd-party/yxml/yxml.c") 61*277e512cSDirk Helbigfile(GLOB SOURCES_HXCMOD "${BTSTACK_ROOT}/3rd-party/hxcmod-player/*.c" "../../3rd-party/hxcmod-player/mods/*.c") 62*277e512cSDirk Helbigfile(GLOB SOURCES_RIJNDAEL "${BTSTACK_ROOT}/3rd-party/rijndael/rijndael.c") 63*277e512cSDirk Helbigfile(GLOB SOURCES_EMBEDDED "${BTSTACK_ROOT}/platform/embedded/*.c") 64*277e512cSDirk Helbig#file(GLOB SOURCES_ZEPHYR "${CMAKE_SOURCE_DIR}/src/main.c") 65*277e512cSDirk Helbig#file(GLOB SOURCES_ZEPHYR "${BTSTACK_ROOT}/chipset/zephyr/*.c") 66*277e512cSDirk Helbig#file(GLOB SOURCES_REALTEK "${BTSTACK_ROOT}/chipset/realtek/*.c") 67*277e512cSDirk Helbig#file(GLOB SOURCES_LC3_GOOGLE "${BTSTACK_ROOT}/3rd-party/lc3-google/src/*.c") 68*277e512cSDirk Helbig 69*277e512cSDirk Helbigset(LWIP_CORE_SRC 70*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/def.c 71*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/inet_chksum.c 72*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/init.c 73*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ip.c 74*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/mem.c 75*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/memp.c 76*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/netif.c 77*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/pbuf.c 78*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/tcp.c 79*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/tcp_in.c 80*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/tcp_out.c 81*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/timeouts.c 82*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/udp.c 83*277e512cSDirk Helbig) 84*277e512cSDirk Helbigset (LWIP_IPV4_SRC 85*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/acd.c 86*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/dhcp.c 87*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/etharp.c 88*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/icmp.c 89*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/ip4.c 90*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/ip4_addr.c 91*277e512cSDirk Helbig 3rd-party/lwip/core/src/core/ipv4/ip4_frag.c 92*277e512cSDirk Helbig) 93*277e512cSDirk Helbigset (LWIP_NETIF_SRC 94*277e512cSDirk Helbig 3rd-party/lwip/core/src/netif/ethernet.c 95*277e512cSDirk Helbig) 96*277e512cSDirk Helbigset (LWIP_HTTPD 97*277e512cSDirk Helbig 3rd-party/lwip/core/src/apps/http/altcp_proxyconnect.c 98*277e512cSDirk Helbig 3rd-party/lwip/core/src/apps/http/fs.c 99*277e512cSDirk Helbig 3rd-party/lwip/core/src/apps/http/httpd.c 100*277e512cSDirk Helbig) 101*277e512cSDirk Helbigset (LWIP_DHCPD 102*277e512cSDirk Helbig 3rd-party/lwip/dhcp-server/dhserver.c 103*277e512cSDirk Helbig) 104*277e512cSDirk Helbigset (LWIP_PORT 105*277e512cSDirk Helbig platform/lwip/port/sys_arch.c 106*277e512cSDirk Helbig platform/lwip/bnep_lwip.c 107*277e512cSDirk Helbig) 108*277e512cSDirk Helbig 109*277e512cSDirk Helbigset (SOURCES_LWIP ${LWIP_CORE_SRC} ${LWIP_IPV4_SRC} ${LWIP_NETIF_SRC} ${LWIP_HTTPD} ${LWIP_DHCPD} ${LWIP_PORT}) 110*277e512cSDirk Helbiglist(TRANSFORM SOURCES_LWIP PREPEND ${BTSTACK_ROOT}/) 111*277e512cSDirk Helbig 112*277e512cSDirk Helbigfile(GLOB SOURCES_SRC_OFF "${BTSTACK_ROOT}/src/hci_transport_*.c") 113*277e512cSDirk Helbiglist(REMOVE_ITEM SOURCES_SRC ${SOURCES_SRC_OFF}) 114*277e512cSDirk Helbig 115*277e512cSDirk Helbigfile(GLOB SOURCES_BLE_OFF "${BTSTACK_ROOT}/src/ble/att_db_util.c") 116*277e512cSDirk Helbiglist(REMOVE_ITEM SOURCES_BLE ${SOURCES_BLE_OFF}) 117*277e512cSDirk Helbig 118*277e512cSDirk Helbigset(SOURCES 119*277e512cSDirk Helbig ${SOURCES_MD5} 120*277e512cSDirk Helbig ${SOURCES_YXML} 121*277e512cSDirk Helbig ${SOURCES_BLUEDROID} 122*277e512cSDirk Helbig ${SOURCES_EMBEDDED} 123*277e512cSDirk Helbig ${SOURCES_RIJNDAEL} 124*277e512cSDirk Helbig ${SOURCES_LC3_GOOGLE} 125*277e512cSDirk Helbig ${SOURCES_SRC} 126*277e512cSDirk Helbig ${SOURCES_BLE} 127*277e512cSDirk Helbig ${SOURCES_GATT} 128*277e512cSDirk Helbig # ${SOURCES_MESH} 129*277e512cSDirk Helbig # ${SOURCES_CLASSIC} 130*277e512cSDirk Helbig ${SOURCES_UECC} 131*277e512cSDirk Helbig # ${SOURCES_HXCMOD} 132*277e512cSDirk Helbig # ${SOURCES_REALTEK} 133*277e512cSDirk Helbig # ${SOURCES_ZEPHYR} 134*277e512cSDirk Helbig) 135*277e512cSDirk Helbiglist(SORT SOURCES) 136*277e512cSDirk Helbig 137*277e512cSDirk Helbig# create static lib 138*277e512cSDirk Helbigadd_library(btstack STATIC ${SOURCES}) 139*277e512cSDirk Helbig 140*277e512cSDirk Helbig# extra compiler warnings 141*277e512cSDirk Helbigtarget_compile_options(btstack PRIVATE 142*277e512cSDirk Helbig $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>: 143*277e512cSDirk Helbig -Wunused-variable -Wswitch-default -Werror -Wall> 144*277e512cSDirk Helbig $<$<CXX_COMPILER_ID:GNU>: 145*277e512cSDirk Helbig -Wunused-but-set-variable -Wunused-variable -Wswitch-default -Werror -Wall> 146*277e512cSDirk Helbig $<$<CXX_COMPILER_ID:MSVC>: 147*277e512cSDirk Helbig /W4>) 148*277e512cSDirk Helbig 149*277e512cSDirk Helbig# get zephyr's idea of build flags 150*277e512cSDirk Helbigzephyr_get_include_directories_for_lang( C includes) 151*277e512cSDirk Helbigzephyr_get_system_include_directories_for_lang(C system_includes) 152*277e512cSDirk Helbigzephyr_get_compile_definitions_for_lang( C definitions) 153*277e512cSDirk Helbigzephyr_get_compile_options_for_lang( C options) 154*277e512cSDirk Helbig 155*277e512cSDirk Helbigset(external_project_cflags 156*277e512cSDirk Helbig ${includes}$<SEMICOLON>${definitions}$<SEMICOLON>${options}$<SEMICOLON>${system_includes} 157*277e512cSDirk Helbig ) 158*277e512cSDirk Helbig 159*277e512cSDirk Helbig# prevent imacros argument from deduplication 160*277e512cSDirk Helbigstring( REGEX REPLACE "\\$<TARGET_PROPERTY:compiler,imacros>\\$<SEMICOLON>([^\\$]+)" 161*277e512cSDirk Helbig "\$<1:SHELL:-imacros \\1>" 162*277e512cSDirk Helbig _all_options ${external_project_cflags} ) 163*277e512cSDirk Helbig 164*277e512cSDirk Helbigtarget_compile_options( btstack PUBLIC ${_all_options}) 165*277e512cSDirk Helbig 166*277e512cSDirk Helbigset(EXAMPLES "gatt_counter" ) 167*277e512cSDirk Helbigif(DEFINED ENV{EXAMPLE}) 168*277e512cSDirk Helbig set( EXAMPLES $ENV{EXAMPLE} ) 169*277e512cSDirk Helbigendif() 170*277e512cSDirk Helbig 171*277e512cSDirk Helbiglist(SORT EXAMPLES) 172*277e512cSDirk Helbigfile(GLOB EXAMPLES_GATT "${BTSTACK_ROOT}/example/*.gatt") 173*277e512cSDirk Helbig 174*277e512cSDirk Helbig# remove some 175*277e512cSDirk Helbigfile(GLOB EXAMPLES_OFF "../../example/sco_demo_util.c" "../../example/ant_test.c" "../../example/avrcp_browsing_client.c") 176*277e512cSDirk Helbiglist(REMOVE_ITEM EXAMPLES_C ${EXAMPLES_OFF}) 177*277e512cSDirk Helbig 178*277e512cSDirk Helbig# on Mac 10.14, adding lwip to libstack results in a yet not understood link error 179*277e512cSDirk Helbig# workaround: add lwip sources only to lwip_examples 180*277e512cSDirk Helbigset (LWIP_EXAMPLES pan_lwip_http_server) 181*277e512cSDirk Helbig 182*277e512cSDirk Helbig# create targets 183*277e512cSDirk Helbigforeach(EXAMPLE ${EXAMPLES}) 184*277e512cSDirk Helbig # get_filename_component(EXAMPLE ${EXAMPLE_FILE} NAME_WE) 185*277e512cSDirk Helbig 186*277e512cSDirk Helbig # get c file 187*277e512cSDirk Helbig set (SOURCES_EXAMPLE ${BTSTACK_ROOT}/example/${EXAMPLE}.c) 188*277e512cSDirk Helbig list(APPEND SOURCES_EXAMPLE "${CMAKE_SOURCE_DIR}/src/main.c") 189*277e512cSDirk Helbig message("${BTSTACK_ROOT}") 190*277e512cSDirk Helbig message("${SOURCES_EXAMPLE}") 191*277e512cSDirk Helbig # add lwip sources for lwip examples 192*277e512cSDirk Helbig if ( "${LWIP_EXAMPLES}" MATCHES ${EXAMPLE} ) 193*277e512cSDirk Helbig list(APPEND SOURCES_EXAMPLE ${SOURCES_LWIP}) 194*277e512cSDirk Helbig endif() 195*277e512cSDirk Helbig 196*277e512cSDirk Helbig # add GATT DB creation 197*277e512cSDirk Helbig if ( "${EXAMPLES_GATT}" MATCHES ${EXAMPLE} ) 198*277e512cSDirk Helbig message("example ${EXAMPLE} -- with GATT DB") 199*277e512cSDirk Helbig add_custom_command( 200*277e512cSDirk Helbig OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 201*277e512cSDirk Helbig DEPENDS ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt 202*277e512cSDirk Helbig COMMAND ${Python_EXECUTABLE} 203*277e512cSDirk Helbig ARGS ${BTSTACK_ROOT}/tool/compile_gatt.py ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 204*277e512cSDirk Helbig ) 205*277e512cSDirk Helbig list(APPEND SOURCES_EXAMPLE ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h) 206*277e512cSDirk Helbig else() 207*277e512cSDirk Helbig message("example ${EXAMPLE}") 208*277e512cSDirk Helbig endif() 209*277e512cSDirk Helbig # add_executable(${EXAMPLE} ${SOURCES_EXAMPLE} ) 210*277e512cSDirk Helbig target_sources( app PRIVATE ${SOURCES_EXAMPLE} ) 211*277e512cSDirk Helbig # target_link_libraries(${EXAMPLE} btstack) 212*277e512cSDirk Helbig target_link_libraries( app PRIVATE btstack ) 213*277e512cSDirk Helbigendforeach(EXAMPLE) 214