1+ # This target is to ensure accidental execution of Makefile as a bash script will not execute commands like rm in unexpected directories and exit gracefully.
2+ .prevent_execution :
3+ exit 0
4+
5+ # Set this to @ to keep the makefile quiet
6+ ifndef SILENCE
7+ SILENCE = @
8+ endif
9+
10+ CC = gcc
11+ RM = rm
12+
13+ DEBUG =
14+
15+ # --- Inputs ----#
16+ COMPONENT_NAME = IotSdkC
17+
18+ ALL_TARGETS := build-cpputest
19+ ALL_TARGETS_CLEAN :=
20+
21+ CPPUTEST_USE_EXTENSIONS = Y
22+ CPP_PLATFORM = Gcc
23+ CPPUTEST_CFLAGS += -std=gnu99
24+ CPPUTEST_LDFLAGS += -lpthread
25+ CPPUTEST_CFLAGS += -D__USE_BSD
26+ CPPUTEST_USE_GCOV = Y
27+
28+ # IoT client directory
29+ IOT_CLIENT_DIR = .
30+
31+ APP_DIR = $(IOT_CLIENT_DIR ) /tests/unit
32+ APP_NAME = aws_iot_sdk_unit_tests
33+ APP_SRC_FILES = $(shell find $(APP_DIR ) /src -name '* .cpp')
34+ APP_SRC_FILES = $(shell find $(APP_DIR ) /src -name '* .c')
35+ APP_INCLUDE_DIRS = -I $(APP_DIR ) /include
36+
37+ CPPUTEST_DIR = $(IOT_CLIENT_DIR ) /external_libs/CppUTest
38+
39+ # Provide paths for CppUTest to run Unit Tests otherwise build will fail
40+ ifndef CPPUTEST_INCLUDE
41+ CPPUTEST_INCLUDE = $(CPPUTEST_DIR ) /include
42+ endif
43+
44+ ifndef CPPUTEST_BUILD_LIB
45+ CPPUTEST_BUILD_LIB = $(CPPUTEST_DIR )
46+ endif
47+
48+ CPPUTEST_LDFLAGS += -ldl $(CPPUTEST_BUILD_LIB ) /libCppUTest.a
49+
50+ PLATFORM_DIR = $(IOT_CLIENT_DIR ) /platform/linux
51+
52+ # MbedTLS directory
53+ TEMP_MBEDTLS_SRC_DIR = $(APP_DIR ) /tls_mock
54+ TLS_LIB_DIR = $(TEMP_MBEDTLS_SRC_DIR )
55+ TLS_INCLUDE_DIR = -I $(TEMP_MBEDTLS_SRC_DIR )
56+
57+ # Logging level control
58+ LOG_FLAGS += -DENABLE_IOT_DEBUG
59+ # LOG_FLAGS += -DENABLE_IOT_TRACE
60+ LOG_FLAGS += -DENABLE_IOT_INFO
61+ LOG_FLAGS += -DENABLE_IOT_WARN
62+ LOG_FLAGS += -DENABLE_IOT_ERROR
63+ COMPILER_FLAGS += $(LOG_FLAGS )
64+
65+ EXTERNAL_LIBS += -L$(CPPUTEST_BUILD_LIB )
66+
67+ # IoT client directory
68+ PLATFORM_COMMON_DIR = $(PLATFORM_DIR ) /common
69+
70+ IOT_INCLUDE_DIRS = -I $(PLATFORM_COMMON_DIR )
71+ IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR ) /include
72+ IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR ) /external_libs/jsmn
73+
74+ IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR ) / -name '* .c')
75+ IOT_SRC_FILES += $(shell find $(IOT_CLIENT_DIR ) /src/ -name '* .c')
76+ IOT_SRC_FILES += $(shell find $(IOT_CLIENT_DIR ) /external_libs/jsmn/ -name '* .c')
77+
78+ # Aggregate all include and src directories
79+ INCLUDE_DIRS += $(IOT_INCLUDE_DIRS )
80+ INCLUDE_DIRS += $(APP_INCLUDE_DIRS )
81+ INCLUDE_DIRS += $(TLS_INCLUDE_DIR )
82+ INCLUDE_DIRS += $(CPPUTEST_INCLUDE )
83+
84+ TEST_SRC_DIRS = $(APP_DIR ) /src
85+
86+ SRC_FILES += $(APP_SRC_FILES )
87+ SRC_FILES += $(IOT_SRC_FILES )
88+
89+ COMPILER_FLAGS += -g
90+ COMPILER_FLAGS += $(LOG_FLAGS )
91+ PRE_MAKE_CMDS = cd $(CPPUTEST_DIR ) &&
92+ PRE_MAKE_CMDS += cmake CMakeLists.txt &&
93+ PRE_MAKE_CMDS += make &&
94+ PRE_MAKE_CMDS += cd - &&
95+ PRE_MAKE_CMDS += pwd &&
96+ PRE_MAKE_CMDS += cp -f $(CPPUTEST_DIR ) /src/CppUTest/libCppUTest.a $(CPPUTEST_DIR ) /libCppUTest.a &&
97+ PRE_MAKE_CMDS += cp -f $(CPPUTEST_DIR ) /src/CppUTestExt/libCppUTestExt.a $(CPPUTEST_DIR ) /libCppUTestExt.a
98+
99+ # Using TLS Mock for running Unit Tests
100+ MOCKS_SRC += $(APP_DIR ) /tls_mock/aws_iot_tests_unit_mock_tls_params.c
101+ MOCKS_SRC += $(APP_DIR ) /tls_mock/aws_iot_tests_unit_mock_tls.c
102+
103+ ISYSTEM_HEADERS += $(IOT_ISYSTEM_HEADERS )
104+ CPPUTEST_CPPFLAGS += $(ISYSTEM_HEADERS )
105+ CPPUTEST_CPPFLAGS += $(LOG_FLAGS )
106+
107+ LCOV_EXCLUDE_PATTERN = "tests/unit/*"
108+ LCOV_EXCLUDE_PATTERN += "tests/integration/*"
109+ LCOV_EXCLUDE_PATTERN += "external_libs/*"
110+
111+ # use this section for running a specific group of tests, comment this to run all
112+ # ONLY FOR TESTING PURPOSE
113+ # COMMAND_LINE_ARGUMENTS += -g CommonTests
114+ # COMMAND_LINE_ARGUMENTS += -v
115+
116+ build-cpputest :
117+ $(PRE_MAKE_CMDS )
118+
119+ include CppUTestMakefileWorker.mk
120+
121+ .PHONY : run-unit-tests
122+ run-unit-tests : $(ALL_TARGETS )
123+ @echo $(ALL_TARGETS )
124+
125+ .PHONY : clean
126+ clean :
127+ $(MAKE ) -C $(CPPUTEST_DIR ) clean
128+ $(RM ) -rf build_output
129+ $(RM ) -rf gcov
130+ $(RM ) -rf objs
131+ $(RM ) -rf testLibs
0 commit comments