xref: /btstack/port/zephyr/CMakeLists.txt (revision ced70f9bfeafe291ec597a3a9cc862e39e0da3ce)
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_LE_AUDIO       "${BTSTACK_ROOT}/src/le-audio/*.c" "${BTSTACK_ROOT}/src/le-audio/gatt-service/*.c")
53file(GLOB SOURCES_MESH           "${BTSTACK_ROOT}/src/mesh/*.c" "${BTSTACK_ROOT}/src/mesh/gatt-service/*.c")
54file(GLOB SOURCES_BLUEDROID      "${BTSTACK_ROOT}/3rd-party/bluedroid/encoder/srce/*.c" "${BTSTACK_ROOT}/3rd-party/bluedroid/decoder/srce/*.c")
55file(GLOB SOURCES_MD5            "${BTSTACK_ROOT}/3rd-party/md5/md5.c")
56file(GLOB SOURCES_UECC           "${BTSTACK_ROOT}/3rd-party/micro-ecc/uECC.c")
57file(GLOB SOURCES_YXML           "${BTSTACK_ROOT}/3rd-party/yxml/yxml.c")
58file(GLOB SOURCES_HXCMOD         "${BTSTACK_ROOT}/3rd-party/hxcmod-player/*.c"  "${BTSTACK_ROOT}/3rd-party/hxcmod-player/mods/*.c")
59file(GLOB SOURCES_RIJNDAEL       "${BTSTACK_ROOT}/3rd-party/rijndael/rijndael.c")
60file(GLOB SOURCES_EMBEDDED       "${BTSTACK_ROOT}/platform/embedded/*.c")
61file(GLOB SOURCES_CHIPSET_ZEPHYR "${BTSTACK_ROOT}/chipset/zephyr/*.c")
62file(GLOB SOURCES_LC3_GOOGLE     "${BTSTACK_ROOT}/3rd-party/lc3-google/src/*.c")
63
64set(LWIP_CORE_SRC
65    3rd-party/lwip/core/src/core/def.c
66    3rd-party/lwip/core/src/core/inet_chksum.c
67    3rd-party/lwip/core/src/core/init.c
68    3rd-party/lwip/core/src/core/ip.c
69    3rd-party/lwip/core/src/core/mem.c
70    3rd-party/lwip/core/src/core/memp.c
71    3rd-party/lwip/core/src/core/netif.c
72    3rd-party/lwip/core/src/core/pbuf.c
73    3rd-party/lwip/core/src/core/tcp.c
74    3rd-party/lwip/core/src/core/tcp_in.c
75    3rd-party/lwip/core/src/core/tcp_out.c
76    3rd-party/lwip/core/src/core/timeouts.c
77    3rd-party/lwip/core/src/core/udp.c
78)
79set (LWIP_IPV4_SRC
80    3rd-party/lwip/core/src/core/ipv4/acd.c
81    3rd-party/lwip/core/src/core/ipv4/dhcp.c
82    3rd-party/lwip/core/src/core/ipv4/etharp.c
83    3rd-party/lwip/core/src/core/ipv4/icmp.c
84    3rd-party/lwip/core/src/core/ipv4/ip4.c
85    3rd-party/lwip/core/src/core/ipv4/ip4_addr.c
86    3rd-party/lwip/core/src/core/ipv4/ip4_frag.c
87)
88set (LWIP_NETIF_SRC
89    3rd-party/lwip/core/src/netif/ethernet.c
90)
91set (LWIP_HTTPD
92    3rd-party/lwip/core/src/apps/http/altcp_proxyconnect.c
93    3rd-party/lwip/core/src/apps/http/fs.c
94    3rd-party/lwip/core/src/apps/http/httpd.c
95)
96set (LWIP_DHCPD
97    3rd-party/lwip/dhcp-server/dhserver.c
98)
99set (LWIP_PORT
100    platform/lwip/port/sys_arch.c
101    platform/lwip/bnep_lwip.c
102)
103
104set (SOURCES_LWIP ${LWIP_CORE_SRC} ${LWIP_IPV4_SRC} ${LWIP_NETIF_SRC} ${LWIP_HTTPD} ${LWIP_DHCPD} ${LWIP_PORT})
105list(TRANSFORM SOURCES_LWIP PREPEND ${BTSTACK_ROOT}/)
106
107file(GLOB SOURCES_SRC_OFF "${BTSTACK_ROOT}/src/hci_transport_*.c")
108list(REMOVE_ITEM SOURCES_SRC   ${SOURCES_SRC_OFF})
109
110file(GLOB SOURCES_BLE_OFF "${BTSTACK_ROOT}/src/ble/att_db_util.c")
111list(REMOVE_ITEM SOURCES_BLE   ${SOURCES_BLE_OFF})
112
113set(SOURCES
114    ${SOURCES_MD5}
115    ${SOURCES_YXML}
116    ${SOURCES_BLUEDROID}
117    ${SOURCES_EMBEDDED}
118    ${SOURCES_RIJNDAEL}
119    ${SOURCES_LC3_GOOGLE}
120    ${SOURCES_SRC}
121    ${SOURCES_BLE}
122    ${SOURCES_GATT}
123    ${SOURCES_LE_AUDIO}
124    ${SOURCES_UECC}
125    ${SOURCES_HXCMOD}
126    ${SOURCES_CHIPSET_ZEPHYR}
127)
128list(SORT SOURCES)
129
130# create static lib
131add_library(btstack STATIC ${SOURCES})
132
133# extra compiler warnings
134target_compile_options(btstack PRIVATE
135     $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
136            -Wunused-variable -Wswitch-default -Werror -Wall>
137     $<$<CXX_COMPILER_ID:GNU>:
138            -Wunused-but-set-variable -Wunused-variable -Wswitch-default -Werror -Wall>
139     $<$<CXX_COMPILER_ID:MSVC>:
140            /W4>)
141
142# get zephyr's idea of build flags
143zephyr_get_include_directories_for_lang(       C includes)
144zephyr_get_system_include_directories_for_lang(C system_includes)
145zephyr_get_compile_definitions_for_lang(       C definitions)
146zephyr_get_compile_options_for_lang(           C options)
147
148set(external_project_cflags
149    ${includes}$<SEMICOLON>${definitions}$<SEMICOLON>${options}$<SEMICOLON>${system_includes}
150  )
151
152# prevent imacros argument from deduplication
153string( REGEX REPLACE "\\$<TARGET_PROPERTY:compiler,imacros>\\$<SEMICOLON>([^\\$]+)"
154    "\$<1:SHELL:-imacros \\1>"
155     _all_options ${external_project_cflags} )
156
157target_compile_options( btstack PUBLIC ${_all_options})
158target_compile_options( btstack PUBLIC -std=c11 )
159
160set(EXAMPLES "gatt_counter" )
161if(DEFINED ENV{EXAMPLE})
162    set( EXAMPLES $ENV{EXAMPLE} )
163endif()
164
165list(SORT EXAMPLES)
166file(GLOB EXAMPLES_GATT "${BTSTACK_ROOT}/example/*.gatt")
167
168# on Mac 10.14, adding lwip to libstack results in a yet not understood link error
169# workaround: add lwip sources only to lwip_examples
170set (LWIP_EXAMPLES pan_lwip_http_server)
171
172# create targets
173foreach(EXAMPLE ${EXAMPLES})
174    #   get_filename_component(EXAMPLE ${EXAMPLE_FILE} NAME_WE)
175
176    # get c file, either from examples or local
177    if( EXISTS "${BTSTACK_ROOT}/example/${EXAMPLE}.c" )
178        set (SOURCES_EXAMPLE ${BTSTACK_ROOT}/example/${EXAMPLE}.c)
179    else()
180        set (SOURCES_EXAMPLE ${EXAMPLE}.c)
181    endif()
182    list(APPEND SOURCES_EXAMPLE "${CMAKE_SOURCE_DIR}/src/main.c")
183    message("${BTSTACK_ROOT}")
184    message("${SOURCES_EXAMPLE}")
185    # add lwip sources for lwip examples
186    if ( "${LWIP_EXAMPLES}" MATCHES ${EXAMPLE} )
187        list(APPEND SOURCES_EXAMPLE ${SOURCES_LWIP})
188    endif()
189
190    # add GATT DB creation
191    if ( "${EXAMPLES_GATT}" MATCHES ${EXAMPLE} )
192        message("example ${EXAMPLE} -- with GATT DB")
193        add_custom_command(
194            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h
195            DEPENDS ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt
196            COMMAND ${Python_EXECUTABLE}
197            ARGS ${BTSTACK_ROOT}/tool/compile_gatt.py ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h
198        )
199        list(APPEND SOURCES_EXAMPLE ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h)
200    else()
201        message("example ${EXAMPLE}")
202    endif()
203    target_sources( app PRIVATE ${SOURCES_EXAMPLE} )
204    target_link_libraries( app PRIVATE btstack )
205endforeach(EXAMPLE)
206