Commit fa11a2ac authored by Antoine Kaufmann's avatar Antoine Kaufmann
Browse files

Restructure repo and rework Makefiles with proper dependency tracking

parent bc9b2e09
include mk/subdir_pre.mk
lib_proto_inc := $(d)proto/
$(eval $(call subdir,netif))
$(eval $(call subdir,nicif))
$(eval $(call subdir,nicbm))
include mk/subdir_post.mk
CPPFLAGS += -I include/ -I../proto/ -I../nicsim_common/include/
CPPFLAGS += -I../libnicbm/include/
CXXFLAGS += -Wall -Wextra -Wno-unused-parameter -O3
OBJS := nicbm.o
all: libnicbm.a
libnicbm.a: $(OBJS)
$(AR) rcs $@ $^
clean:
rm -rf libnicbm.a $(OBJS)
all: $(ALL_ALL)
clean:
rm -rf $(CLEAN_ALL)
distclean:
rm -rf $(CLEAN_ALL) $(DISTCLEAN_ALL)
.PHONY: all clean distclean
.DEFAULT_GOAL := all
# Generic recipes
# recurse into subdirectory (one parameter, subdirectory name)
define subdir
cur_dir := $$(d)$(1)/
$(if $(filter $(abspath .),$(abspath $$(d)$(1))),,include $$(cur_dir)rules.mk)
endef
DEPFLAGS ?= -MT $@ -MMD -MP -MF $(@:.o=.Td)
OUTPUT_OPTION.c ?= -o $@
OUTPUT_OPTION.cxx ?= -o $@
POSTCOMPILE_DEPS = mv -f $(@:.o=.Td) $(@:.o=.d)
# Compile C to object file while generating dependency
COMPILE.c = $(CC) $(DEPFLAGS) $(CFLAGS) $(CPPFLAGS) -c
%.o: %.c
%.o: %.c %.d
$(COMPILE.c) $(OUTPUT_OPTION.c) $<
@$(POSTCOMPILE_DEPS)
# Compile C to position independent object file while generating dependency
COMPILE_SHARED.c = $(CC) $(DEPFLAGS) $(CFLAGS_SHARED) $(CPPFLAGS) -c
%.shared.o: %.c
%.shared.o: %.c %.shared.d
$(COMPILE_SHARED.c) $(OUTPUT_OPTION.c) $<
@$(POSTCOMPILE_DEPS)
# Compile C++ to object file while generating dependency
COMPILE.cxx = $(CXX) $(DEPFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c
%.o: %.cc
%.o: %.cc %.d
$(COMPILE.cxx) $(OUTPUT_OPTION.cxx) $<
@$(POSTCOMPILE_DEPS)
# Link binary from objects
LINK = $(CXX) $(LDFLAGS)
%: %.o
$(LINK) $^ $(LDLIBS) -o $@
# Link shared library from objects
LINK.so = $(CC) $(LDFLAGS) -shared
%.so:
$(LINK.so) $^ $(LDLIBS) $(OUTPUT_OPTION.c)
# create static library
LINK.a = $(AR) rcs
%.a:
$(LINK.a) $@ $^
%.d: ;
.PRECIOUS: %.d
#$(warning leaving $(d))
DEPS := $(DEPS) $(OBJS:.o=.d)
CLEAN := $(CLEAN) $(DEPS)
CLEAN_ALL := $(CLEAN_ALL) $(CLEAN)
DISTCLEAN_ALL := $(DISTCLEAN_ALL) $(DISTCLEAN)
DEPS_ALL := $(DEPS_ALL) $(DEPS)
ALL_ALL := $(ALL_ALL) $(ALL)
ifeq "$(d)" ""
include mk/global.mk
-include $(DEPS_ALL)
else
endif
d := $(dirstack_$(sp))
sp := $(basename $(sp))
ALL :=
CLEAN :=
DISTCLEAN :=
DEPS :=
OBJS :=
#$(warning entering $(cur_dir))
sp := $(sp).x
dirstack_$(sp) := $(d)
d := $(cur_dir)
ALL :=
CLEAN :=
DISTCLEAN :=
DEPS :=
OBJS :=
CPPFLAGS := -I../proto -I../netsim_common/include
CFLAGS := -Wall -Wextra -O3
LD := g++
all: net_switch
net_switch: net_switch.o ../netsim_common/libnetsim_common.a
$(LD) -o $@ $^
clean:
rm -f *.o net_switch
CPPFLAGS += -I../proto -I../netsim_common/include
CFLAGS += -Wall -Wextra -Wno-unused-parameter -O3
LDLIBS += -lpthread
net_tap: net_tap.o ../netsim_common/libnetsim_common.a
all: net_tap
clean:
rm -f *.o net_tap
CPPFLAGS += -I../proto -I../netsim_common/include
CFLAGS += -Wall -Wextra -Wno-unused-parameter -O3
LDLIBS += -lpcap
net_wire: net_wire.o ../netsim_common/libnetsim_common.a
all: net_wire
clean:
rm -f *.o net_wire
CPPFLAGS += -I include/ -I../proto/
CFLAGS += -Wall -Wextra -Wno-unused-parameter -O3 -fPIC
all: libnetsim_common.a
libnetsim_common.a: netsim.o utils.o
$(AR) rcs $@ $^
clean:
rm -rf libnetsim_common.a *.o
CPPFLAGS += -I include/ -I../proto/
CFLAGS += -Wall -Wextra -Wno-unused-parameter -O3
all: libnicsim_common.a
libnicsim_common.a: nicsim.o utils.o
$(AR) rcs $@ $^
clean:
rm -rf libnicsim_common.a nicsim.o utils.o
include mk/subdir_pre.mk
QEMU_IMG := $(d)qemu/build/qemu-img
QEMU := $(d)qemu/build/qemu-system-x86_64
external: $(d)gem5/ready $(d)qemu/ready $(d)ns-3/ready
.PHONY: external
$(d)gem5:
git clone git@github.com:simbricks/gem5.git $@
$(d)gem5/ready: $(d)gem5
+cd $< && scons build/X86/gem5.opt -j`nproc`
touch $@
$(d)qemu:
git clone git@github.com:simbricks/qemu.git $@
$(d)qemu/ready: $(d)qemu
+cd $< && ./configure \
--target-list=x86_64-softmmu \
--disable-werror \
--extra-cflags="-I$(abspath $(lib_proto_inc))" \
--enable-cosim-pci && \
$(MAKE)
touch $@
$(QEMUG_IMG): $(d)qemu/ready
touch $@
$(QEMU): $(d)qemu/ready
touch $@
$(d)ns-3:
git clone git@github.com:simbricks/ns-3.git $@
$(d)ns-3/ready: $(d)ns-3 $(lib_netsim)
+cd $< && COSIM_PATH=$(abspath $(base_dir)) ./cosim-build.sh configure
touch $@
DISTCLEAN := $(base_dir)gem5 $(base_dir)qemu $(base_dir)ns-3
include mk/subdir_post.mk
include mk/subdir_pre.mk
$(eval $(call subdir,wire))
$(eval $(call subdir,tap))
$(eval $(call subdir,switch))
include mk/subdir_post.mk
include mk/subdir_pre.mk
bin_net_switch := $(d)net_switch
OBJS := $(d)net_switch.o
$(OBJS): CPPFLAGS := $(CPPFLAGS) -I$(d)include/ -I$(lib_proto_inc) \
-I$(lib_netsim_inc)
$(bin_net_switch): $(OBJS) $(lib_netsim) -lpcap
CLEAN := $(bin_net_switch) $(OBJS)
ALL := $(bin_net_switch)
include mk/subdir_post.mk
include mk/subdir_pre.mk
bin_net_tap := $(d)net_tap
OBJS := $(d)net_tap.o
$(OBJS): CPPFLAGS := $(CPPFLAGS) -I$(d)include/ -I$(lib_proto_inc) \
-I$(lib_netsim_inc)
$(bin_net_tap): $(OBJS) $(lib_netsim) -lpcap -lpthread
CLEAN := $(bin_net_tap) $(OBJS)
ALL := $(bin_net_tap)
include mk/subdir_post.mk
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment