1 # Makefile for libusb based examples 2BTSTACK_ROOT = ../.. 3 4# CppuTest from pkg-config 5CFLAGS += ${shell pkg-config --cflags CppuTest} 6LDFLAGS += ${shell pkg-config --libs CppuTest} 7 8ATT += \ 9 att_dispatch.c \ 10 att_db.c \ 11 att_server.c \ 12 gatt_bearer.c \ 13 mesh_proxy_service_server.c \ 14 15CORE += \ 16 adv_bearer.c \ 17 beacon.c \ 18 btstack_link_key_db_fs.c \ 19 btstack_run_loop_posix.c \ 20 btstack_stdin_posix.c \ 21 btstack_uart_posix_pty.c \ 22 hci_transport_h2_libusb.c \ 23 hci_transport_h4.c \ 24 btstack_tlv_posix.c \ 25 mesh_iv_index_seq_number.c \ 26 mesh_node.c \ 27 le_device_db_fs.c \ 28 l2cap.c \ 29 uECC.c \ 30 rijndael.c \ 31 hci_dump_posix_fs.c \ 32 33 34# examples 35include ${BTSTACK_ROOT}/example/Makefile.inc 36include ${BTSTACK_ROOT}/src/ble/gatt-service/Makefile.inc 37 38 39CFLAGS += -g -DUNIT_TEST -Wall \ 40 -I$(BTSTACK_ROOT)/platform/embedded \ 41 -I$(BTSTACK_ROOT)/platform/posix \ 42 -I$(BTSTACK_ROOT)/3rd-party/tinydir \ 43 -I$(BTSTACK_ROOT)/3rd-party/rijndael \ 44 45CFLAGS += -Wmissing-prototypes -Wstrict-prototypes -Wshadow -Wunused-parameter -Wredundant-decls -Wsign-compare 46 47VPATH += ${BTSTACK_ROOT}/3rd-party/rijndael 48VPATH += ${BTSTACK_ROOT}/src/mesh 49VPATH += ${BTSTACK_ROOT}/src/classic 50VPATH += ${BTSTACK_ROOT}/platform/posix 51VPATH += ${BTSTACK_ROOT}/platform/embedded 52VPATH += ${BTSTACK_ROOT}/platform/libusb 53VPATH += ${BTSTACK_ROOT}/src/ble/gatt-service 54 55# libusb 56CFLAGS += $(shell pkg-config libusb-1.0 --cflags) 57LDFLAGS += $(shell pkg-config libusb-1.0 --libs) 58 59CFLAGS_COVERAGE = ${CFLAGS} -fprofile-arcs -ftest-coverage 60CFLAGS_ASAN = ${CFLAGS} -fsanitize=address -DHAVE_ASSERT 61 62# cppUTest 63LDFLAGS += -lCppUTest -lCppUTestExt 64 65LDFLAGS_COVERAGE = ${LDFLAGS} -fprofile-arcs -ftest-coverage 66LDFLAGS_ASAN = ${LDFLAGS} -fsanitize=address 67 68COMMON_OBJ_COVERAGE = $(addprefix build-coverage/,$(COMMON_OBJ)) 69CORE_OBJ_COVERAGE = $(addprefix build-coverage/,$(CORE_OBJ)) 70ATT_OBJ_COVERAGE = $(addprefix build-coverage/,$(ATT_OBJ)) 71GATT_SERVER_OBJ_COVERAGE = $(addprefix build-coverage/,$(GATT_SERVER_OBJ)) 72SM_OB_COVERAGE = $(addprefix build-coverage/,$(SM_OB)) 73MESH_OBJ_COVERAGE = $(addprefix build-coverage/,$(MESH_OBJ)) 74 75COMMON_OBJ_ASAN = $(addprefix build-asan/,$(COMMON_OBJ)) 76CORE_OBJ_ASAN = $(addprefix build-asan/,$(CORE_OBJ)) 77ATT_OBJ_ASAN = $(addprefix build-asan/,$(ATT_OBJ)) 78GATT_SERVER_OBJ_ASAN = $(addprefix build-asan/,$(GATT_SERVER_OBJ)) 79SM_OB_ASAN = $(addprefix build-asan/,$(SM_OB)) 80MESH_OBJ_ASAN = $(addprefix build-asan/,$(MESH_OBJ)) 81 82TESTS_SRCS = mesh_message_test provisioning_device_test provisioning_provisioner_test mesh_configuration_composition_data_message_test 83EXAMPLES = mesh_pts provisioner sniffer 84 85 86all: $(addprefix build-asan/,$(EXAMPLES)) 87tests: $(addprefix build-asan/,$(TESTS_SRCS)) 88 89build-%: 90 mkdir -p $@ 91 92 93build-coverage/%.o: %.c | build-coverage 94 ${CC} -c $(CFLAGS_COVERAGE) ${CPPFLAGS} $< -o $@ 95 96build-coverage/%.o: %.cpp | build-coverage 97 ${CXX} -c $(CFLAGS_COVERAGE) ${CPPFLAGS} $< -o $@ 98 99build-asan/%.o: %.c | build-asan 100 ${CC} -c $(CFLAGS_ASAN) ${CPPFLAGS} $< -o $@ 101 102build-asan/%.o: %.cpp | build-asan 103 ${CXX} -c $(CFLAGS_ASAN) ${CPPFLAGS} $< -o $@ 104 105 106build-asan/mesh_pts: mesh_pts.h ${CORE_OBJ_ASAN} ${COMMON_OBJ_ASAN} ${ATT_OBJ_ASAN} ${GATT_SERVER_OBJ_ASAN} ${SM_OBJ_ASAN} ${MESH_OBJ_ASAN} build-asan/main.o build-asan/mesh_pts.o 107 ${CC} $(filter-out mesh_pts.h,$^) ${LDFLAGS_ASAN} -o $@ 108 109build-asan/provisioner: ${CORE_OBJ_ASAN} ${COMMON_OBJ_ASAN} ${ATT_OBJ_ASAN} ${SM_OBJ_ASAN} build-asan/main.o build-asan/pb_adv.o build-asan/mesh_crypto.o build-asan/provisioning_provisioner.o build-asan/mesh_keys.o build-asan/mesh_foundation.o build-asan/mesh_network.o build-asan/provisioner.o 110 ${CC} $^ ${LDFLAGS_ASAN} -o $@ 111 112build-asan/sniffer: ${CORE_OBJ_ASAN} ${COMMON_OBJ_ASAN} ${ATT_OBJ_ASAN} ${SM_OBJ_ASAN} build-asan/main.o build-asan/mesh_keys.o build-asan/mesh_network.o build-asan/mesh_foundation.o build-asan/sniffer.o 113 ${CC} $^ ${LDFLAGS_ASAN} -o $@ 114 115 116build-asan/mesh_message_test: $(addprefix build-asan/, mesh_message_test.o mesh_foundation.o mesh_node.o mesh_iv_index_seq_number.o mesh_network.o mesh_peer.o mesh_lower_transport.o mesh_upper_transport.o mesh_virtual_addresses.o mesh_keys.o mesh_crypto.o btstack_memory.o btstack_memory_pool.o btstack_util.o btstack_crypto.o btstack_linked_list.o hci_dump.o uECC.o mock.o rijndael.o hci_cmd.o hci_dump_posix_fs.o) | build-asan 117 ${CXX} $^ ${CFLAGS} ${LDFLAGS_ASAN} -o $@ 118 119build-asan/provisioning_device_test: $(addprefix build-asan/, provisioning_device_test.o uECC.o mesh_crypto.o provisioning_device.o btstack_crypto.o btstack_util.o btstack_linked_list.o mesh_node.o mock.o rijndael.o hci_cmd.o hci_dump.o hci_dump_posix_fs.o) | build-asan 120 ${CXX} ${LDFLAGS_ASAN} $^ -lCppUTest -lCppUTestExt -o $@ 121 122build-asan/provisioning_provisioner_test: $(addprefix build-asan/, provisioning_provisioner_test.o uECC.o mesh_crypto.o provisioning_provisioner.o btstack_crypto.o btstack_util.o btstack_linked_list.o mock.o rijndael.o hci_cmd.o hci_dump.o hci_dump_posix_fs.o) | build-asan 123 ${CXX} ${LDFLAGS_ASAN} $^ -lCppUTest -lCppUTestExt -o $@ 124 125build-asan/mesh_configuration_composition_data_message_test: ${CORE_OBJ_ASAN} ${COMMON_OBJ_ASAN} ${ATT_OBJ_ASAN} ${MESH_OBJ_ASAN} build-asan/mesh_configuration_composition_data_message_test.o | build-asan 126 ${CXX} ${LDFLAGS_ASAN} $^ -lCppUTest -lCppUTestExt -o $@ 127 128 129test: tests 130 # Ignore leaks in mesh message test as tests stop before all PDUs are fully processed 131 ASAN_OPTIONS=detect_leaks=0 build-asan/mesh_message_test 132 build-asan/provisioning_device_test 133 build-asan/provisioning_provisioner_test 134 build-asan/mesh_configuration_composition_data_message_test 135 136coverage: tests 137 rm -f build-coverage/*.gcda 138 @echo "no coverage here" 139 140clean: 141 rm -rf build-coverage build-asan 142