-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMakefile
More file actions
197 lines (155 loc) · 7.98 KB
/
Makefile
File metadata and controls
197 lines (155 loc) · 7.98 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
CROSS_COMPILE ?=
OPTEE_DIR ?=
CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)ar
MODE ?= optimize
CFLAGS_COMMON = -I$(INCLUDE_DIR) -I$(MBEDTLS_DIR)/include -I$(MIRACL_BUILD_DIR) -Wall -Wextra -Wpedantic -Wshadow -Wconversion \
-Wstrict-prototypes -Wmissing-prototypes -Wformat=2 -Wpointer-arith \
-Wcast-align -std=c11 -Wno-maybe-uninitialized
# Debug mode flags
DEBUG_FLAGS = -g -O0 -DDEBUG
# Optimization mode flags
OPTIMIZE_FLAGS = -O3 #-Ofast -funroll-loops -finline-functions -march=native \
-mtune=native -fgraphite-identity -floop-nest-optimize \
-fomit-frame-pointer -ffunction-sections -fdata-sections
ifeq ($(OPTEE), 1)
LIBUTEE_INCLUDE_DIR = $(OPTEE_DIR)/optee_os/lib/libutee/include
LIBUTILS_INCLUDE_DIR = $(OPTEE_DIR)/optee_os/lib/libutils/ext/include/
LIBUTEE_LIB_DIR = $(OPTEE_DIR)/optee_os/out/arm/export-ta_arm64/lib/libutee.a
CFLAGS_COMMON += -I$(LIBUTEE_INCLUDE_DIR) -I$(LIBUTILS_INCLUDE_DIR)
LDFLAGS += -l$(LIBUTEE_LIB_DIR)
CFLAGS_COMMON += -DOPTEE
endif
# Set CFLAGS based on MODE
ifeq ($(MODE),debug)
CFLAGS = $(CFLAGS_COMMON) $(DEBUG_FLAGS)
else ifeq ($(MODE),optimize)
CFLAGS = $(CFLAGS_COMMON) $(OPTIMIZE_FLAGS)
endif
# Directories
SRC_DIR = src
INCLUDE_DIR = include
BUILD_DIR = build
TEST_DIR = test
# Library output
STATIC_LIB = $(BUILD_DIR)/libUBI.a
# Source and object files
SRC_FILES = $(wildcard $(SRC_DIR)/*.c)
OBJ_FILES = $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRC_FILES))
# Test source files and binaries
TEST_FILES = $(wildcard $(TEST_DIR)/*.c)
TEST_BINS = $(patsubst $(TEST_DIR)/%.c, $(BUILD_DIR)/%, $(TEST_FILES))
# Installation directories
INSTALL_LIB_DIR = /usr/local/lib
INSTALL_INCLUDE_DIR = /usr/local/include
# Define the major mbed version we want
MBEDTLS_MAJOR_VERSION := 3.6
# Use GitHub API to find the latest mbed 3.6.x version
LATEST_VERSION_CMD := curl -s https://api.github.com/repos/Mbed-TLS/mbedtls/tags | grep -oP "\"name\": \"v$(MBEDTLS_MAJOR_VERSION)\.\d+\"" | head -1 | grep -oP "$(MBEDTLS_MAJOR_VERSION)\.\d+"
MBEDTLS_VERSION := $(shell $(LATEST_VERSION_CMD))
# Define mbed build paths
MBEDTLS_DIR := $(BUILD_DIR)/mbedtls-$(MBEDTLS_VERSION)
MBEDTLS_NAME := mbedtls-$(MBEDTLS_VERSION)
MBEDTLS_TAR := $(MBEDTLS_NAME).tar.bz2
MBEDTLS_URL := https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-$(MBEDTLS_VERSION)/$(MBEDTLS_NAME).tar.bz2
MBEDTLS_SHA_URL := https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-$(MBEDTLS_VERSION)/$(MBEDTLS_NAME)-sha256sum.txt
MIRACL_DIR := $(BUILD_DIR)/miracl-core
MIRACL_REPO := https://github.com/miracl/core.git
# System bitness detection
BITNESS := $(shell getconf LONG_BIT)
# Directories
MIRACL_BUILD_DIR := $(MIRACL_DIR)/c
# Check if any existing mbedtls 3.6.x directory exists
EXISTING_DIR := $(shell find . -maxdepth 2 -type d -name "mbedtls-$(MBEDTLS_MAJOR_VERSION).*")
# External libraries to link
LDFLAGS = -L$(MBEDTLS_DIR)/library -lmbedtls -lmbedcrypto -L$(MIRACL_BUILD_DIR) -l:core.a
ifeq ($(OPTEE), 1)
LDFLAGS += -l$(LIBUTEE_LIB_DIR)
endif
.PHONY: all clean
# Targets
all: print-art $(BUILD_DIR) $(MBEDTLS_DIR)/Makefile miracl lib
$(MIRACL_DIR):
@echo "Cloning MIRACL Core repository..."
@{ \
git clone --depth 1 $(MIRACL_REPO) $(MIRACL_DIR); \
}
$(MBEDTLS_DIR)/Makefile: $(MBEDTLS_DIR)
@if [ -z "$(CROSS_COMPILE)" ]; then \
$(MAKE) -C $(MBEDTLS_DIR) CROSS_COMPILE="$(CROSS_COMPILE)" CC="$(CROSS_COMPILE)gcc" AR="$(CROSS_COMPILE)ar" > /dev/null; \
else \
$(MAKE) -C $(MBEDTLS_DIR) CROSS_COMPILE="$(CROSS_COMPILE)" CC="$(CROSS_COMPILE)gcc" AR="$(CROSS_COMPILE)ar" no_test > /dev/null; \
fi
# Download the latest mbedtls version if it doesn't already exist
$(MBEDTLS_DIR):
@{ \
if [ -n "$(EXISTING_DIR)" ] && [ "$(EXISTING_DIR)" != "./$(MBEDTLS_DIR)" ]; then \
echo "Found an outdated mbedtls directory: $(EXISTING_DIR). Removing it..."; \
rm -rf $(EXISTING_DIR); \
fi; \
echo "Downloading mbedtls $(MBEDTLS_VERSION)..."; \
wget -O "$(MBEDTLS_TAR)" "$(MBEDTLS_URL)"; \
echo "Extracting mbedtls..."; \
tar -xjvf "$(MBEDTLS_TAR)" -C $(BUILD_DIR); \
rm "$(MBEDTLS_TAR)"; \
}
# > /dev/null 2>&1
$(BUILD_DIR):
@mkdir -p $(BUILD_DIR)
miracl: $(MIRACL_DIR)
@if [ -f "$(MIRACL_BUILD_DIR)/core.a" ]; then \
echo "MIRACL Core is already built. Skipping build..."; \
else \
echo "Building MIRACL Core for $(BITNESS)-bit system..."; \
{ \
cd $(MIRACL_BUILD_DIR); \
CC=$(CROSS_COMPILE)gcc python3 config$(BITNESS).py test; \
}; \
fi
lib: $(OBJ_FILES)
$(AR) rcs $(STATIC_LIB) $(OBJ_FILES)
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%: $(TEST_DIR)/%.c $(STATIC_LIB)
$(CC) $(CFLAGS) $< -o $@ -L$(BUILD_DIR) -lUBI $(LDFLAGS)
test: $(TEST_BINS)
print-art:
@echo ""
@echo "UUUUUUUU UUUUUUUUBBBBBBBBBBBBBBBBB IIIIIIIIIITTTTTTTTTTTTTTTTTTTTTTTRRRRRRRRRRRRRRRRR UUUUUUUU UUUUUUUU SSSSSSSSSSSSSSS TTTTTTTTTTTTTTTTTTTTTTT"
@echo "U::::::U U::::::UB::::::::::::::::B I::::::::IT:::::::::::::::::::::TR::::::::::::::::R U::::::U U::::::U SS:::::::::::::::ST:::::::::::::::::::::T"
@echo "U::::::U U::::::UB::::::BBBBBB:::::B I::::::::IT:::::::::::::::::::::TR::::::RRRRRR:::::R U::::::U U::::::US:::::SSSSSS::::::ST:::::::::::::::::::::T"
@echo "UU:::::U U:::::UUBB:::::B B:::::BII::::::IIT:::::TT:::::::TT:::::TRR:::::R R:::::RUU:::::U U:::::UUS:::::S SSSSSSST:::::TT:::::::TT:::::T"
@echo " U:::::U U:::::U B::::B B:::::B I::::I TTTTTT T:::::T TTTTTT R::::R R:::::R U:::::U U:::::U S:::::S TTTTTT T:::::T TTTTTT"
@echo " U:::::D D:::::U B::::B B:::::B I::::I T:::::T R::::R R:::::R U:::::D D:::::U S:::::S T:::::T "
@echo " U:::::D D:::::U B::::BBBBBB:::::B I::::I T:::::T R::::RRRRRR:::::R U:::::D D:::::U S::::SSSS T:::::T "
@echo " U:::::D D:::::U B:::::::::::::BB I::::I T:::::T R:::::::::::::RR U:::::D D:::::U SS::::::SSSSS T:::::T "
@echo " U:::::D D:::::U B::::BBBBBB:::::B I::::I T:::::T R::::RRRRRR:::::R U:::::D D:::::U SSS::::::::SS T:::::T "
@echo " U:::::D D:::::U B::::B B:::::B I::::I T:::::T R::::R R:::::R U:::::D D:::::U SSSSSS::::S T:::::T "
@echo " U:::::D D:::::U B::::B B:::::B I::::I T:::::T R::::R R:::::R U:::::D D:::::U S:::::S T:::::T "
@echo " U::::::U U::::::U B::::B B:::::B I::::I T:::::T R::::R R:::::R U::::::U U::::::U S:::::S T:::::T "
@echo " U:::::::UUU:::::::U BB:::::BBBBBB::::::BII::::::II TT:::::::TT RR:::::R R:::::R U:::::::UUU:::::::U SSSSSSS S:::::S TT:::::::TT "
@echo " UU:::::::::::::UU B:::::::::::::::::B I::::::::I T:::::::::T R::::::R R:::::R UU:::::::::::::UU S::::::SSSSSS:::::S T:::::::::T "
@echo " UU:::::::::UU B::::::::::::::::B I::::::::I T:::::::::T R::::::R R:::::R UU:::::::::UU S:::::::::::::::SS T:::::::::T "
@echo " UUUUUUUUU BBBBBBBBBBBBBBBBB IIIIIIIIII TTTTTTTTTTT RRRRRRRR RRRRRRR UUUUUUUUU SSSSSSSSSSSSSSS TTTTTTTTTTT "
@echo ""
install: lib
cp $(STATIC_LIB) $(INSTALL_LIB_DIR)/
mkdir -p $(INSTALL_INCLUDE_DIR)/ubi_common
mkdir -p $(INSTALL_INCLUDE_DIR)/ubi_crypt
cp $(INCLUDE_DIR)/ubi_common/* $(INSTALL_INCLUDE_DIR)/ubi_common/
cp $(INCLUDE_DIR)/ubi_crypt/* $(INSTALL_INCLUDE_DIR)/ubi_crypt/
uninstall:
rm -f $(INSTALL_LIB_DIR)/$(notdir $(STATIC_LIB))
rm -rf $(INSTALL_INCLUDE_DIR)
# If the test flag is set, include the test target in all
ifeq ($(BUILD_TEST),1)
all: test
endif
clean:
ifeq ($(CLEAN_MBEDTLS),1)
@echo "Cleaning mbedtls-related files..."
rm -rf $(MBEDTLS_DIR) $(MBEDTLS_TAR) $(MBEDTLS_NAME)-sha256sum.txt
else
@echo "Cleaning general build artifacts..."
rm -rf $(BUILD_DIR) valgrind_logs
endif