1cmake_minimum_required (VERSION 3.5) 2project(BTstackMesh) 3 4# enable AddressSanitizer 5set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") 6set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") 7set (CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fsanitize=address") 8 9# AddressSanitizer for Xcode 10set(CMAKE_XCODE_GENERATE_SCHEME ON) 11set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER ON) 12set(CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN ON) 13 14# add libusb 15find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h PATH_SUFFIXES "include" "libusb" "libusb-1.0") 16find_library(LIBUSB_LIBRARY NAMES usb-1.0 PATH_SUFFIXES "lib" "lib32" "lib64" "dylib") 17get_filename_component(LIBUSB_LIBRARY_PATH ${LIBUSB_LIBRARY} DIRECTORY) 18include_directories( ${LIBUSB_INCLUDE_DIR} ) 19link_directories( ${LIBUSB_LIBRARY_PATH} ) 20link_libraries( usb-1.0 ) 21 22include_directories(../../3rd-party/micro-ecc) 23include_directories(../../3rd-party/tinydir) 24include_directories(../../src) 25include_directories(../../platform/posix) 26include_directories(../../3rd-party/rijndael) 27include_directories(.) 28 29file(GLOB SOURCES_SRC "../../src/*.c" "../../src/*.h" "../../example/sco_demo_util.c" "../../example/sco_demo_util.h") 30file(GLOB SOURCES_BLE "../../src/ble/*.c" "../../src/ble/*.h") 31file(GLOB SOURCES_GATT "../../src/ble/gatt-service/*.c" "../../src/ble/gatt-service/*.h") 32file(GLOB SOURCES_MESH "../../src/mesh/*.c" "../../src/mesh/*.h" ) 33file(GLOB SOURCES_UECC "../../3rd-party/micro-ecc/uECC.c" "../../3rd-party/micro-ecc/uECC.h") 34file(GLOB SOURCES_POSIX "../../platform/posix/*.c" "../../platform/posix/*.h") 35file(GLOB SOURCES_LIBUSB "../../platform/libusb/*.c" "../../platform/libusb/*.h") 36 37 38file(GLOB SOURCES_OFF "../../src/ble/le_device_db_memory.c" "../../src/ble/le_device_db_memory.h" "../../src/ble/le_device_db_tlv.c" "../../src/ble/le_device_db_tlv.h") 39list(REMOVE_ITEM SOURCES_BLE ${SOURCES_OFF}) 40 41set(SOURCES_MESH_NEW main.c) 42 43set(SOURCES 44 ${SOURCES_POSIX} 45 ${SOURCES_LIBUSB} 46 ${SOURCES_SRC} 47 ${SOURCES_BLE} 48 ${SOURCES_MESH} 49 ${SOURCES_MESH_NEW} 50 ${SOURCES_GATT} 51 ${SOURCES_UECC} 52) 53list(SORT SOURCES) 54 55# create static lib 56add_library(btstack STATIC ${SOURCES}) 57 58# list of targets 59set(EXAMPLES_C mesh_pts.c) 60 61file(GLOB EXAMPLES_GATT "*.gatt") 62 63# create targets 64foreach(EXAMPLE_FILE ${EXAMPLES_C}) 65 get_filename_component(EXAMPLE ${EXAMPLE_FILE} NAME_WE) 66 if ( "${EXAMPLES_GATT}" MATCHES ${EXAMPLE} ) 67 message("example ${EXAMPLE} -- with GATT DB") 68 add_custom_command( 69 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h 70 COMMAND ${CMAKE_SOURCE_DIR}/../../tool/compile_gatt.py ${CMAKE_SOURCE_DIR}/${EXAMPLE}.gatt ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h > /dev/null 71 ) 72 add_executable(${EXAMPLE} ${EXAMPLE_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${EXAMPLE}.h) 73 else() 74 message("example ${EXAMPLE}") 75 add_executable(${EXAMPLE} ${EXAMPLE_FILE}) 76 endif() 77 target_link_libraries(${EXAMPLE} btstack) 78endforeach(EXAMPLE_FILE) 79 80## hard-coded tests that use CPPUtest 81 82message("example mesh_message_test") 83include_directories( /usr/local/include) 84link_directories( /usr/local/lib) 85link_libraries(CppUTest CppUTestExt) 86add_executable(mesh_message_test 87../../src/mesh/mesh_foundation.c 88../../src/mesh/mesh_node.c 89../../src/mesh/mesh_iv_index_seq_number.c 90../../src/mesh/mesh_network.c 91../../src/mesh/mesh_peer.c 92../../src/mesh/mesh_lower_transport.c 93../../src/mesh/mesh_upper_transport.c 94../../src/mesh/mesh_virtual_addresses.c 95../../src/mesh/mesh_keys.c 96../../src/mesh/mesh_crypto.c 97../../src/btstack_memory.c 98../../src/btstack_memory_pool.c 99../../src/btstack_util.c 100../../src/btstack_crypto.c 101../../src/btstack_linked_list.c 102../../src/hci_dump.c 103../../src/hci_cmd.c 104../../3rd-party/micro-ecc/uECC.c 105../../3rd-party/rijndael/rijndael.c 106mock.c 107mesh_message_test.cpp 108) 109 110message("example provisioning_device_test") 111add_executable(provisioning_device_test 112provisioning_device_test.cpp 113mock.c 114../../3rd-party/micro-ecc/uECC.c 115../../3rd-party/rijndael/rijndael.c 116../../src/mesh/mesh_crypto.c 117../../src/mesh/provisioning_device.c 118../../src/mesh/mesh_node.c 119../../src/btstack_crypto.c 120../../src/btstack_util.c 121../../src/btstack_linked_list.c 122../../src/hci_cmd.c 123../../src/hci_dump.c 124) 125 126message("example provisioning_provisioner_test") 127add_executable(provisioning_provisioner_test 128provisioning_provisioner_test.cpp 129mock.c 130../../3rd-party/micro-ecc/uECC.c 131../../3rd-party/rijndael/rijndael.c 132../../src/btstack_crypto.c 133../../src/mesh/provisioning_provisioner.c 134 ../../src/mesh/mesh_crypto.c 135../../src/btstack_crypto.c 136../../src/btstack_util.c 137../../src/btstack_linked_list.c 138../../src/hci_cmd.c 139../../src/hci_dump.c 140) 141 142message("example mesh_configuration_composition_data_message_test") 143add_executable(mesh_configuration_composition_data_message_test 144mesh_configuration_composition_data_message_test.cpp 145../../src/mesh/mesh_configuration_client.c 146) 147target_link_libraries(mesh_configuration_composition_data_message_test btstack) 148