1*4953c773SMatthias Ringwaldcmake_minimum_required(VERSION 3.5) 2*4953c773SMatthias Ringwald 3*4953c773SMatthias Ringwaldproject(qt-h4 LANGUAGES C CXX) 4*4953c773SMatthias Ringwald 5*4953c773SMatthias Ringwaldset(CMAKE_INCLUDE_CURRENT_DIR ON) 6*4953c773SMatthias Ringwald 7*4953c773SMatthias Ringwaldset(CMAKE_AUTOUIC ON) 8*4953c773SMatthias Ringwaldset(CMAKE_AUTOMOC ON) 9*4953c773SMatthias Ringwaldset(CMAKE_AUTORCC ON) 10*4953c773SMatthias Ringwald 11*4953c773SMatthias Ringwaldset(CMAKE_CXX_STANDARD 11) 12*4953c773SMatthias Ringwaldset(CMAKE_CXX_STANDARD_REQUIRED ON) 13*4953c773SMatthias Ringwald 14*4953c773SMatthias Ringwaldmessage("${Qt5_DIR}") 15*4953c773SMatthias Ringwald 16*4953c773SMatthias Ringwaldfind_package(Qt5Core) 17*4953c773SMatthias Ringwaldinclude(FindPythonInterp) 18*4953c773SMatthias Ringwald 19*4953c773SMatthias Ringwald# BTstack Root 20*4953c773SMatthias Ringwaldset(BTSTACK_ROOT "../..") 21*4953c773SMatthias Ringwaldmessage("BTSTACK_ROOT: ${BTSTACK_ROOT}") 22*4953c773SMatthias Ringwald 23*4953c773SMatthias Ringwald# BTstack include 24*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/micro-ecc) 25*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/bluedroid/decoder/include) 26*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/bluedroid/encoder/include) 27*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/md5) 28*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/hxcmod-player) 29*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/hxcmod-player/mod) 30*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/lwip/core/src/include) 31*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/lwip/dhcp-server) 32*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/rijndael) 33*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/yxml) 34*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/3rd-party/tinydir) 35*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/chipset/bcm) 36*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/chipset/cc256x) 37*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/chipset/csr) 38*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/src) 39*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/platform/posix) 40*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/platform/embedded) 41*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/platform/lwip) 42*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/platform/lwip/port) 43*4953c773SMatthias Ringwaldinclude_directories(${BTSTACK_ROOT}/platform/qt) 44*4953c773SMatthias Ringwaldinclude_directories(.) 45*4953c773SMatthias Ringwald 46*4953c773SMatthias Ringwald# BTstack sources 47*4953c773SMatthias Ringwaldfile(GLOB SOURCES_SRC "${BTSTACK_ROOT}/src/*.c" "${BTSTACK_ROOT}/example/sco_demo_util.c") 48*4953c773SMatthias Ringwaldfile(GLOB SOURCES_BLE "${BTSTACK_ROOT}/src/ble/*.c") 49*4953c773SMatthias Ringwaldfile(GLOB SOURCES_GATT "${BTSTACK_ROOT}/src/ble/gatt-service/*.c") 50*4953c773SMatthias Ringwaldfile(GLOB SOURCES_CLASSIC "${BTSTACK_ROOT}/src/classic/*.c") 51*4953c773SMatthias Ringwaldfile(GLOB SOURCES_MESH "${BTSTACK_ROOT}/src/mesh/*.c") 52*4953c773SMatthias Ringwaldfile(GLOB SOURCES_BLUEDROID "${BTSTACK_ROOT}/3rd-party/bluedroid/encoder/srce/*.c" "${BTSTACK_ROOT}/3rd-party/bluedroid/decoder/srce/*.c") 53*4953c773SMatthias Ringwaldfile(GLOB SOURCES_MD5 "${BTSTACK_ROOT}/3rd-party/md5/md5.c") 54*4953c773SMatthias Ringwaldfile(GLOB SOURCES_UECC "${BTSTACK_ROOT}/3rd-party/micro-ecc/uECC.c") 55*4953c773SMatthias Ringwaldfile(GLOB SOURCES_YXML "${BTSTACK_ROOT}/3rd-party/yxml/yxml.c") 56*4953c773SMatthias Ringwaldfile(GLOB SOURCES_HXCMOD "${BTSTACK_ROOT}/3rd-party/hxcmod-player/*.c" "${BTSTACK_ROOT}/3rd-party/hxcmod-player/mods/*.c") 57*4953c773SMatthias Ringwaldfile(GLOB SOURCES_RIJNDAEL "${BTSTACK_ROOT}/3rd-party/rijndael/rijndael.c") 58*4953c773SMatthias Ringwald 59*4953c773SMatthias Ringwaldset(SOURCES_POSIX 60*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/platform/posix/btstack_audio_portaudio.c 61*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/platform/posix/btstack_tlv_posix.c 62*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/platform/posix/wav_util.c 63*4953c773SMatthias Ringwald) 64*4953c773SMatthias Ringwald 65*4953c773SMatthias Ringwaldset(SOURCES_CHIPSET 66*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/chipset/bcm/btstack_chipset_bcm.c 67*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/chipset/cc256x/btstack_chipset_cc256x.c 68*4953c773SMatthias Ringwald bluetooth_init_cc2564C_1.3.c 69*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/chipset/csr/btstack_chipset_csr.c 70*4953c773SMatthias Ringwald) 71*4953c773SMatthias Ringwald 72*4953c773SMatthias Ringwaldset(LWIP_CORE_SRC 73*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/def.c 74*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/inet_chksum.c 75*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/init.c 76*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/ip.c 77*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/mem.c 78*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/memp.c 79*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/netif.c 80*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/pbuf.c 81*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/tcp.c 82*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/tcp_in.c 83*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/tcp_out.c 84*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/timeouts.c 85*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/udp.c 86*4953c773SMatthias Ringwald) 87*4953c773SMatthias Ringwaldset (LWIP_IPV4_SRC 88*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/ipv4/acd.c 89*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/ipv4/dhcp.c 90*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/ipv4/etharp.c 91*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/ipv4/icmp.c 92*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/ipv4/ip4.c 93*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/ipv4/ip4_addr.c 94*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/core/ipv4/ip4_frag.c 95*4953c773SMatthias Ringwald) 96*4953c773SMatthias Ringwaldset (LWIP_NETIF_SRC 97*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/netif/ethernet.c 98*4953c773SMatthias Ringwald) 99*4953c773SMatthias Ringwaldset (LWIP_HTTPD 100*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/apps/http/altcp_proxyconnect.c 101*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/apps/http/fs.c 102*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/core/src/apps/http/httpd.c 103*4953c773SMatthias Ringwald) 104*4953c773SMatthias Ringwaldset (LWIP_DHCPD 105*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/3rd-party/lwip/dhcp-server/dhserver.c 106*4953c773SMatthias Ringwald) 107*4953c773SMatthias Ringwaldset (LWIP_PORT 108*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/platform/lwip/port/sys_arch.c 109*4953c773SMatthias Ringwald ${BTSTACK_ROOT}/platform/lwip/bnep_lwip.c 110*4953c773SMatthias Ringwald) 111*4953c773SMatthias Ringwald 112*4953c773SMatthias Ringwaldset (SOURCES_LWIP ${LWIP_CORE_SRC} ${LWIP_IPV4_SRC} ${LWIP_NETIF_SRC} ${LWIP_HTTPD} ${LWIP_DHCPD} ${LWIP_PORT}) 113*4953c773SMatthias Ringwald 114*4953c773SMatthias Ringwaldfile(GLOB SOURCES_BLE_OFF "${BTSTACK_ROOT}/src/ble/le_device_db_memory.c") 115*4953c773SMatthias Ringwaldlist(REMOVE_ITEM SOURCES_BLE ${SOURCES_BLE_OFF}) 116*4953c773SMatthias Ringwald 117*4953c773SMatthias Ringwald 118*4953c773SMatthias Ringwald# select POSIX vs Windows versions 119*4953c773SMatthias RingwaldIF (WIN32) 120*4953c773SMatthias Ringwald message("Building for Windows using WinUSB") 121*4953c773SMatthias Ringwald set(SOURCES_HCI_USB ${BTSTACK_ROOT}/platform/windows/hci_transport_h2_winusb.c) 122*4953c773SMatthias Ringwald set(SOURCES_STDIN ${BTSTACK_ROOT}/platform/windows/btstack_stdin_windows.c) 123*4953c773SMatthias Ringwald link_libraries( winusb setupapi) 124*4953c773SMatthias RingwaldELSE() 125*4953c773SMatthias Ringwald message("Building for POSIX using libusb") 126*4953c773SMatthias Ringwald 127*4953c773SMatthias Ringwald # add libusb 128*4953c773SMatthias Ringwald find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h PATH_SUFFIXES "include" "libusb" "libusb-1.0") 129*4953c773SMatthias Ringwald find_library(LIBUSB_LIBRARY NAMES usb-1.0 PATH_SUFFIXES "lib" "lib32" "lib64" "dylib") 130*4953c773SMatthias Ringwald get_filename_component(LIBUSB_LIBRARY_PATH ${LIBUSB_LIBRARY} DIRECTORY) 131*4953c773SMatthias Ringwald include_directories( ${LIBUSB_INCLUDE_DIR} ) 132*4953c773SMatthias Ringwald link_directories( ${LIBUSB_LIBRARY_PATH} ) 133*4953c773SMatthias Ringwald link_libraries( usb-1.0 ) 134*4953c773SMatthias Ringwald 135*4953c773SMatthias Ringwald set(SOURCES_HCI_USB ${BTSTACK_ROOT}/platform/libusb/hci_transport_h2_libusb.c) 136*4953c773SMatthias Ringwald set(SOURCES_STDIN ${BTSTACK_ROOT}/platform/posix/btstack_stdin_posix.c) 137*4953c773SMatthias Ringwald 138*4953c773SMatthias Ringwald list(APPEND SOURCES_POSIX ${BTSTACK_ROOT}/platform/posix/btstack_network_posix.c) 139*4953c773SMatthias Ringwald list(APPEND SOURCES_POSIX ${BTSTACK_ROOT}/platform/posix/btstack_uart_block_posix.c) 140*4953c773SMatthias RingwaldENDIF() 141*4953c773SMatthias Ringwald 142*4953c773SMatthias Ringwaldset(SOURCES 143*4953c773SMatthias Ringwald ${SOURCES_MD5} 144*4953c773SMatthias Ringwald ${SOURCES_YXML} 145*4953c773SMatthias Ringwald ${SOURCES_BLUEDROID} 146*4953c773SMatthias Ringwald ${SOURCES_POSIX} 147*4953c773SMatthias Ringwald ${SOURCES_RIJNDAEL} 148*4953c773SMatthias Ringwald ${SOURCES_HCI_USB} 149*4953c773SMatthias Ringwald ${SOURCES_STDIN} 150*4953c773SMatthias Ringwald ${SOURCES_SRC} 151*4953c773SMatthias Ringwald ${SOURCES_BLE} 152*4953c773SMatthias Ringwald ${SOURCES_GATT} 153*4953c773SMatthias Ringwald ${SOURCES_MESH} 154*4953c773SMatthias Ringwald ${SOURCES_CLASSIC} 155*4953c773SMatthias Ringwald ${SOURCES_UECC} 156*4953c773SMatthias Ringwald ${SOURCES_HXCMOD} 157*4953c773SMatthias Ringwald ${SOURCES_CHIPSET} 158*4953c773SMatthias Ringwald) 159*4953c773SMatthias Ringwaldlist(SORT SOURCES) 160*4953c773SMatthias Ringwald 161*4953c773SMatthias Ringwald# create static lib 162*4953c773SMatthias Ringwaldadd_library(btstack-lib STATIC ${SOURCES}) 163*4953c773SMatthias Ringwald 164*4953c773SMatthias Ringwald# create targets for all examples 165*4953c773SMatthias Ringwaldfile(GLOB EXAMPLES_C "${BTSTACK_ROOT}/example/*.c") 166*4953c773SMatthias Ringwaldlist(SORT EXAMPLES_C) 167*4953c773SMatthias Ringwaldfile(GLOB EXAMPLES_GATT "${BTSTACK_ROOT}/example/*.gatt") 168*4953c773SMatthias Ringwald 169*4953c773SMatthias Ringwald# remove some 170*4953c773SMatthias Ringwaldfile(GLOB EXAMPLES_OFF "${BTSTACK_ROOT}/example/panu_demo.c" "${BTSTACK_ROOT}/example/sco_demo_util.c" "${BTSTACK_ROOT}/example/ant_test.c" "${BTSTACK_ROOT}/example/avrcp_browsing_client.c") 171*4953c773SMatthias Ringwaldlist(REMOVE_ITEM EXAMPLES_C ${EXAMPLES_OFF}) 172*4953c773SMatthias Ringwald 173*4953c773SMatthias Ringwald# on Mac 10.14, adding lwip to libstack results in a yet not understood link error 174*4953c773SMatthias Ringwald# workaround: add lwip sources only to lwip_examples 175*4953c773SMatthias Ringwaldset (LWIP_EXAMPLES pan_lwip_http_server) 176*4953c773SMatthias Ringwald 177*4953c773SMatthias Ringwald# create targets 178*4953c773SMatthias Ringwaldforeach(EXAMPLE_FILE ${EXAMPLES_C}) 179*4953c773SMatthias Ringwald get_filename_component(EXAMPLE ${EXAMPLE_FILE} NAME_WE) 180*4953c773SMatthias Ringwald set (SOURCE_FILES ${EXAMPLE_FILE}) 181*4953c773SMatthias Ringwald 182*4953c773SMatthias Ringwald # add qt main.cpp and run loop 183*4953c773SMatthias Ringwald list(APPEND SOURCE_FILES ${BTSTACK_ROOT}/platform/qt/btstack_run_loop_qt.cpp main.cpp) 184*4953c773SMatthias Ringwald 185*4953c773SMatthias Ringwald # add lwip sources for lwip examples 186*4953c773SMatthias Ringwald if ( "${LWIP_EXAMPLES}" MATCHES ${EXAMPLE} ) 187*4953c773SMatthias Ringwald list(APPEND SOURCE_FILES ${SOURCES_LWIP}) 188*4953c773SMatthias Ringwald endif() 189*4953c773SMatthias Ringwald 190*4953c773SMatthias Ringwald # add GATT DB creation 191*4953c773SMatthias Ringwald if ( "${EXAMPLES_GATT}" MATCHES ${EXAMPLE} ) 192*4953c773SMatthias Ringwald message("example ${EXAMPLE} -- with GATT DB") 193*4953c773SMatthias Ringwald add_custom_command( 194*4953c773SMatthias Ringwald OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 195*4953c773SMatthias Ringwald COMMAND ${PYTHON_EXECUTABLE} 196*4953c773SMatthias Ringwald ARGS ${BTSTACK_ROOT}/tool/compile_gatt.py ${BTSTACK_ROOT}/example/${EXAMPLE}.gatt ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 197*4953c773SMatthias Ringwald ) 198*4953c773SMatthias Ringwald list(APPEND SOURCE_FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h) 199*4953c773SMatthias Ringwald 200*4953c773SMatthias Ringwald # generated file does not need AUTOMOC and AUOUIC processing 201*4953c773SMatthias Ringwald set_property(SOURCE {CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h PROPERTY SKIP_AUTOGEN ON) 202*4953c773SMatthias Ringwald else() 203*4953c773SMatthias Ringwald message("example ${EXAMPLE}") 204*4953c773SMatthias Ringwald endif() 205*4953c773SMatthias Ringwald add_executable(${EXAMPLE} ${SOURCE_FILES} ) 206*4953c773SMatthias Ringwald target_link_libraries(${EXAMPLE} btstack-lib Qt5::Core) 207*4953c773SMatthias Ringwaldendforeach(EXAMPLE_FILE) 208