-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
121 lines (91 loc) · 3.52 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
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
rwildcard = $(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2)) $(filter $(subst *,%,$(2)),$(d)))
OPT ?= release
ifeq ($(filter $(OPT),release debug),)
$(error invalid 'OPT' option - choose from {release/debug})
endif
PATCH_V4L ?= 1
USE_CAMERASERVER ?= 0
CROSS_PREFIX := aarch64-bullseye-linux-gnu-
CXX := g++
STD := c++20
SRC_DIR := src
OBJ_DIR := obj
OUT_DIR := out
VS_DIR := VisionServer/lib-vs
NAME := apriltag-vision
VISION := $(OUT_DIR)/$(NAME)
STREAMING := $(OUT_DIR)/$(NAME)-raw
VISIONSERVER := $(VS_DIR)/out/libvs3407.so
PACKAGE_DEPS := $(VS_DIR)/lib/libtensorflowlite.so $(VS_DIR)/lib/libedgetpu.so $(VISIONSERVER)
# SRCS := $(call rwildcard,$(SRC_DIR)/,*.cpp *.c *.S *.s)
VISION_SRCS := src/apriltag-vision.cpp
STREAMING_SRCS := src/streaming.cpp
VISION_OBJS := $(VISION_SRCS:$(SRC_DIR)/%=$(OBJ_DIR)/%.o)
STREAMING_OBJS := $(STREAMING_SRCS:$(SRC_DIR)/%=$(OBJ_DIR)/%.o)
DEFINES := -D"PATCH_LIFECAM_V4L_PROP_IDS=$(PATCH_V4L)" -D"ENABLE_CAMERASERVER=$(USE_CAMERASERVER)"
ifeq ($(OPT),release)
#release options for Compiling and Linking
COPTS := -O3 -D__RELEASE__ $(DEFINES)
LOPTS :=
else
#debug options for Compiling and Linking
COPTS := -g -Og -D__DEBUG__ $(DEFINES)
LOPTS := -g
endif
#preprocessor flags
CPPFLAGS := -pthread -I$(VS_DIR)/include -I$(VS_DIR)/src -I$(SRC_DIR)/libpixy/include \
-I$(VS_DIR)/additions -I$(VS_DIR)/include/opencv4 -MMD -MP
#compile flags
CFLAGS := -Wall -fpermissive
#flags for compiling assembly source
ASMFLAGS := -mcpu=cortex-a72 #-mfpu=neon-fp-armv8
#linker flags
LDFLAGS := -pthread -Wall -L$(VS_DIR)/out -L$(VS_DIR)/lib -L$(SRC_DIR)/libpixy/out \
-Wl,--unresolved-symbols=ignore-in-shared-libs -Wl,-rpath=$$ORIGIN
#libs to link against - see complete list in VisionServer/lib-vs/makefile
# LDLIBS := -ltensorflowlite -ledgetpu -lopencv_gapi \
# -lopencv_highgui -lopencv_ml -lopencv_objdetect \
# -lopencv_photo -lopencv_stitching -lopencv_video \
# -lopencv_calib3d -lopencv_features2d -lopencv_dnn \
# -lopencv_flann -lopencv_videoio -lopencv_imgcodecs \
# -lopencv_imgproc -lopencv_core -lvs3407 -lcameraserver \
# -lntcore -lcscore -lwpiutil -lwpimath -lwpilibc -lopencv_aruco -lpigpio
LDLIBS := -lcscore -lntcore -lwpiutil -lwpilibc -lopencv_core -lopencv_imgproc
LDLIBS_VPROC := -lapriltag -lwpimath -lopencv_objdetect -lopencv_calib3d -lvs3407
ifneq ($(USE_CAMERASERVER),0)
LDLIBS += -lcameraserver
endif
ifeq ($(OS),Windows_NT)
CXX := $(CROSS_PREFIX)$(CXX)
RM-R := del /s /Q
CP := copy
/ := \\
else
RM-R := rm -r
CP := cp
/ := /
endif
$(OBJ_DIR)/%.cpp.o : $(SRC_DIR)/%.cpp | $(OBJ_DIR)
$(CXX) $(COPTS) -c -o $(OBJ_DIR)/$(@F) -std=$(STD) $(CPPFLAGS) $(CFLAGS) $<
$(OBJ_DIR)/%.c.o : $(SRC_DIR)/%.c | $(OBJ_DIR)
$(CXX) $(COPTS) -c -o $(OBJ_DIR)/$(@F) -std=$(STD) $(CPPFLAGS) $(CFLAGS) $<
$(OBJ_DIR)/%.S.o : $(SRC_DIR)/%.S | $(OBJ_DIR)
$(CXX) $(COPTS) -c -o $(OBJ_DIR)/$(@F) -std=$(STD) $(ASMFLAGS) $(CPPFLAGS) $(CFLAGS) $<
$(OBJ_DIR)/%.s.o : $(SRC_DIR)/%.s | $(OBJ_DIR)
$(CXX) $(COPTS) -c -o $(OBJ_DIR)/$(@F) -std=$(STD) $(ASMFLAGS) $(CPPFLAGS) $(CFLAGS) $<
$(VISION): $(VISION_OBJS) | $(OUT_DIR)
$(CXX) $(LOPTS) -o $@ $(LDFLAGS) $(foreach file,$(^F),$(OBJ_DIR)/$(file)) $(LDLIBS) $(LDLIBS_VPROC)
$(STREAMING): $(STREAMING_OBJS) | $(OUT_DIR)
$(CXX) $(LOPTS) -o $@ $(LDFLAGS) $(foreach file,$(^F),$(OBJ_DIR)/$(file)) $(LDLIBS)
# $(VISIONSERVER):
# $(MAKE) -C $(VS_DIR)/lib-vs shared
$(OUT_DIR) $(OBJ_DIR):
mkdir $@
.PHONY: vision streaming clean rebuild
vision: $(VISION)
streaming: $(STREAMING)
clean:
$(RM-R) $(OBJ_DIR)
$(RM-R) $(OUT_DIR)
rebuild: build | clean
-include $(OBJS:.o=.d)