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