-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
71 lines (54 loc) · 2.2 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Project settings
TEST_TARGET = run_tests
MAKEFILE_DIR = $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
PROJECT_DIR = $(MAKEFILE_DIR)
SRC_DIR = $(PROJECT_DIR)src
INC_DIR = $(PROJECT_DIR)inc
TEST_DIR = $(PROJECT_DIR)test
TEST_INC_DIR = $(TEST_DIR)/inc
MOCK_DIR = $(TEST_DIR)/mocks
HOST_UTILS_DIR = $(PROJECT_DIR)utils/host
BUILD_DIR = $(PROJECT_DIR)build
CPPUTEST_HOME = /usr
# Compiler and flags
CC = gcc
CXX = g++
COMMON_FLAGS = -Wall -g -pedantic -Werror -I$(INC_DIR) -I$(TEST_INC_DIR) -I$(CPPUTEST_HOME)/include -I$(MOCK_DIR) -DVOYAGER_UNIT_TEST -DVOYAGER_BOOTLOADER_MAX_RECEIVE_PACKET_SIZE=64 -I$(HOST_UTILS_DIR)
CFLAGS = $(COMMON_FLAGS) --std=c99
CXXFLAGS = $(COMMON_FLAGS) --std=c++20
LDFLAGS = -L$(CPPUTEST_HOME)/lib -lCppUTest -lCppUTestExt
# Source files
C_SRCS = $(wildcard $(SRC_DIR)/*.c)
CPP_SRCS = $(wildcard $(SRC_DIR)/*.cpp)
C_OBJS = $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(filter %.c, $(C_SRCS)))
CPP_OBJS = $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(filter %.cpp, $(CPP_SRCS)))
# Test source files
C_TEST_SRCS = $(wildcard $(TEST_DIR)/*.c)
CPP_TEST_SRCS = $(wildcard $(TEST_DIR)/*.cpp)
C_TEST_OBJS = $(patsubst $(TEST_DIR)/%.c,$(BUILD_DIR)/%.o,$(filter %.c, $(C_TEST_SRCS)))
CPP_TEST_OBJS = $(patsubst $(TEST_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(filter %.cpp, $(CPP_TEST_SRCS)))
# Mock source files
MOCK_SRCS = $(wildcard $(MOCK_DIR)/*.c) $(wildcard $(MOCK_DIR)/*.cpp)
MOCK_OBJS = $(patsubst $(MOCK_DIR)/%.c,$(BUILD_DIR)/%.o,$(filter %.c, $(MOCK_SRCS))) \
$(patsubst $(MOCK_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(filter %.cpp, $(MOCK_SRCS)))
# Create build directory
$(shell mkdir -p $(BUILD_DIR))
# Target
all: $(BUILD_DIR)/$(TEST_TARGET)
$(BUILD_DIR)/$(TEST_TARGET): $(C_TEST_OBJS) $(CPP_TEST_OBJS) $(C_OBJS) $(CPP_OBJS) $(MOCK_OBJS)
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: $(TEST_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: $(TEST_DIR)/%.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: $(MOCK_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.o: $(MOCK_DIR)/%.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -rf $(BUILD_DIR)
.PHONY: all clean