LIBS = -l unic
ZF_SHARED_LIB = -l onload_zf
CFLAGS = -std=gnu17 -O2 -g -L. -I.. -Wall -Wextra -Werror -pedantic -lm -pthread
CFLAGS_ZF = -std=gnu17 -O2 -g -L. -I.. -Wall -Wextra -Werror -lm -pthread

TARGETS_EX = udp_loop_ex udp_send_ex udp_recv_ex udp_recv_multicast_ex udp_recv_multicast_mask_ex tcp_connect_ex tcp_listen_ex tcp_highbandwidth_send_ex tcp_loop_ex udp2tcp_loop_ex udp_txts_ex udp_loop_txts_ex tcp_loop_txts_ex

TARGETS_EX+= tcp_accept_ex

TARGETS_DR = tcpdirect/udp_loop_dr tcpdirect/tcp_loop_dr

TARGETS_SOCK = udp2udp_loop_sock tcp2tcp_loop_sock udp2tcp_loop_sock multicast_recv_sock multicast_send_sock broadcast_send_sock udp_recv_sock udp_send_sock eth_rx_timestamping_sock eth_tx_timestamping_sock

TARGETS_TIME = uberphc_ctrl_time

TARGETS_TIME_EX = uberphc_stat_timex

all: $(TARGETS_EX) $(TARGETS_SOCK) $(TARGETS_TIME) $(TARGETS_TIME_EX)

# New special target build for TCPDirect loop examples
.PHONY: tcpdirect
tcpdirect: $(TARGETS_DR)

.SUFFIXES:

%_ex: %_ex.c libunic.so
	gcc $< -o $@ $(CFLAGS) $(LIBS) -Wl,-rpath,'$$ORIGIN'

%_dr: %_dr.c
	gcc $< -o $@ $(CFLAGS_ZF) $(ZF_SHARED_LIB) -Wl,-rpath,'$$ORIGIN'

%_sock: %_sock.c
	gcc $< -o $@ $(CFLAGS)

%_time: %_time.c uberphc.c uberphc.h
	gcc uberphc.c $< -o $@ $(CFLAGS)

%_timex: %_timex.c uberphc.c uberphc.h libunic.so
	gcc uberphc.c $< -o $@ $(CFLAGS) $(LIBS) -Wl,-rpath,'$$ORIGIN'

libunic.so:
	echo "Please copy the libunic.so lib into the local folder to build"
	_trigger_error_

libonload_zf.so:
	echo "Please copy the libonload_zf.so lib into the system path to build"
	_trigger_error_

clean:
	rm -rf $(TARGETS_SOCK)
	rm -rf $(TARGETS_EX)
	rm -fr $(TARGETS_TIME)
	rm -rf $(TARGETS_DR)
