bin_PROGRAMS = utun # Sources that are always compiled utun_CORE_SOURCES = \ utun.c \ utun_instance.c \ config_parser.c \ config_updater.c \ route_lib.c \ route_bgp.c \ routing.c \ tun_if.c \ tun_route.c \ tun_linux.c \ tun_freebsd.c \ tun_windows.c \ etcp.c \ etcp_connections.c \ etcp_loadbalancer.c \ etcp_debug.c \ secure_channel.c \ crc32.c \ pkt_normalizer.c \ packet_dump.c \ etcp_api.c \ control_server.c \ firewall.c # Platform-specific TUN libs (Windows only) utun_TUN_LIBS = @TUN_LIBS@ # TinyCrypt sources (only used without OpenSSL) utun_TINYCRYPT_SOURCES = \ $(top_srcdir)/tinycrypt/lib/source/aes_encrypt.c \ $(top_srcdir)/tinycrypt/lib/source/aes_decrypt.c \ $(top_srcdir)/tinycrypt/lib/source/cbc_mode.c \ $(top_srcdir)/tinycrypt/lib/source/ccm_mode.c \ $(top_srcdir)/tinycrypt/lib/source/cmac_mode.c \ $(top_srcdir)/tinycrypt/lib/source/ctr_mode.c \ $(top_srcdir)/tinycrypt/lib/source/ecc.c \ $(top_srcdir)/tinycrypt/lib/source/ecc_dh.c \ $(top_srcdir)/tinycrypt/lib/source/ecc_dsa.c \ $(top_srcdir)/tinycrypt/lib/source/ecc_platform_specific.c \ $(top_srcdir)/tinycrypt/lib/source/hmac.c \ $(top_srcdir)/tinycrypt/lib/source/sha256.c \ $(top_srcdir)/tinycrypt/lib/source/utils.c # Combine sources based on OpenSSL usage if USE_OPENSSL utun_SOURCES = $(utun_CORE_SOURCES) $(utun_TUN_SOURCES) else utun_SOURCES = $(utun_CORE_SOURCES) $(utun_TINYCRYPT_SOURCES) $(utun_TUN_SOURCES) endif # Include paths utun_CORE_CFLAGS = \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/tinycrypt/lib/include \ -I$(top_srcdir)/tinycrypt/lib/source \ -g \ $(DEBUG_FLAGS) utun_CFLAGS = $(utun_CORE_CFLAGS) # Libraries utun_CORE_LDADD = \ $(top_builddir)/lib/libuasync.a \ -lpthread \ -lm if USE_OPENSSL utun_LDADD = $(utun_CORE_LDADD) -lcrypto $(utun_TUN_LIBS) else utun_LDADD = $(utun_CORE_LDADD) $(utun_TUN_LIBS) endif # TinyCrypt object files (for tests that need them) TINYCRYPT_SRCDIR = $(top_srcdir)/tinycrypt/lib/source TINYCRYPT_OBJS = \ utun-aes_encrypt.o \ utun-aes_decrypt.o \ utun-ccm_mode.o \ utun-cmac_mode.o \ utun-ctr_mode.o \ utun-ecc.o \ utun-ecc_dh.o \ utun-ecc_dsa.o \ utun-sha256.o \ utun-ecc_platform_specific.o \ utun-utils.o # Rules to build TinyCrypt objects (for tests) TINYCRYPT_CFLAGS = -g -I$(top_srcdir)/tinycrypt/lib/include -I$(top_srcdir)/tinycrypt/lib/source utun-aes_encrypt.o: $(TINYCRYPT_SRCDIR)/aes_encrypt.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< utun-aes_decrypt.o: $(TINYCRYPT_SRCDIR)/aes_decrypt.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< utun-ccm_mode.o: $(TINYCRYPT_SRCDIR)/ccm_mode.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< utun-cmac_mode.o: $(TINYCRYPT_SRCDIR)/cmac_mode.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< utun-ctr_mode.o: $(TINYCRYPT_SRCDIR)/ctr_mode.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< utun-ecc.o: $(TINYCRYPT_SRCDIR)/ecc.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< utun-ecc_dh.o: $(TINYCRYPT_SRCDIR)/ecc_dh.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< utun-ecc_dsa.o: $(TINYCRYPT_SRCDIR)/ecc_dsa.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< utun-sha256.o: $(TINYCRYPT_SRCDIR)/sha256.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< # Force rebuild of ecc_platform_specific.o to pick up platform changes utun-ecc_platform_specific.o: $(TINYCRYPT_SRCDIR)/ecc_platform_specific.c FORCE $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< FORCE: utun-utils.o: $(TINYCRYPT_SRCDIR)/utils.c $(AM_V_CC)$(COMPILE) $(TINYCRYPT_CFLAGS) -c -o $@ $< # Build TinyCrypt objects for tests (convenience target) tinycrypt-objects: $(TINYCRYPT_OBJS) # Copy binary to project root after building all-local: copy-to-root copy-to-root: utun$(EXEEXT) @cp -f utun$(EXEEXT) $(top_srcdir)/ @cp -f $(top_srcdir)/lib/wintun.dll $(top_srcdir)/ 2>/dev/null || echo "Warning: wintun.dll not found in lib/" if OS_WINDOWS @cp -f $(srcdir)/utun.manifest $(top_srcdir)/utun.exe.manifest 2>/dev/null || true endif # Clean clean-local: @true # Install directories install-exec-hook: $(MKDIR_P) $(DESTDIR)$(bindir) $(MKDIR_P) $(DESTDIR)$(sysconfdir)/utun