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