-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathMakefile
More file actions
112 lines (81 loc) · 2.47 KB
/
Makefile
File metadata and controls
112 lines (81 loc) · 2.47 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
# PkgConfig
# ------------------------------
PKG_CONF = pkg-config
ifeq ($(shell which $(PKG_CONF)),)
$(error "Package config not found. Please install it on server.")
endif
# ------------------------------
# PkgConfig End
# Common
# ------------------------------
# Compiler (intended for Clang, lol)
CC = clang
# Directories.
BUILD_DIR := build
SRC_DIR := src
MODULES_DIR := modules
MAIN_OUT := pcktbatch
MAIN_SRC := main.c
SRC_DIR_COMMON = $(SRC_DIR)/common
COMMON_BUILD_DIR = $(BUILD_DIR)/common
# Sources and objects
COMMON_SRCS := $(wildcard $(SRC_DIR_COMMON)/*.c)
COMMON_OBJS := $(patsubst $(SRC_DIR_COMMON)/%.c,$(COMMON_BUILD_DIR)/%.o,$(COMMON_SRCS))
# Flags
GLOBAL_FLAGS := -O2 -g
MAIN_FLAGS := -pthread -lelf -lz
INCS := -I $(SRC_DIR) -I $(MODULES_DIR)/libbpf/src
# ------------------------------
# Common End
# Tech
# ------------------------------
TECH_SRC_DIR = $(SRC_DIR)/tech
TECH_BUILD_DIR = $(BUILD_DIR)/tech
TECH_SRCS := $(shell find $(TECH_SRC_DIR) -name '*.c')
TECH_OBJS := $(patsubst $(TECH_SRC_DIR)/%.c,$(TECH_BUILD_DIR)/%.o,$(TECH_SRCS))
# ------------------------------
# Tech End
# LibBPF
# ------------------------------
# Directories.
LIBBPF_DIR := $(MODULES_DIR)/libbpf
LIBBPF_SRC_DIR := $(LIBBPF_DIR)/src
# Objects.
LIBBPF_OBJS_DIR := $(LIBBPF_SRC_DIR)/staticobjs
LIBBPF_OBJS = $(addprefix $(LIBBPF_OBJS_DIR)/, $(notdir $(wildcard $(LIBBPF_OBJS_DIR)/*.o)))
# ------------------------------
# LibBPF End
# JSON-C
# ------------------------------
JSONC_DIR := $(MODULES_DIR)/json-c
# ------------------------------
# JSON-C End
# Chains
# ------------------------------
all: main
jsonc:
@mkdir -p $(JSONC_DIR)/build
cd $(JSONC_DIR)/build && cmake ../
jsonc_install:
cd $(JSONC_DIR)/build && make && make install
libbpf:
$(MAKE) -C $(LIBBPF_SRC_DIR)
$(COMMON_BUILD_DIR)/%.o: $(SRC_DIR_COMMON)/%.c
@mkdir -p $(dir $@)
$(CC) $(GLOBAL_FLAGS) $(INCS) -c $< -o $@
$(TECH_BUILD_DIR)/%.o: $(TECH_SRC_DIR)/%.c
@mkdir -p $(dir $@)
$(CC) $(GLOBAL_FLAGS) $(INCS) -c $< -o $@
main: $(COMMON_OBJS) $(TECH_OBJS) libbpf
@mkdir -p $(BUILD_DIR)
$(CC) $(INCS) $(GLOBAL_FLAGS) $(MAIN_FLAGS) -o $(BUILD_DIR)/$(MAIN_OUT) $(shell $(PKG_CONF) --libs json-c) $(LIBBPF_OBJS) $(COMMON_OBJS) $(TECH_OBJS) $(SRC_DIR)/$(MAIN_SRC)
clean:
$(MAKE) -C $(LIBBPF_SRC_DIR)/ clean
$(MAKE) -C $(JSONC_DIR)/build clean
rm -rf $(BUILD_DIR)
install:
cp -f $(BUILD_DIR)/$(MAIN_OUT) /usr/bin/$(MAIN_OUT)
.PHONY: all libbpf clean install
.DEFAULT: all
# ------------------------------
# Chains End