SHELL = /bin/bash
.SHELLFLAGS = -o pipefail -c

# sky get -p sbr:2591487904 && mkdir -p clang && tar xf clang-linux-x86_64.12.0.0-r8330222-t0.tar.gz -C clang

CLANG = ./clang/bin/clang-12
CLANG_FLAGS = -Wall -Wextra -Werror -g -O2 -emit-llvm -I${ARCADIA_ROOT}/contrib/libs/linux-headers -I${ARCADIA_ROOT}/contrib/libs/libbpf/include/libbpf -I./include -I./clang/include

LLC = ./clang/bin/llc
LLC_FLAGS = -march=bpf -filetype=obj

# Use this kernel version for vmexec build
# Can be overriden from shell
KERNEL_RELEASE ?= 5.4.196-37
export ARC_ROOT=${ARCADIA_ROOT}

# v5.4.180-31
TCP_RTO_2 = tcp_rto_0b2472d

# 5.4.187-35.2
TCP_RTO_3 = tcp_rto_3a7eda2

PROGS += tcp_rto
PROGS += $(TCP_RTO_2)
PROGS += $(TCP_RTO_3)
PROGS += tcp_tos
PROGS += dummy_egress
PROGS += net_stat_rx
PROGS += net_stat_tx
PROGS += net_stat_dc_rx
PROGS += net_stat_dc_tx
PROGS += tclass_lock

SRCDIR = src
OBJDIR = obj
GENDIR = generated

$(shell mkdir -p $(OBJDIR))
$(shell mkdir -p $(GENDIR))

.PRECIOUS: $(OBJDIR)/%.o
$(OBJDIR)/%.o: $(SRCDIR)/%.c
	$(CLANG) $(CLANG_FLAGS) -c $< -o - | $(LLC) $(LLC_FLAGS) -o $@

.PRECIOUS: $(OBJDIR)/$(TCP_RTO_2).o
$(OBJDIR)/$(TCP_RTO_2).o: $(SRCDIR)/tcp_rto.c
	$(CLANG) $(CLANG_FLAGS) -DTCP_EXTENDED_COUNTERS -c $< -o - | $(LLC) $(LLC_FLAGS) -o $@

.PRECIOUS: $(OBJDIR)/$(TCP_RTO_3).o
$(OBJDIR)/$(TCP_RTO_3).o: $(SRCDIR)/tcp_rto.c
	$(CLANG) $(CLANG_FLAGS) -DTCP_EXTENDED_COUNTERS -DTXREHASH -c $< -o - | $(LLC) $(LLC_FLAGS) -o $@

$(GENDIR)/%.h: $(OBJDIR)/%.o
	./generate.sh $< $@

$(PROGS): %: $(GENDIR)/%.h

networks_check:
	../tests/test_networks.py ../lib/nets.cpp include/utils.h

.DEFAULT_GOAL := all
all: networks_check $(PROGS)

.PHONY: vmbuild
vmbuild:
	${ARC_ROOT}/infra/qemu/vmexec/vmexec_krelese.sh ${KERNEL_RELEASE} -v ${ARC_ROOT}:/arc -- /arc/infra/ebpf-agent/progs/vmbuild.sh

.PHONY: clean
clean:
	rm -rf obj
	rm -rf generated
