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