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 # Объектные файлы tinycrypt (остаются в своих директориях) TINYCRYPT_OBJS := $(TINYCRYPT_SRCS:.c=.o) # Основные объектные файлы (будут в obj/src/) SC_LIB_OBJS := $(SRC_OBJ_DIR)/sc_lib.o UASYNC_OBJS := $(SRC_OBJ_DIR)/u_async.o $(SRC_OBJ_DIR)/timeout_heap.o PN_OBJS := $(SRC_OBJ_DIR)/pkt_normalizer.o $(SRC_OBJ_DIR)/settings.o LL_QUEUE_OBJS := $(SRC_OBJ_DIR)/ll_queue.o ETCP_OBJS := $(SRC_OBJ_DIR)/etcp.o CONFIG_PARSER_OBJS := $(SRC_OBJ_DIR)/config_parser.o TUN_IF_OBJS := $(SRC_OBJ_DIR)/tun_if.o CONNECTION_OBJS := $(SRC_OBJ_DIR)/connection.o ROUTING_OBJS := $(SRC_OBJ_DIR)/routing.o CONTROL_SOCKET_OBJS := $(SRC_OBJ_DIR)/control_socket.o UTUN_OBJS := $(SRC_OBJ_DIR)/utun.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_CONNECTION_OBJS := $(TEST_OBJ_DIR)/test_connection.o TEST_CONNECTION_STRESS_OBJS := $(TEST_OBJ_DIR)/test_connection_stress.o TEST_NEW_FEATURES_OBJS := $(TEST_OBJ_DIR)/test_new_features.o TEST_SC_LIB_OBJS := $(TEST_OBJ_DIR)/test_sc_lib.o TEST_UDP_SECURE_OBJS := $(TEST_OBJ_DIR)/test_udp_secure.o TEST_UTUN_INTEGRATION_OBJS := $(TEST_OBJ_DIR)/test_utun_integration.o TEST_UTUN_FORK_OBJS := $(TEST_OBJ_DIR)/test_utun_fork.o SIMPLE_UASYNC_OBJS := $(TEST_OBJ_DIR)/simple_uasync.o # Основная цель all: utun \ $(TEST_DIR)/test_sc_lib \ $(TEST_DIR)/test_udp_secure \ $(TEST_DIR)/test_pkt_normalizer \ $(TEST_DIR)/test_etcp \ $(TEST_DIR)/test_etcp_stress \ $(TEST_DIR)/test_etcp_simple \ $(TEST_DIR)/test_connection \ $(TEST_DIR)/test_connection_stress \ $(TEST_DIR)/test_new_features \ $(TEST_DIR)/test_utun_integration \ $(TEST_DIR)/test_utun_fork # Создание директорий $(OBJ_DIR): mkdir -p $(OBJ_DIR) $(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 $@ # Правила линковки utun: $(UTUN_OBJS) $(CONFIG_PARSER_OBJS) $(TUN_IF_OBJS) $(CONNECTION_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 $@ $^ $(TEST_DIR)/test_connection: $(TEST_CONNECTION_OBJS) $(CONNECTION_OBJS) $(ETCP_OBJS) $(PN_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(TEST_DIR)/test_connection_stress: $(TEST_CONNECTION_STRESS_OBJS) $(CONNECTION_OBJS) $(ETCP_OBJS) $(PN_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(TEST_DIR)/test_new_features: $(TEST_NEW_FEATURES_OBJS) $(ETCP_OBJS) $(PN_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) $(CONNECTION_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(TEST_DIR)/test_sc_lib: $(TEST_SC_LIB_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(TEST_DIR)/test_udp_secure: $(TEST_UDP_SECURE_OBJS) $(SC_LIB_OBJS) $(UASYNC_OBJS) $(TINYCRYPT_OBJS) $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(TEST_DIR)/test_utun_integration: $(TEST_UTUN_INTEGRATION_OBJS) $(CONFIG_PARSER_OBJS) $(TUN_IF_OBJS) $(CONNECTION_OBJS) $(ETCP_OBJS) $(PN_OBJS) $(LL_QUEUE_OBJS) $(UASYNC_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(TEST_DIR)/test_utun_fork: $(TEST_UTUN_FORK_OBJS) $(SC_LIB_OBJS) $(TINYCRYPT_OBJS) $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ # Очистка clean: rm -rf $(OBJ_DIR) rm -f utun \ $(TEST_DIR)/test_sc_lib \ $(TEST_DIR)/test_udp_secure \ $(TEST_DIR)/test_pkt_normalizer \ $(TEST_DIR)/test_etcp \ $(TEST_DIR)/test_etcp_stress \ $(TEST_DIR)/test_etcp_simple \ $(TEST_DIR)/test_connection \ $(TEST_DIR)/test_connection_stress \ $(TEST_DIR)/test_new_features \ $(TEST_DIR)/test_utun_integration \ $(TEST_DIR)/test_utun_fork rm -f *.o $(TEST_DIR)/*.o tinycrypt/lib/source/*.o .PHONY: all clean