-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
72 lines (55 loc) · 2.02 KB
/
Copy pathMakefile
File metadata and controls
72 lines (55 loc) · 2.02 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
# Compiler and flags
CXX = g++
CXXFLAGS = -std=c++17 `pkg-config --cflags opencv4` -I/usr/local/include -I/usr/local/cuda/include -I/usr/local/cuda/samples/common/inc -Isrc -Iinclude
# Libraries
LDFLAGS = -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_video -lopencv_videoio -L/usr/local/cuda/lib64 -L/usr/local/lib -lonnxruntime -lcudart -lnppicc -lnppig -lnppial -lnppidei -lnppist -lgtest -lgtest_main -lpthread -lstdc++
# Directories
SRC_DIR = src
OBJ_DIR = obj
BIN_DIR = bin
TEST_DIR = tests
# Source files
SRCS = $(SRC_DIR)/main.cpp \
$(SRC_DIR)/nms.cpp \
$(SRC_DIR)/preprocess.cpp \
$(SRC_DIR)/inference.cpp \
$(SRC_DIR)/postprocess.cpp \
$(SRC_DIR)/util.cpp
# Object files
OBJS = $(SRCS:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
# Test source files
TEST_SRCS = $(TEST_DIR)/test_nms.cpp \
$(TEST_DIR)/test_preprocess.cpp \
$(TEST_DIR)/test_util.cpp
# Test object files
TEST_OBJS = $(TEST_SRCS:$(TEST_DIR)/%.cpp=$(OBJ_DIR)/%.o)
# Target executable for main application
TARGET = $(BIN_DIR)/cudacatify
# Test executable
TEST_TARGET = $(BIN_DIR)/test_cudacatify
# Default target
all: $(TARGET)
# Ensure output directories exist
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
$(BIN_DIR):
mkdir -p $(BIN_DIR)
# Linking the final executable for main application
$(TARGET): $(OBJS) | $(BIN_DIR)
$(CXX) $(OBJS) -o $(TARGET) $(LDFLAGS)
# Linking the test executable
$(TEST_TARGET): $(TEST_OBJS) $(filter-out $(OBJ_DIR)/main.o, $(OBJS)) | $(BIN_DIR)
$(CXX) -DUNIT_TEST $(TEST_OBJS) $(filter-out $(OBJ_DIR)/main.o, $(OBJS)) -o $(TEST_TARGET) $(LDFLAGS)
# Rule to compile each source file into an object file
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR)
$(CXX) -c $< -o $@ $(CXXFLAGS)
# Rule to compile each test file into an object file
$(OBJ_DIR)/test_%.o: $(TEST_DIR)/test_%.cpp | $(OBJ_DIR)
$(CXX) -c $< -o $@ $(CXXFLAGS)
# Clean build artifacts
clean:
rm -f $(OBJ_DIR)/*.o $(TARGET) $(TEST_TARGET)
# Run unit tests
test: $(TEST_TARGET)
./$(TEST_TARGET)
rm -f $(TEST_TARGET)