-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathmakefile
More file actions
138 lines (116 loc) · 4.14 KB
/
makefile
File metadata and controls
138 lines (116 loc) · 4.14 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
# ---------------------------------------------------------------------------
# Build configuration
#
# Variant is selected via two variables; callers usually go through the
# legacy target aliases at the bottom of this file.
#
# CRYPTO = wolfssl | openssl (default: wolfssl)
# OUT = exec | lib (default: exec)
#
# Optional flavors (set to any non-empty value, e.g. pi=1):
# qa -> defines __QATESTING__
# pi -> adds -Wno-format and selects Pi engine paths when tpm is on
# tpm -> defines __TPM__ and links -ltpm2tss
# ---------------------------------------------------------------------------
CC ?= gcc
CSTD ?= -std=gnu99
CRYPTO ?= wolfssl
OUT ?= exec
DEBUG_FLAGS ?= -g0 -O0
BUILD_DIR := build/$(CRYPTO)-$(OUT)
# ---- Global flags (standard make variables) ----
CPPFLAGS += -I. -D_POSIX_C_SOURCE=200809L -D__RUN_CHAIN_JOBS__
CFLAGS += $(CSTD) -fPIC \
-Wall -Wextra -Wvla -Wshadow -Werror -pedantic \
-fno-strict-aliasing \
-Wno-unused-parameter -Wno-missing-field-initializers \
-Wno-missing-braces -Wno-unused-variable \
-Wno-unused-but-set-variable -Wno-unused-label \
-Wno-unused-function -Wno-pointer-sign \
-Wno-deprecated-declarations -Wno-ignored-qualifiers \
-MMD -MP \
$(DEBUG_FLAGS)
LDFLAGS +=
LDLIBS +=
# ---- Per-crypto configuration ----
ifeq ($(CRYPTO),wolfssl)
CPPFLAGS += -D__WOLF_SSL__ -D_XOPEN_SOURCE=600 \
-I/usr/local/include/wolfssl -I/usr/local/include/curl
LDFLAGS += -L/usr/local/lib -no-pie
LDLIBS += -lcurl -lwolfssl
WRAPPER_SRC := $(wildcard wolfssl_wrapper/*.c)
else ifeq ($(CRYPTO),openssl)
CPPFLAGS += -D__OPEN_SSL__ -I/usr/local/include/curl
LDFLAGS += -L/usr/local/lib
LDLIBS += -lcrypto -lcurl
WRAPPER_SRC := $(wildcard openssl_wrapper/*.c)
else
$(error CRYPTO must be 'wolfssl' or 'openssl', got '$(CRYPTO)')
endif
# ---- Output type ----
ifeq ($(OUT),lib)
CPPFLAGS += -D__MAKE_LIBRARY__
LDFLAGS += -shared
ARTIFACT := libagent.so
else ifeq ($(OUT),exec)
ARTIFACT := agent
else
$(error OUT must be 'exec' or 'lib', got '$(OUT)')
endif
# ---- Optional flavors ----
ifdef qa
CPPFLAGS += -D__QATESTING__
endif
ifdef pi
CFLAGS += -Wno-format
endif
ifdef tpm
CPPFLAGS += -D__TPM__
LDLIBS += -ltpm2tss
ifdef pi
LDFLAGS += -L/usr/lib/arm-linux-gnueabihf/engines-1.1/ \
-L/usr/lib/arm-linux-gnueabihf/engines-3/
else
LDFLAGS += -L/usr/lib/x86_64-linux-gnu/engines-1.1/
endif
endif
# ---- Sources / objects / deps ----
SRC := $(wildcard *.c) $(wildcard lib/*.c) $(WRAPPER_SRC)
OBJS := $(SRC:%.c=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
# ---- Rules ----
.PHONY: all clean install
all: $(ARTIFACT)
$(ARTIFACT): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
$(BUILD_DIR)/%.o: %.c
@mkdir -p $(dir $@)
$(info building $@ from $<)
@$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
-include $(DEPS)
clean:
rm -rf build agent libagent.so
install: $(ARTIFACT)
ifneq ($(OUT),lib)
$(error 'install' requires OUT=lib; try 'make wolfinstall' or 'make openinstall')
endif
sudo install -m 0755 libagent.so /usr/lib/libagent.so
# ---------------------------------------------------------------------------
# Legacy target aliases — preserve existing muscle memory and CI contracts.
# ---------------------------------------------------------------------------
.PHONY: wolftest wolflib wolfpi wolfinstall \
opentest openlib openpi openinstall \
qatesting qawolftesting rpi9670test \
cleanall deleteallobs
wolftest: ; $(MAKE) CRYPTO=wolfssl OUT=exec
wolflib: ; $(MAKE) CRYPTO=wolfssl OUT=lib
wolfpi: ; $(MAKE) CRYPTO=wolfssl OUT=exec pi=1
wolfinstall: ; $(MAKE) CRYPTO=wolfssl OUT=lib install
opentest: ; $(MAKE) CRYPTO=openssl OUT=exec
openlib: ; $(MAKE) CRYPTO=openssl OUT=lib
openpi: ; $(MAKE) CRYPTO=openssl OUT=exec pi=1
openinstall: ; $(MAKE) CRYPTO=openssl OUT=lib install
qatesting: ; $(MAKE) CRYPTO=openssl OUT=exec qa=1
qawolftesting: ; $(MAKE) CRYPTO=wolfssl OUT=exec qa=1
rpi9670test: ; $(MAKE) CRYPTO=openssl OUT=exec pi=1 tpm=1
cleanall deleteallobs: clean