execve_hook/Makefile

154 lines
4.4 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 检测架构
ARCH ?= $(shell uname -m)
# 交叉编译工具链配置
ifeq ($(ARCH),arm64)
CC = aarch64-linux-gnu-gcc
TARGET_SUFFIX = _arm64
else ifeq ($(ARCH),aarch64)
CC = aarch64-linux-gnu-gcc
TARGET_SUFFIX = _arm64
ARCH = arm64
else ifeq ($(ARCH),arm)
CC = arm-linux-gnueabihf-gcc
TARGET_SUFFIX = _arm
else ifeq ($(ARCH),x86_64)
CC = gcc
TARGET_SUFFIX = _x86_64
else
CC = gcc
TARGET_SUFFIX = _x86_64
endif
CFLAGS = -shared -fPIC -Wall -Wextra -Werror -fno-strict-aliasing -fPIC -fno-omit-frame-pointer -fno-stack-protector -Wl,-z,relro,-z,now
LDFLAGS = -ldl
TARGET_NAME = libbash_smart$(TARGET_SUFFIX).so
BUILD_DIR = build
SRC_DIR = src
TESTS_DIR = tests
SRC = $(wildcard $(SRC_DIR)/*.c)
OBJ = $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(SRC))
TARGET = $(BUILD_DIR)/$(TARGET_NAME)
# 测试客户端
TEST_CLIENT = $(BUILD_DIR)/test_client
TEST_CLIENT_SRC = $(TESTS_DIR)/test_client.c
TEST_CLIENT_DEPS = $(BUILD_DIR)/client.o $(BUILD_DIR)/socket_protocol.o $(BUILD_DIR)/debug.o
# 并发测试客户端
TEST_CONCURRENT_CLIENT = $(BUILD_DIR)/test_concurrent_client
TEST_CONCURRENT_CLIENT_SRC = $(TESTS_DIR)/test_concurrent_client.c
TEST_CONCURRENT_CLIENT_DEPS = $(BUILD_DIR)/client.o $(BUILD_DIR)/socket_protocol.o $(BUILD_DIR)/debug.o
# Socket通信测试客户端
TEST_SOCKET_CLIENT = $(BUILD_DIR)/test_socket_client
TEST_SOCKET_CLIENT_SRC = $(TESTS_DIR)/test_socket_client.c
TEST_SOCKET_CLIENT_DEPS = $(BUILD_DIR)/client.o $(BUILD_DIR)/socket_protocol.o $(BUILD_DIR)/debug.o
# 如果需要开启 debug只需执行 make DEBUG=1
ifeq ($(DEBUG),1)
CFLAGS += -DDEBUG -g
endif
# 如果需要开启 hook只需执行 make HOOK=1
ifeq ($(HOOK),1)
CFLAGS += -DHOOK
endif
# 如果跳过检查,只需执行 make NO_CONFIG_CHECK=1
ifeq ($(NO_CONFIG_CHECK),1)
CFLAGS += -DNO_CONFIG_CHECK
endif
.PHONY: all clean debug hook rebuild pre_build test_client test_concurrent_client test_socket_client arm64 arm install-cross-tools
all: pre_build $(TARGET)
# 快捷方式:交叉编译到 ARM64
arm64:
$(MAKE) ARCH=arm64
# 快捷方式:交叉编译到 ARM32
arm:
$(MAKE) ARCH=arm
# 安装交叉编译工具链
install-cross-tools:
@echo "安装 ARM 交叉编译工具链..."
@if ! command -v aarch64-linux-gnu-gcc > /dev/null 2>&1; then \
echo "正在安装 gcc-aarch64-linux-gnu..."; \
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu || \
(echo "安装失败,尝试不更新源..." && sudo apt-get install -y --no-update gcc-aarch64-linux-gnu g++-aarch64-linux-gnu); \
else \
echo "aarch64-linux-gnu-gcc 已安装"; \
fi
@if ! command -v arm-linux-gnueabihf-gcc > /dev/null 2>&1; then \
echo "正在安装 gcc-arm-linux-gnueabihf..."; \
sudo apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf || \
(echo "安装失败,尝试不更新源..." && sudo apt-get install -y --no-update gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf); \
else \
echo "arm-linux-gnueabihf-gcc 已安装"; \
fi
@echo "交叉编译工具链安装完成!"
test_client: pre_build $(TEST_CLIENT)
test_concurrent_client: pre_build $(TEST_CONCURRENT_CLIENT)
test_socket_client: pre_build $(TEST_SOCKET_CLIENT)
pre_build:
@echo "=========================================="
@echo "编译配置:"
@echo " 架构: $(ARCH)"
@echo " 编译器: $(CC)"
@echo " 目标文件: $(TARGET_NAME)"
@echo "=========================================="
ifeq ($(DEBUG),1)
@echo "Building with debug flags..."
endif
ifeq ($(HOOK),1)
@echo "Building with hook flags..."
endif
ifeq ($(NO_CONFIG_CHECK),1)
@echo "Building with NO_CONFIG_CHECK defined..."
endif
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) -c $< -o $@
$(TARGET): $(OBJ)
@mkdir -p $(BUILD_DIR)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
@rm -f $(OBJ)
$(TEST_CLIENT): $(TEST_CLIENT_SRC) $(TEST_CLIENT_DEPS)
@mkdir -p $(BUILD_DIR)
$(CC) -Wall -Wextra -pthread -o $@ $(TEST_CLIENT_SRC) $(TEST_CLIENT_DEPS)
$(TEST_CONCURRENT_CLIENT): $(TEST_CONCURRENT_CLIENT_SRC) $(TEST_CONCURRENT_CLIENT_DEPS)
@mkdir -p $(BUILD_DIR)
$(CC) -Wall -Wextra -pthread -o $@ $(TEST_CONCURRENT_CLIENT_SRC) $(TEST_CONCURRENT_CLIENT_DEPS)
$(TEST_SOCKET_CLIENT): $(TEST_SOCKET_CLIENT_SRC) $(TEST_SOCKET_CLIENT_DEPS)
@mkdir -p $(BUILD_DIR)
$(CC) -Wall -Wextra -pthread -o $@ $(TEST_SOCKET_CLIENT_SRC) $(TEST_SOCKET_CLIENT_DEPS)
clean:
rm -rf $(BUILD_DIR)
debug:
rm -rf $(BUILD_DIR)
$(MAKE) DEBUG=1
hook:
rm -rf $(BUILD_DIR)
$(MAKE) HOOK=1
rebuild: clean all