xref: /btstack/port/libusb/CMakeLists.txt (revision a09eff8155c43e354a37525a83e938daf1e68153)
1caeaa206SMatthias Ringwaldcmake_minimum_required (VERSION 3.12)
2742c132cSMatthias Ringwald
3742c132cSMatthias RingwaldSET(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk)
4742c132cSMatthias RingwaldSET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
5742c132cSMatthias Ringwald
60689ede5SMatthias Ringwaldproject(BTstack-libusb)
7a7775e9bSMatthias Ringwald
8dce6d7b3SMatthias RingwaldSET(BTSTACK_ROOT ${CMAKE_SOURCE_DIR}/../..)
9742c132cSMatthias Ringwald
10f7b7cba1SMatthias Ringwald# extra compiler warnings
11f7b7cba1SMatthias Ringwaldif ("${CMAKE_C_COMPILER_ID}" MATCHES ".*Clang.*")
12f7b7cba1SMatthias Ringwald	# using Clang
13*a09eff81SMatthias Ringwald	SET(CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -Wunused-variable -Wswitch-default -Wall -Wextra -Werror -Werror=uninitialized")
14f7b7cba1SMatthias Ringwaldelseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
15f7b7cba1SMatthias Ringwald	# using GCC
16*a09eff81SMatthias Ringwald	SET(CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -Wunused-but-set-variable -Wunused-variable -Wswitch-default -Wall -Wextra -Werror")
17f7b7cba1SMatthias Ringwaldelseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel")
18f7b7cba1SMatthias Ringwald	# using Intel C++
19f7b7cba1SMatthias Ringwaldelseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
20f7b7cba1SMatthias Ringwald	# using Visual Studio C++
21f7b7cba1SMatthias Ringwaldendif()
22f7b7cba1SMatthias Ringwald
2302bddf72SMatthias Ringwald# to generate .h from .gatt files
2402bddf72SMatthias Ringwaldfind_package (Python REQUIRED COMPONENTS Interpreter)
2550c79195SMatthias Ringwaldinclude_directories(${CMAKE_CURRENT_BINARY_DIR})
2650c79195SMatthias Ringwald
2750c79195SMatthias Ringwald# local dir for btstack_config.h after build dir to avoid using .h from Makefile
2850c79195SMatthias Ringwaldinclude_directories(.)
2950c79195SMatthias Ringwald
30a7775e9bSMatthias Ringwaldinclude_directories(../../3rd-party/micro-ecc)
31a7775e9bSMatthias Ringwaldinclude_directories(../../3rd-party/bluedroid/decoder/include)
32a7775e9bSMatthias Ringwaldinclude_directories(../../3rd-party/bluedroid/encoder/include)
335d28eebeSMatthias Ringwaldinclude_directories(../../3rd-party/lc3-google/include)
34a7775e9bSMatthias Ringwaldinclude_directories(../../3rd-party/md5)
35a7775e9bSMatthias Ringwaldinclude_directories(../../3rd-party/hxcmod-player)
36a7775e9bSMatthias Ringwaldinclude_directories(../../3rd-party/hxcmod-player/mod)
3797dc5e69SMatthias Ringwaldinclude_directories(../../3rd-party/lwip/core/src/include)
3897dc5e69SMatthias Ringwaldinclude_directories(../../3rd-party/lwip/dhcp-server)
397cdc89a5SMatthias Ringwaldinclude_directories(../../3rd-party/rijndael)
40a7775e9bSMatthias Ringwaldinclude_directories(../../3rd-party/yxml)
41a7775e9bSMatthias Ringwaldinclude_directories(../../3rd-party/tinydir)
42a7775e9bSMatthias Ringwaldinclude_directories(../../src)
43df9a25acSMatthias Ringwaldinclude_directories(../../chipset/realtek)
44f9563b89SMatthias Ringwaldinclude_directories(../../chipset/zephyr)
45a7775e9bSMatthias Ringwaldinclude_directories(../../platform/posix)
46a7775e9bSMatthias Ringwaldinclude_directories(../../platform/embedded)
4797dc5e69SMatthias Ringwaldinclude_directories(../../platform/lwip)
48235be4f4SMatthias Ringwaldinclude_directories(../../platform/lwip/port)
49a7775e9bSMatthias Ringwald
50a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_SRC       "../../src/*.c" "../../example/sco_demo_util.c")
51a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_BLE       "../../src/ble/*.c")
52a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_GATT      "../../src/ble/gatt-service/*.c")
53a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_CLASSIC   "../../src/classic/*.c")
54d567aeb3SMatthias Ringwaldfile(GLOB SOURCES_MESH      "../../src/mesh/*.c" "../../src/mesh/gatt-service/*.c")
55a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_BLUEDROID "../../3rd-party/bluedroid/encoder/srce/*.c" "../../3rd-party/bluedroid/decoder/srce/*.c")
56a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_MD5       "../../3rd-party/md5/md5.c")
57a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_UECC      "../../3rd-party/micro-ecc/uECC.c")
58a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_YXML      "../../3rd-party/yxml/yxml.c")
59a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_HXCMOD    "../../3rd-party/hxcmod-player/*.c"  "../../3rd-party/hxcmod-player/mods/*.c")
607cdc89a5SMatthias Ringwaldfile(GLOB SOURCES_RIJNDAEL  "../../3rd-party/rijndael/rijndael.c")
61a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_POSIX     "../../platform/posix/*.c")
62a7775e9bSMatthias Ringwaldfile(GLOB SOURCES_LIBUSB    "../../port/libusb/*.c" "../../platform/libusb/*.c")
63f9563b89SMatthias Ringwaldfile(GLOB SOURCES_ZEPHYR    "../../chipset/zephyr/*.c")
64df9a25acSMatthias Ringwaldfile(GLOB SOURCES_REALTEK   "../../chipset/realtek/*.c")
655d28eebeSMatthias Ringwaldfile(GLOB SOURCES_LC3_GOOGLE "../../3rd-party/lc3-google/src/*.c")
66a7775e9bSMatthias Ringwald
6797dc5e69SMatthias Ringwaldset(LWIP_CORE_SRC
6897dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/def.c
6997dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/inet_chksum.c
7097dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/init.c
7197dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/ip.c
7297dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/mem.c
7397dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/memp.c
7497dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/netif.c
7597dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/pbuf.c
7697dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/tcp.c
7797dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/tcp_in.c
7897dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/tcp_out.c
7997dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/timeouts.c
8097dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/udp.c
8197dc5e69SMatthias Ringwald)
8297dc5e69SMatthias Ringwaldset (LWIP_IPV4_SRC
8397dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/ipv4/acd.c
8497dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/ipv4/dhcp.c
8597dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/ipv4/etharp.c
8697dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/ipv4/icmp.c
8797dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/ipv4/ip4.c
8897dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/ipv4/ip4_addr.c
8997dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/core/ipv4/ip4_frag.c
9097dc5e69SMatthias Ringwald)
9197dc5e69SMatthias Ringwaldset (LWIP_NETIF_SRC
9297dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/netif/ethernet.c
9397dc5e69SMatthias Ringwald)
9497dc5e69SMatthias Ringwaldset (LWIP_HTTPD
9597dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/apps/http/altcp_proxyconnect.c
9697dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/apps/http/fs.c
9797dc5e69SMatthias Ringwald	../../3rd-party/lwip/core/src/apps/http/httpd.c
9897dc5e69SMatthias Ringwald)
9997dc5e69SMatthias Ringwaldset (LWIP_DHCPD
10097dc5e69SMatthias Ringwald	../../3rd-party/lwip/dhcp-server/dhserver.c
10197dc5e69SMatthias Ringwald)
10297dc5e69SMatthias Ringwaldset (LWIP_PORT
103235be4f4SMatthias Ringwald	../../platform/lwip/port/sys_arch.c
10497dc5e69SMatthias Ringwald	../../platform/lwip/bnep_lwip.c
10597dc5e69SMatthias Ringwald)
10697dc5e69SMatthias Ringwald
10797dc5e69SMatthias Ringwaldset (SOURCES_LWIP ${LWIP_CORE_SRC} ${LWIP_IPV4_SRC} ${LWIP_NETIF_SRC} ${LWIP_HTTPD} ${LWIP_DHCPD} ${LWIP_PORT})
10897dc5e69SMatthias Ringwald
109f8da99a8SMatthias Ringwaldfile(GLOB SOURCES_SRC_OFF "../../src/hci_transport_*.c")
110f8da99a8SMatthias Ringwaldlist(REMOVE_ITEM SOURCES_SRC   ${SOURCES_SRC_OFF})
111f8da99a8SMatthias Ringwald
1127ff38430SMatthias Ringwaldfile(GLOB SOURCES_BLE_OFF "../../src/ble/le_device_db_memory.c")
1137ff38430SMatthias Ringwaldlist(REMOVE_ITEM SOURCES_BLE   ${SOURCES_BLE_OFF})
1147ff38430SMatthias Ringwald
1157ff38430SMatthias Ringwaldfile(GLOB SOURCES_POSIX_OFF "../../platform/posix/le_device_db_fs.c")
1167ff38430SMatthias Ringwaldlist(REMOVE_ITEM SOURCES_POSIX ${SOURCES_POSIX_OFF})
117a7775e9bSMatthias Ringwald
118a7775e9bSMatthias Ringwaldset(SOURCES
119a7775e9bSMatthias Ringwald	${SOURCES_MD5}
120a7775e9bSMatthias Ringwald	${SOURCES_YXML}
121a7775e9bSMatthias Ringwald	${SOURCES_BLUEDROID}
122a7775e9bSMatthias Ringwald	${SOURCES_POSIX}
1237cdc89a5SMatthias Ringwald	${SOURCES_RIJNDAEL}
124a7775e9bSMatthias Ringwald	${SOURCES_LIBUSB}
1255d28eebeSMatthias Ringwald	${SOURCES_LC3_GOOGLE}
126a7775e9bSMatthias Ringwald	${SOURCES_SRC}
127a7775e9bSMatthias Ringwald	${SOURCES_BLE}
128a7775e9bSMatthias Ringwald	${SOURCES_GATT}
1297ff38430SMatthias Ringwald	${SOURCES_MESH}
130a7775e9bSMatthias Ringwald	${SOURCES_CLASSIC}
131a7775e9bSMatthias Ringwald	${SOURCES_UECC}
132a7775e9bSMatthias Ringwald	${SOURCES_HXCMOD}
133df9a25acSMatthias Ringwald	${SOURCES_REALTEK}
134f9563b89SMatthias Ringwald	${SOURCES_ZEPHYR}
135a7775e9bSMatthias Ringwald)
136a7775e9bSMatthias Ringwaldlist(SORT SOURCES)
137a7775e9bSMatthias Ringwald
138a7775e9bSMatthias Ringwald# create static lib
139a7775e9bSMatthias Ringwaldadd_library(btstack STATIC ${SOURCES})
140a7775e9bSMatthias Ringwald
141caeaa206SMatthias Ringwald# pkgconfig required to link libusb
14257f681c0SMatthias Ringwaldfind_package(PkgConfig REQUIRED)
14357f681c0SMatthias Ringwald
14457f681c0SMatthias Ringwald# libusb
14557f681c0SMatthias Ringwaldpkg_check_modules(LIBUSB REQUIRED libusb-1.0)
14657f681c0SMatthias Ringwaldinclude_directories(${LIBUSB_INCLUDE_DIRS})
14757f681c0SMatthias Ringwaldlink_directories(${LIBUSB_LIBRARY_DIRS})
14857f681c0SMatthias Ringwaldlink_libraries(${LIBUSB_LIBRARIES})
14957f681c0SMatthias Ringwald
15057f681c0SMatthias Ringwald# portaudio
151caeaa206SMatthias Ringwaldpkg_check_modules(PORTAUDIO portaudio-2.0)
15257f681c0SMatthias Ringwaldif(PORTAUDIO_FOUND)
15357f681c0SMatthias Ringwald	message("HAVE_PORTAUDIO")
15457f681c0SMatthias Ringwald	include_directories(${PORTAUDIO_INCLUDE_DIRS})
15557f681c0SMatthias Ringwald	link_directories(${PORTAUDIO_LIBRARY_DIRS})
15657f681c0SMatthias Ringwald	link_libraries(${PORTAUDIO_LIBRARIES})
157caeaa206SMatthias Ringwald	add_compile_definitions(HAVE_PORTAUDIO)
15857f681c0SMatthias Ringwaldendif()
15957f681c0SMatthias Ringwald
16057f681c0SMatthias Ringwald# pthread
16157f681c0SMatthias Ringwaldfind_package(Threads)
16257f681c0SMatthias Ringwaldlink_libraries(${CMAKE_THREAD_LIBS_INIT})
16357f681c0SMatthias Ringwald
164a7775e9bSMatthias Ringwald# create targets for all examples
165a7775e9bSMatthias Ringwaldfile(GLOB EXAMPLES_C    "../../example/*.c")
166a7775e9bSMatthias Ringwaldlist(SORT EXAMPLES_C)
167a7775e9bSMatthias Ringwaldfile(GLOB EXAMPLES_GATT "../../example/*.gatt")
168a7775e9bSMatthias Ringwald
169a7775e9bSMatthias Ringwald# remove some
170e8b7768fSMatthias Ringwaldfile(GLOB EXAMPLES_OFF  "../../example/*demo_util*.c" "../../example/ant_test.c" "../../example/avrcp_browsing_client.c")
171a7775e9bSMatthias Ringwaldlist(REMOVE_ITEM EXAMPLES_C ${EXAMPLES_OFF})
172a7775e9bSMatthias Ringwald
17397dc5e69SMatthias Ringwald# on Mac 10.14, adding lwip to libstack results in a yet not understood link error
17497dc5e69SMatthias Ringwald# workaround: add lwip sources only to lwip_examples
17597dc5e69SMatthias Ringwaldset (LWIP_EXAMPLES pan_lwip_http_server)
17697dc5e69SMatthias Ringwald
177e2cd7734SMatthias Ringwald# .gatt files in src
178e2cd7734SMatthias Ringwaldfile(GLOB GATT_FILES "../../src/*/gatt-service/*.gatt")
179e2cd7734SMatthias Ringwald
180a7775e9bSMatthias Ringwald# create targets
181a7775e9bSMatthias Ringwaldforeach(EXAMPLE_FILE ${EXAMPLES_C})
182a7775e9bSMatthias Ringwald	get_filename_component(EXAMPLE ${EXAMPLE_FILE} NAME_WE)
1831e0ee29bSMatthias Ringwald
1841e0ee29bSMatthias Ringwald	# get c file
1851e0ee29bSMatthias Ringwald	set (SOURCES_EXAMPLE ${BTSTACK_ROOT}/example/${EXAMPLE}.c)
18697dc5e69SMatthias Ringwald
18797dc5e69SMatthias Ringwald	# add lwip sources for lwip examples
18897dc5e69SMatthias Ringwald	if ( "${LWIP_EXAMPLES}" MATCHES ${EXAMPLE} )
1891e0ee29bSMatthias Ringwald		list(APPEND SOURCES_EXAMPLE ${SOURCES_LWIP})
19097dc5e69SMatthias Ringwald	endif()
19197dc5e69SMatthias Ringwald
19297dc5e69SMatthias Ringwald	# add GATT DB creation
193a7775e9bSMatthias Ringwald	if ( "${EXAMPLES_GATT}" MATCHES ${EXAMPLE} )
194a7775e9bSMatthias Ringwald		message("example ${EXAMPLE} -- with GATT DB")
195a7775e9bSMatthias Ringwald		add_custom_command(
196a7775e9bSMatthias Ringwald		    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h
197e2cd7734SMatthias Ringwald			DEPENDS ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt ${GATT_FILES}
19802bddf72SMatthias Ringwald			COMMAND ${Python_EXECUTABLE}
19902bddf72SMatthias Ringwald			ARGS ${BTSTACK_ROOT}/tool/compile_gatt.py ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h
200a7775e9bSMatthias Ringwald		)
2011e0ee29bSMatthias Ringwald		list(APPEND SOURCES_EXAMPLE ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h)
202a7775e9bSMatthias Ringwald	else()
203a7775e9bSMatthias Ringwald		message("example ${EXAMPLE}")
204a7775e9bSMatthias Ringwald	endif()
2051e0ee29bSMatthias Ringwald	add_executable(${EXAMPLE} ${SOURCES_EXAMPLE} )
206a7775e9bSMatthias Ringwald	target_link_libraries(${EXAMPLE} btstack)
207a7775e9bSMatthias Ringwaldendforeach(EXAMPLE_FILE)
208