85 lines
2.6 KiB
Makefile
85 lines
2.6 KiB
Makefile
# 默认本机编译器(可由环境变量覆盖,例如 CC=clang)。
|
||
CC ?= gcc
|
||
# ARM 交叉编译工具链前缀(可按本地环境替换)。
|
||
CROSS_COMPILE ?= arm-linux-gnueabihf-
|
||
ARM_CC ?= $(CROSS_COMPILE)gcc
|
||
ARM64_CC ?= aarch64-linux-gnu-gcc
|
||
|
||
# 产物目录(native: build/,arm: build/arm/)。
|
||
BUILD_DIR ?= build
|
||
|
||
# 编译参数:
|
||
# - CFLAGS: 优化级别、调试符号、告警、C 标准
|
||
# - CPPFLAGS: POSIX 特性宏,确保 clock_gettime 等接口可见
|
||
CFLAGS ?= -O2 -g -Wall -Wextra -std=c11
|
||
CPPFLAGS ?= -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200809L
|
||
LDFLAGS ?=
|
||
# 链接 pthread。
|
||
LDLIBS ?= -lpthread
|
||
INCLUDES := -Iinclude
|
||
|
||
# hub / peer / bridge 共用的核心源码。
|
||
PEER_STACK_SRCS := \
|
||
src/core/logger.c \
|
||
src/core/peer_transport.c \
|
||
src/protocols/ikcp.c
|
||
|
||
# 当前保留的应用入口源文件。
|
||
APP_HUB_SRC := src/apps/hub_main.c
|
||
APP_PEER_SRC := src/apps/peer_main.c
|
||
APP_BRIDGE_SRC := src/apps/bridge_main.c
|
||
|
||
# 将源文件映射到 BUILD_DIR 下的对象文件路径。
|
||
PEER_STACK_OBJS := $(patsubst %.c,$(BUILD_DIR)/%.o,$(PEER_STACK_SRCS))
|
||
HUB_OBJ := $(patsubst %.c,$(BUILD_DIR)/%.o,$(APP_HUB_SRC))
|
||
PEER_OBJ := $(patsubst %.c,$(BUILD_DIR)/%.o,$(APP_PEER_SRC))
|
||
BRIDGE_OBJ := $(patsubst %.c,$(BUILD_DIR)/%.o,$(APP_BRIDGE_SRC))
|
||
|
||
# 默认构建目标:仅保留 hub / peer / bridge。
|
||
TARGETS := \
|
||
$(BUILD_DIR)/omni_hub \
|
||
$(BUILD_DIR)/omni_peer \
|
||
$(BUILD_DIR)/omni_bridge
|
||
|
||
.PHONY: all arm arm64 clean help
|
||
|
||
# 本机构建入口。
|
||
all: $(TARGETS)
|
||
|
||
# 各可执行程序链接规则。
|
||
$(BUILD_DIR)/omni_hub: $(PEER_STACK_OBJS) $(HUB_OBJ)
|
||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
|
||
|
||
$(BUILD_DIR)/omni_peer: $(PEER_STACK_OBJS) $(PEER_OBJ)
|
||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
|
||
|
||
$(BUILD_DIR)/omni_bridge: $(PEER_STACK_OBJS) $(BRIDGE_OBJ)
|
||
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
|
||
|
||
# 通用编译规则:
|
||
# - 自动创建对象文件所在目录
|
||
# - 编译单个 .c 为 .o
|
||
$(BUILD_DIR)/%.o: %.c
|
||
@mkdir -p $(dir $@)
|
||
$(CC) $(CPPFLAGS) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
||
|
||
# ARM 构建入口:通过子 make 覆盖 BUILD_DIR 与 CC。
|
||
arm:
|
||
$(MAKE) BUILD_DIR=build/arm CC=$(ARM_CC) all
|
||
|
||
# ARM64 构建入口:适合大多数 Jetson 设备。
|
||
arm64:
|
||
$(MAKE) BUILD_DIR=build/arm64 CC=$(ARM64_CC) all
|
||
|
||
# 清理构建目录。
|
||
clean:
|
||
rm -rf build
|
||
|
||
# 便捷帮助信息。
|
||
help:
|
||
@echo "make -> build native binaries in build/"
|
||
@echo "make arm -> build ARM binaries in build/arm (arm-linux-gnueabihf-gcc)"
|
||
@echo "make arm64 -> build ARM64 binaries in build/arm64 (aarch64-linux-gnu-gcc)"
|
||
@echo "generated binaries: omni_hub omni_peer omni_bridge"
|
||
@echo "make clean -> remove build artifacts"
|