MQNICMOD := $(abspath ../images/mqnic/mqnic.ko) GUESTS := \ qemu-pair-client \ qemu-pair-client-8-1 \ qemu-pair-client-8-2 \ qemu-pair-client-8-3 \ qemu-pair-client-8-4 \ qemu-pair-client-8-5 \ qemu-pair-client-8-6 \ qemu-pair-client-8-7 \ qemu-pair-client-8-8 \ qemu-pair-server \ gem5-pair-client \ gem5-pair-server-cp \ gem5-pair-client-cp \ gem5-pair-client-8-1 \ gem5-pair-client-8-2 \ gem5-pair-client-8-3 \ gem5-pair-client-8-4 \ gem5-pair-client-8-5 \ gem5-pair-client-8-6 \ gem5-pair-client-8-7 \ gem5-pair-client-8-8 \ gem5-pair-server-udp \ gem5-pair-client-udp-0m \ gem5-pair-client-udp-10m \ gem5-pair-client-udp-30m \ gem5-pair-client-udp-50m \ gem5-pair-client-udp-80m \ gem5-pair-client-udp-100m \ gem5-pair-client-udp-120m \ gem5-pair-client-udp-150m \ qemu-nopaxos-replica-0 \ qemu-nopaxos-replica-1 \ qemu-nopaxos-replica-2 \ qemu-nopaxos-client \ gem5-nopaxos-client \ gem5-nopaxos-replica-0-cp \ gem5-nopaxos-replica-1-cp \ gem5-nopaxos-replica-2-cp \ gem5-nopaxos-client-cp \ qemu-vr-replica-0 \ qemu-vr-replica-1 \ qemu-vr-replica-2 \ qemu-vr-client \ gem5-vr-replica-0-cp \ gem5-vr-replica-1-cp \ gem5-vr-replica-2-cp \ gem5-vr-client-cp \ # experiments we want for the paper EXPERIMENTS := \ qemu-ns3-nopaxos \ qemu-ns3-nopaxos-verilator \ gem5-timing-corundum-verilator-ns3-nopaxos-nocp \ gem5-timing-corundum-bm-ns3-nopaxos-nocp \ qemu-ns3-vr \ qemu-ns3-vr-verilator \ gem5-timing-corundum-verilator-ns3-vr-nocp \ gem5-timing-corundum-bm-ns3-vr-nocp \ qemu-corundum-bm-switched-1 \ qemu-corundum-bm-switched-8 \ qemu-corundum-verilator-switched-1 \ qemu-corundum-verilator-switched-8 \ gem5-timing-corundum-verilator-switched-1-nocp \ gem5-timing-corundum-verilator-switched-8-nocp \ gem5-timing-corundum-verilator-pair-udp-0m \ gem5-timing-corundum-verilator-pair-udp-10m \ gem5-timing-corundum-verilator-pair-udp-30m \ gem5-timing-corundum-verilator-pair-udp-50m \ gem5-timing-corundum-verilator-pair-udp-80m \ gem5-timing-corundum-verilator-pair-udp-100m \ gem5-timing-corundum-verilator-pair-udp-150m \ # all experiments in repo ALL_EXPERIMENTS := \ $(EXPERIMENTS) \ qemu-corundum-bm-pair \ qemu-corundum-verilator-pair \ gem5-kvm-corundum-bm-pair \ gem5-timing-corundum-verilator-pair \ qemu-ns3-bridge-pair \ qemu-ns3-dumbbell-pair \ gem5-kvm-ns3-dumbbell-pair \ gem5-kvm-corundum-verilator-pair \ gem5-timing-corundum-verilator-pair-udp \ gem5-timing-corundum-verilator-pair-largewin \ gem5-timing-corundum-verilator-pair-16f \ REPLICATION ?= 1 BUILDDIR := build OUTDIR := out GUESTS_TARS := $(addprefix $(BUILDDIR)/,$(addsuffix .tar, $(GUESTS))) EXPERIMENTS_READY := $(addprefix $(OUTDIR)/,$(addsuffix /ready,$(EXPERIMENTS))) all: guest-tars experiments clean: rm -rf $(BUILDDIR) $(OUTDIR) ####################################### # Running experiments experiments: $(EXPERIMENTS_READY) define run_experiment_repl $(OUTDIR)/%/$(1)/ready: experiments/%.sh $(GUESTS_TARS) bash $$< $(1) touch $$@ endef REPLIDS := $(shell seq $(REPLICATION)) $(foreach i,$(REPLIDS), $(eval $(call run_experiment_repl,$(i)))) $(OUTDIR)/%/ready: experiments/%.sh $(addprefix $(OUTDIR)/%/,$(addsuffix /ready,$(REPLIDS))) touch $@ ####################################### # Guest Tars guest-tars: $(GUESTS_TARS) define build_guest $(1)_OBJS := $(wildcard guests/$(1)/*) $(BUILDDIR)/$(1).tar: $$($(1)_OBJS) rm -rf $(BUILDDIR)/$(1) mkdir -p $(BUILDDIR)/$(1)/guest cp $(MQNICMOD) $(BUILDDIR)/$(1)/guest/ cp $$($(1)_OBJS) $(BUILDDIR)/$(1)/guest/ cd $(BUILDDIR)/$(1) && tar cf $$(abspath $$@) guest/ rm -rf $(BUILDDIR)/$(1) endef $(foreach guest,$(GUESTS), $(eval $(call build_guest,$(guest))))