You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
6.6 KiB
171 lines
6.6 KiB
CC := gcc |
|
CFLAGS := -Os -std=c99 -Wall -Wextra -D_ISOC99_SOURCE -DENABLE_TESTS -DETCP_DEBUG -DETCP_DEBUG_EXT |
|
SRC_DIR := src |
|
TEST_DIR := tests |
|
INCLUDES := -I$(SRC_DIR) -Iu_async -Itinycrypt/lib/include/ -Itinycrypt/lib/source/ -Itinycrypt/tests/include/ -I. |
|
|
|
# Директории для объектных файлов |
|
OBJ_DIR := obj |
|
SRC_OBJ_DIR := $(OBJ_DIR)/src |
|
TEST_OBJ_DIR := $(OBJ_DIR)/tests |
|
|
|
# Исходники tinycrypt |
|
TINYCRYPT_SRCS := \ |
|
tinycrypt/lib/source/ecc.c \ |
|
tinycrypt/lib/source/ecc_dh.c \ |
|
tinycrypt/lib/source/ecc_platform_specific.c \ |
|
tinycrypt/lib/source/aes_encrypt.c \ |
|
tinycrypt/lib/source/aes_decrypt.c \ |
|
tinycrypt/lib/source/utils.c \ |
|
tinycrypt/lib/source/ctr_mode.c \ |
|
tinycrypt/lib/source/ccm_mode.c |
|
|
|
# Исходники u_async |
|
UASYNC_SRCS := \ |
|
u_async/u_async.c \ |
|
u_async/timeout_heap.c \ |
|
u_async/debug_config.c |
|
|
|
# Объектные файлы tinycrypt (остаются в своих директориях) |
|
TINYCRYPT_OBJS := $(TINYCRYPT_SRCS:.c=.o) |
|
|
|
# Основные объектные файлы (будут в obj/src/) |
|
SC_LIB_OBJS := $(SRC_OBJ_DIR)/secure_channel.o $(SRC_OBJ_DIR)/crc32.o |
|
UASYNC_OBJS := $(SRC_OBJ_DIR)/u_async.o $(SRC_OBJ_DIR)/timeout_heap.o $(OBJ_DIR)/u_async/debug_config.o |
|
PN_OBJS := $(SRC_OBJ_DIR)/pkt_normalizer.o |
|
LL_QUEUE_OBJS := $(SRC_OBJ_DIR)/ll_queue.o |
|
ETCP_OBJS := $(SRC_OBJ_DIR)/etcp.o $(SRC_OBJ_DIR)/etcp_connections.o $(SRC_OBJ_DIR)/crc32.o |
|
CONFIG_PARSER_OBJS := $(SRC_OBJ_DIR)/config_parser.o |
|
TUN_IF_OBJS := $(SRC_OBJ_DIR)/tun_if.o |
|
ROUTING_OBJS := $(SRC_OBJ_DIR)/routing.o |
|
CONTROL_SOCKET_OBJS := # REMOVED - control_socket removed |
|
UTUN_OBJS := $(SRC_OBJ_DIR)/utun.o $(SRC_OBJ_DIR)/utun_instance.o $(SRC_OBJ_DIR)/utun_fixes.o $(SRC_OBJ_DIR)/utun_route_fix.o |
|
|
|
# Тестовые объектные файлы (будут в obj/tests/) |
|
TEST_PKT_NORMALIZER_OBJS := $(TEST_OBJ_DIR)/test_pkt_normalizer.o |
|
TEST_ETCP_OBJS := $(TEST_OBJ_DIR)/test_etcp.o |
|
TEST_ETCP_STRESS_OBJS := $(TEST_OBJ_DIR)/test_etcp_stress.o |
|
TEST_ETCP_SIMPLE_OBJS := $(TEST_OBJ_DIR)/test_etcp_simple.o |
|
TEST_U_ASYNC_COMPREHENSIVE_OBJS := $(TEST_OBJ_DIR)/test_u_async_comprehensive.o |
|
TEST_U_ASYNC_SIMPLE_OBJS := $(TEST_OBJ_DIR)/test_u_async_simple.o |
|
TEST_U_ASYNC_PERFORMANCE_OBJS := $(TEST_OBJ_DIR)/test_u_async_performance.o |
|
TEST_DEBUG_CONFIG_OBJS := $(TEST_OBJ_DIR)/test_debug_config.o |
|
TEST_LL_QUEUE_COMPREHENSIVE_OBJS := $(TEST_OBJ_DIR)/test_ll_queue_comprehensive.o |
|
SIMPLE_UASYNC_OBJS := $(TEST_OBJ_DIR)/simple_uasync.o |
|
TEST_ECC_ENCRYPT_OBJS := $(TEST_OBJ_DIR)/test_ecc_encrypt.o |
|
TEST_ROUTING_OBJS := $(TEST_OBJ_DIR)/test_routing.o |
|
|
|
# Основная цель |
|
all: utun \ |
|
$(TEST_DIR)/test_pkt_normalizer \ |
|
$(TEST_DIR)/test_etcp \ |
|
$(TEST_DIR)/test_etcp_stress \ |
|
$(TEST_DIR)/test_etcp_simple \ |
|
$(TEST_DIR)/test_u_async_comprehensive \ |
|
$(TEST_DIR)/test_u_async_simple \ |
|
$(TEST_DIR)/test_u_async_performance \ |
|
$(TEST_DIR)/test_debug_config \ |
|
$(TEST_DIR)/test_ll_queue_comprehensive \ |
|
$(TEST_DIR)/test_ecc_encrypt \ |
|
$(TEST_DIR)/test_routing |
|
|
|
# Создание директорий |
|
$(OBJ_DIR): |
|
mkdir -p $(OBJ_DIR) |
|
mkdir -p $(OBJ_DIR)/src |
|
mkdir -p $(OBJ_DIR)/tests |
|
mkdir -p $(OBJ_DIR)/u_async |
|
|
|
$(SRC_OBJ_DIR): $(OBJ_DIR) |
|
mkdir -p $(SRC_OBJ_DIR) |
|
|
|
$(TEST_OBJ_DIR): $(OBJ_DIR) |
|
mkdir -p $(TEST_OBJ_DIR) |
|
|
|
# Правило компиляции для исходников из src/ |
|
$(SRC_OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(SRC_OBJ_DIR) |
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ |
|
|
|
# Правило компиляции для тестовых .c файлов |
|
$(TEST_OBJ_DIR)/%.o: $(TEST_DIR)/%.c | $(TEST_OBJ_DIR) |
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ |
|
|
|
# Правило компиляции для tinycrypt (оставляем в оригинальных директориях) |
|
tinycrypt/lib/source/%.o: tinycrypt/lib/source/%.c |
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ |
|
|
|
# Правило компиляции для u_async файлов |
|
$(SRC_OBJ_DIR)/u_async.o: u_async/u_async.c | $(SRC_OBJ_DIR) |
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ |
|
|
|
$(SRC_OBJ_DIR)/timeout_heap.o: u_async/timeout_heap.c | $(SRC_OBJ_DIR) |
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ |
|
|
|
$(OBJ_DIR)/u_async/debug_config.o: u_async/debug_config.c | $(OBJ_DIR) |
|
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ |
|
|
|
# Правила линковки |
|
utun: $(UTUN_OBJS) $(CONFIG_PARSER_OBJS) $(TUN_IF_OBJS) $(ROUTING_OBJS) $(CONTROL_SOCKET_OBJS) $(ETCP_OBJS) $(PN_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_pkt_normalizer: $(TEST_PKT_NORMALIZER_OBJS) $(PN_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_etcp: $(TEST_ETCP_OBJS) $(ETCP_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_etcp_stress: $(TEST_ETCP_STRESS_OBJS) $(ETCP_OBJS) $(LL_QUEUE_OBJS) $(SIMPLE_UASYNC_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_etcp_simple: $(TEST_ETCP_SIMPLE_OBJS) $(ETCP_OBJS) $(LL_QUEUE_OBJS) $(SIMPLE_UASYNC_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_u_async_comprehensive: $(TEST_U_ASYNC_COMPREHENSIVE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_u_async_simple: $(TEST_U_ASYNC_SIMPLE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_u_async_performance: $(TEST_U_ASYNC_PERFORMANCE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_debug_config: $(TEST_DEBUG_CONFIG_OBJS) $(OBJ_DIR)/u_async/debug_config.o |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_ll_queue_comprehensive: $(TEST_LL_QUEUE_COMPREHENSIVE_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_ecc_encrypt: $(TEST_ECC_ENCRYPT_OBJS) $(SC_LIB_OBJS) $(UASYNC_OBJS) $(TINYCRYPT_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
$(TEST_DIR)/test_routing: $(TEST_ROUTING_OBJS) $(CONFIG_PARSER_OBJS) $(ROUTING_OBJS) $(UASYNC_OBJS) |
|
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ |
|
|
|
# Очистка |
|
clean: |
|
rm -rf $(OBJ_DIR) |
|
rm -f utun \ |
|
$(TEST_DIR)/test_pkt_normalizer \ |
|
$(TEST_DIR)/test_etcp \ |
|
$(TEST_DIR)/test_etcp_stress \ |
|
$(TEST_DIR)/test_etcp_simple \ |
|
$(TEST_DIR)/test_u_async_comprehensive \ |
|
$(TEST_DIR)/test_u_async_simple \ |
|
$(TEST_DIR)/test_u_async_performance \ |
|
$(TEST_DIR)/test_debug_config \ |
|
$(TEST_DIR)/test_ll_queue_comprehensive \ |
|
$(TEST_DIR)/test_ecc_encrypt \ |
|
$(TEST_DIR)/test_routing |
|
rm -f *.o $(TEST_DIR)/*.o tinycrypt/lib/source/*.o |
|
|
|
.PHONY: all clean |