.PHONY: build build-openwrt test clean force

ROOT_DIR := ..
BIN_DIR := $(ROOT_DIR)/bin
ZIG ?= zig
OPENWRT_TARGET ?= x86_64-linux-musl
NODE_C_MEMORY_PROFILE ?= SB_MEMORY_PROFILE_EMBEDDED_RELIABLE
NODE_C_CFLAGS := -DSB_MEMORY_PROFILE=$(NODE_C_MEMORY_PROFILE)

NODE_C_BIN := $(BIN_DIR)/socksbridgenode-c
NODE_C_OPENWRT_BIN := $(BIN_DIR)/socksbridgenode-c-openwrt
NODE_C_TEST_BIN := $(BIN_DIR)/node-c-tests

NODE_C_SRCS := \
	src/main.c \
	src/config.c \
	src/ipv4_text.c \
	src/protocol.c \
	src/packet.c \
	src/control_helpers.c \
	src/session_table.c \
	src/data_plane.c \
	src/ingress_source.c \
	src/osal/linux_egress_resolver.c \
	src/osal/linux_packet_io.c \
	src/osal/linux_receiver.c \
	src/osal/linux_sender.c \
	src/osal/linux_tunnel_io.c \
	src/runtime.c

NODE_C_TEST_SRCS := \
	tests/test_main.c \
	src/config.c \
	src/ipv4_text.c \
	src/protocol.c \
	src/packet.c \
	src/control_helpers.c \
	src/session_table.c \
	src/data_plane.c \
	src/ingress_source.c \
	src/osal/linux_egress_resolver.c \
	src/osal/linux_packet_io.c \
	src/osal/linux_receiver.c \
	src/osal/linux_sender.c \
	src/osal/linux_tunnel_io.c \
	src/runtime.c

build: $(NODE_C_BIN)

build-openwrt: $(NODE_C_OPENWRT_BIN)

test: $(NODE_C_TEST_BIN)
	./$(NODE_C_TEST_BIN)

clean:
	rm -f $(NODE_C_BIN) $(NODE_C_OPENWRT_BIN) $(NODE_C_TEST_BIN)

$(NODE_C_BIN): $(NODE_C_SRCS) force
	mkdir -p $(BIN_DIR)
	$(ZIG) cc $(NODE_C_CFLAGS) -O2 -static -o $(NODE_C_BIN) $(NODE_C_SRCS)

$(NODE_C_OPENWRT_BIN): $(NODE_C_SRCS) force
	mkdir -p $(BIN_DIR)
	$(ZIG) cc $(NODE_C_CFLAGS) -target $(OPENWRT_TARGET) -O2 -static -o $(NODE_C_OPENWRT_BIN) $(NODE_C_SRCS)

$(NODE_C_TEST_BIN): $(NODE_C_TEST_SRCS) force
	mkdir -p $(BIN_DIR)
	$(ZIG) cc $(NODE_C_CFLAGS) -O0 -g -static -o $(NODE_C_TEST_BIN) $(NODE_C_TEST_SRCS)

force:
