diff --git a/basic01-xdp-pass/Makefile b/basic01-xdp-pass/Makefile index c57fff71..f0a01e60 100644 --- a/basic01-xdp-pass/Makefile +++ b/basic01-xdp-pass/Makefile @@ -1,85 +1,16 @@ # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) -TARGETS := xdp_pass +XDP_TARGETS := xdp_pass_kern +USER_TARGETS := xdp_pass +USER_C := xdp_pass_user.c + LLC ?= llc CLANG ?= clang CC := gcc LIBBPF_DIR = ../libbpf/src/ +COMMON_DIR = ../common/ +COMMON_OBJS := $(COMMON_DIR)/common_params.o -XDP_C = ${TARGETS:=_kern.c} -XDP_OBJ = ${XDP_C:.c=.o} -USER_C = ${TARGETS:=_user.c} -USER_OBJ = ${USER_C:.c=.o} -OBJECT_LIBBPF = $(LIBBPF_DIR)/libbpf.a - -COMMON_OBJS := ../common/common_params.o -# Supports adding more COMMON_OBJS -# COMMON_OBJS += ../common/common_bpf.o - -# Create expansions for dependencies -COMMON_H := ${COMMON_OBJS:.o=.h} - -CFLAGS ?= -I$(LIBBPF_DIR)/root/usr/include/ -CFLAGS += -I../headers/ -LDFLAGS ?= -L$(LIBBPF_DIR) - -LIBS = -lbpf -lelf - -all: llvm-check $(TARGETS) $(XDP_OBJ) - -.PHONY: clean $(CLANG) $(LLC) - -clean: - cd $(LIBBPF_DIR) && $(MAKE) clean; - make -C ../common/ clean - rm -f $(TARGETS) - rm -f $(XDP_OBJ) - rm -f $(USER_OBJ) - rm -f *.ll - rm -f *~ - -llvm-check: $(CLANG) $(LLC) - @for TOOL in $^ ; do \ - if [ ! $$(command -v $${TOOL} 2>/dev/null) ]; then \ - echo "*** ERROR: Cannot find tool $${TOOL}" ;\ - exit 1; \ - else true; fi; \ - done - -$(OBJECT_LIBBPF): - @if [ ! -d $(LIBBPF_DIR) ]; then \ - echo "Error: Need libbpf submodule"; \ - echo "May need to run git submodule update --init"; \ - exit 1; \ - else \ - cd $(LIBBPF_DIR) && $(MAKE) all; \ - mkdir -p root; DESTDIR=root $(MAKE) install_headers; \ - fi - -# Create dependency: detect if C-file change and touch H-file, to trigger -# target $(COMMON_OBJS) -$(COMMON_H): %.h: %.c - touch $@ - -# Detect if any of common obj changed and create dependency on .h-files -$(COMMON_OBJS): %.o: %.h - make -C ../common/ - -$(TARGETS): %: %_user.c $(OBJECT_LIBBPF) Makefile $(COMMON_OBJS) - $(CC) -Wall $(CFLAGS) $(LDFLAGS) -o $@ $(COMMON_OBJS) \ - $< $(LIBS) - -$(XDP_OBJ): %.o: %.c Makefile - $(CLANG) -S \ - -target bpf \ - -D __BPF_TRACING__ \ - $(CFLAGS) \ - -Wall \ - -Wno-unused-value \ - -Wno-pointer-sign \ - -Wno-compare-distinct-pointer-types \ - -Werror \ - -O2 -emit-llvm -c -g $< - $(LLC) -march=bpf -filetype=obj -o $@ ${@:.o=.ll} +include $(COMMON_DIR)/common.mk diff --git a/basic02-prog-by-name/Makefile b/basic02-prog-by-name/Makefile index 5e11f249..c56f433b 100644 --- a/basic02-prog-by-name/Makefile +++ b/basic02-prog-by-name/Makefile @@ -1,86 +1,10 @@ # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) -# Departing from the implicit _user.c scheme XDP_TARGETS := xdp_prog_kern USER_TARGETS := xdp_loader -LLC ?= llc -CLANG ?= clang -CC := gcc - LIBBPF_DIR = ../libbpf/src/ +COMMON_DIR = ../common/ -XDP_C = ${XDP_TARGETS:=.c} -XDP_OBJ = ${XDP_C:.c=.o} -USER_C = ${USER_TARGETS:=.c} -USER_OBJ = ${USER_C:.c=.o} - -OBJECT_LIBBPF = $(LIBBPF_DIR)/libbpf.a - -COMMON_OBJS := ../common/common_params.o -COMMON_OBJS += ../common/common_user_bpf_xdp.o -# Create expansions for dependencies -COMMON_H := ${COMMON_OBJS:.o=.h} - -CFLAGS ?= -I$(LIBBPF_DIR)/root/usr/include/ -CFLAGS += -I../headers/ -LDFLAGS ?= -L$(LIBBPF_DIR) - -LIBS = -lbpf -lelf - -all: llvm-check $(USER_TARGETS) $(XDP_OBJ) - -.PHONY: clean $(CLANG) $(LLC) - -clean: - cd $(LIBBPF_DIR) && $(MAKE) clean; - make -C ../common/ clean - rm -f $(USER_TARGETS) - rm -f $(XDP_OBJ) - rm -f $(USER_OBJ) - rm -f *.ll - rm -f *~ - -llvm-check: $(CLANG) $(LLC) - @for TOOL in $^ ; do \ - if [ ! $$(command -v $${TOOL} 2>/dev/null) ]; then \ - echo "*** ERROR: Cannot find tool $${TOOL}" ;\ - exit 1; \ - else true; fi; \ - done - -$(OBJECT_LIBBPF): - @if [ ! -d $(LIBBPF_DIR) ]; then \ - echo "Error: Need libbpf submodule"; \ - echo "May need to run: git submodule update --init"; \ - exit 1; \ - else \ - cd $(LIBBPF_DIR) && $(MAKE) all; \ - mkdir -p root; DESTDIR=root $(MAKE) install_headers; \ - fi - -# Create dependency: detect if C-file change and touch H-file, to trigger -# target $(COMMON_OBJS) -$(COMMON_H): %.h: %.c - touch $@ - -# Detect if any of common obj changed and create dependency on .h-files -$(COMMON_OBJS): %.o: %.h - make -C ../common/ - -$(USER_TARGETS): %: %.c $(OBJECT_LIBBPF) Makefile $(COMMON_OBJS) - $(CC) -Wall $(CFLAGS) $(LDFLAGS) -o $@ $(COMMON_OBJS) \ - $< $(LIBS) +include $(COMMON_DIR)/common.mk -$(XDP_OBJ): %.o: %.c Makefile - $(CLANG) -S \ - -target bpf \ - -D __BPF_TRACING__ \ - $(CFLAGS) \ - -Wall \ - -Wno-unused-value \ - -Wno-pointer-sign \ - -Wno-compare-distinct-pointer-types \ - -Werror \ - -O2 -emit-llvm -c -g $< - $(LLC) -march=bpf -filetype=obj -o $@ ${@:.o=.ll} diff --git a/basic03-map-counter/Makefile b/basic03-map-counter/Makefile index 127a9f35..bc4be130 100644 --- a/basic03-map-counter/Makefile +++ b/basic03-map-counter/Makefile @@ -4,83 +4,8 @@ XDP_TARGETS := xdp_prog_kern USER_TARGETS := xdp_load_and_stats -LLC ?= llc -CLANG ?= clang -CC := gcc - LIBBPF_DIR = ../libbpf/src/ +COMMON_DIR = ../common/ -XDP_C = ${XDP_TARGETS:=.c} -XDP_OBJ = ${XDP_C:.c=.o} -USER_C = ${USER_TARGETS:=.c} -USER_OBJ = ${USER_C:.c=.o} - -OBJECT_LIBBPF = $(LIBBPF_DIR)/libbpf.a - -COMMON_OBJS := ../common/common_params.o -COMMON_OBJS += ../common/common_user_bpf_xdp.o -# Create expansions for dependencies -COMMON_H := ${COMMON_OBJS:.o=.h} - -CFLAGS ?= -I$(LIBBPF_DIR)/root/usr/include/ -CFLAGS += -I../headers/ -LDFLAGS ?= -L$(LIBBPF_DIR) - -LIBS = -lbpf -lelf - -all: llvm-check $(USER_TARGETS) $(XDP_OBJ) - -.PHONY: clean $(CLANG) $(LLC) - -clean: - cd $(LIBBPF_DIR) && $(MAKE) clean; - make -C ../common/ clean - rm -f $(USER_TARGETS) - rm -f $(XDP_OBJ) - rm -f $(USER_OBJ) - rm -f *.ll - rm -f *~ - -llvm-check: $(CLANG) $(LLC) - @for TOOL in $^ ; do \ - if [ ! $$(command -v $${TOOL} 2>/dev/null) ]; then \ - echo "*** ERROR: Cannot find tool $${TOOL}" ;\ - exit 1; \ - else true; fi; \ - done - -$(OBJECT_LIBBPF): - @if [ ! -d $(LIBBPF_DIR) ]; then \ - echo "Error: Need libbpf submodule"; \ - echo "May need to run: git submodule update --init"; \ - exit 1; \ - else \ - cd $(LIBBPF_DIR) && $(MAKE) all; \ - mkdir -p root; DESTDIR=root $(MAKE) install_headers; \ - fi - -# Create dependency: detect if C-file change and touch H-file, to trigger -# target $(COMMON_OBJS) -$(COMMON_H): %.h: %.c - touch $@ - -# Detect if any of common obj changed and create dependency on .h-files -$(COMMON_OBJS): %.o: %.h - make -C ../common/ - -$(USER_TARGETS): %: %.c $(OBJECT_LIBBPF) Makefile $(COMMON_OBJS) common_kern_user.h - $(CC) -Wall $(CFLAGS) $(LDFLAGS) -o $@ $(COMMON_OBJS) \ - $< $(LIBS) +include $(COMMON_DIR)/common.mk -$(XDP_OBJ): %.o: %.c common_kern_user.h Makefile - $(CLANG) -S \ - -target bpf \ - -D __BPF_TRACING__ \ - $(CFLAGS) \ - -Wall \ - -Wno-unused-value \ - -Wno-pointer-sign \ - -Wno-compare-distinct-pointer-types \ - -Werror \ - -O2 -emit-llvm -c -g $< - $(LLC) -march=bpf -filetype=obj -o $@ ${@:.o=.ll} diff --git a/basic04-pinning-maps/Makefile b/basic04-pinning-maps/Makefile index 5a7c9c54..e71e918d 100644 --- a/basic04-pinning-maps/Makefile +++ b/basic04-pinning-maps/Makefile @@ -2,86 +2,9 @@ # Departing from the implicit _user.c scheme XDP_TARGETS := xdp_prog_kern -USER_TARGETS := xdp_loader -USER_TARGETS += xdp_stats - -LLC ?= llc -CLANG ?= clang -CC := gcc +USER_TARGETS := xdp_loader xdp_stats LIBBPF_DIR = ../libbpf/src/ +COMMON_DIR = ../common/ -XDP_C = ${XDP_TARGETS:=.c} -XDP_OBJ = ${XDP_C:.c=.o} -USER_C = ${USER_TARGETS:=.c} -USER_OBJ = ${USER_C:.c=.o} - -OBJECT_LIBBPF = $(LIBBPF_DIR)/libbpf.a - -COMMON_OBJS := ../common/common_params.o -COMMON_OBJS += ../common/common_user_bpf_xdp.o -# Create expansions for dependencies -COMMON_H := ${COMMON_OBJS:.o=.h} - -CFLAGS ?= -I$(LIBBPF_DIR)/root/usr/include/ -CFLAGS += -I../headers/ -LDFLAGS ?= -L$(LIBBPF_DIR) - -LIBS = -lbpf -lelf - -all: llvm-check $(USER_TARGETS) $(XDP_OBJ) - -.PHONY: clean $(CLANG) $(LLC) - -clean: - cd $(LIBBPF_DIR) && $(MAKE) clean; - make -C ../common/ clean - rm -f $(USER_TARGETS) - rm -f $(XDP_OBJ) - rm -f $(USER_OBJ) - rm -f *.ll - rm -f *~ - -llvm-check: $(CLANG) $(LLC) - @for TOOL in $^ ; do \ - if [ ! $$(command -v $${TOOL} 2>/dev/null) ]; then \ - echo "*** ERROR: Cannot find tool $${TOOL}" ;\ - exit 1; \ - else true; fi; \ - done - -$(OBJECT_LIBBPF): - @if [ ! -d $(LIBBPF_DIR) ]; then \ - echo "Error: Need libbpf submodule"; \ - echo "May need to run: git submodule update --init"; \ - exit 1; \ - else \ - cd $(LIBBPF_DIR) && $(MAKE) all; \ - mkdir -p root; DESTDIR=root $(MAKE) install_headers; \ - fi - -# Create dependency: detect if C-file change and touch H-file, to trigger -# target $(COMMON_OBJS) -$(COMMON_H): %.h: %.c - touch $@ - -# Detect if any of common obj changed and create dependency on .h-files -$(COMMON_OBJS): %.o: %.h - make -C ../common/ - -$(USER_TARGETS): %: %.c $(OBJECT_LIBBPF) Makefile $(COMMON_OBJS) common_kern_user.h - $(CC) -Wall $(CFLAGS) $(LDFLAGS) -o $@ $(COMMON_OBJS) \ - $< $(LIBS) - -$(XDP_OBJ): %.o: %.c common_kern_user.h Makefile - $(CLANG) -S \ - -target bpf \ - -D __BPF_TRACING__ \ - $(CFLAGS) \ - -Wall \ - -Wno-unused-value \ - -Wno-pointer-sign \ - -Wno-compare-distinct-pointer-types \ - -Werror \ - -O2 -emit-llvm -c -g $< - $(LLC) -march=bpf -filetype=obj -o $@ ${@:.o=.ll} +include $(COMMON_DIR)/common.mk diff --git a/common/common.mk b/common/common.mk new file mode 100644 index 00000000..c6f16e77 --- /dev/null +++ b/common/common.mk @@ -0,0 +1,79 @@ + +LLC ?= llc +CLANG ?= clang +CC ?= gcc + +XDP_C = ${XDP_TARGETS:=.c} +XDP_OBJ = ${XDP_C:.c=.o} +USER_C ?= ${USER_TARGETS:=.c} +USER_OBJ := ${USER_C:.c=.o} + +OBJECT_LIBBPF = $(LIBBPF_DIR)/libbpf.a + +COMMON_OBJS ?= $(COMMON_DIR)/common_params.o $(COMMON_DIR)/common_user_bpf_xdp.o + +# Create expansions for dependencies +COMMON_H := ${COMMON_OBJS:.o=.h} + +CFLAGS ?= -I$(LIBBPF_DIR)/root/usr/include/ +CFLAGS += -I../headers/ +LDFLAGS ?= -L$(LIBBPF_DIR) + +LIBS = -lbpf -lelf + +all: llvm-check $(USER_TARGETS) $(XDP_OBJ) + +.PHONY: clean $(CLANG) $(LLC) + +clean: + $(MAKE) -C $(LIBBPF_DIR) clean + $(MAKE) -C $(COMMON_DIR) clean + rm -f $(USER_TARGETS) + rm -f $(XDP_OBJ) + rm -f $(USER_OBJ) + rm -f *.ll + rm -f *~ + +llvm-check: $(CLANG) $(LLC) + @for TOOL in $^ ; do \ + if [ ! $$(command -v $${TOOL} 2>/dev/null) ]; then \ + echo "*** ERROR: Cannot find tool $${TOOL}" ;\ + exit 1; \ + else true; fi; \ + done + +$(OBJECT_LIBBPF): + @if [ ! -d $(LIBBPF_DIR) ]; then \ + echo "Error: Need libbpf submodule"; \ + echo "May need to run git submodule update --init"; \ + exit 1; \ + else \ + cd $(LIBBPF_DIR) && $(MAKE) all; \ + mkdir -p root; DESTDIR=root $(MAKE) install_headers; \ + fi + +# Create dependency: detect if C-file change and touch H-file, to trigger +# target $(COMMON_OBJS) +$(COMMON_H): %.h: %.c + touch $@ + +# Detect if any of common obj changed and create dependency on .h-files +$(COMMON_OBJS): %.o: %.h + make -C $(COMMON_DIR) + +$(USER_TARGETS): %: $(USER_C) $(OBJECT_LIBBPF) Makefile $(COMMON_OBJS) + $(CC) -Wall $(CFLAGS) $(LDFLAGS) -o $@ $(COMMON_OBJS) \ + $< $(LIBS) + +$(XDP_OBJ): %.o: %.c Makefile $(COMMON_H) + $(CLANG) -S \ + -target bpf \ + -D __BPF_TRACING__ \ + $(CFLAGS) \ + -Wall \ + -Wno-unused-value \ + -Wno-pointer-sign \ + -Wno-compare-distinct-pointer-types \ + -Werror \ + -O2 -emit-llvm -c -g $< + $(LLC) -march=bpf -filetype=obj -o $@ ${@:.o=.ll} diff --git a/packet01-parsing/Makefile b/packet01-parsing/Makefile index 95ff4792..b93fa23b 100644 --- a/packet01-parsing/Makefile +++ b/packet01-parsing/Makefile @@ -1,86 +1,9 @@ # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) -# Departing from the implicit _user.c scheme XDP_TARGETS := xdp_prog_kern USER_TARGETS := -LLC ?= llc -CLANG ?= clang -CC := gcc - LIBBPF_DIR = ../libbpf/src/ +COMMON_DIR = ../common/ -XDP_C = ${XDP_TARGETS:=.c} -XDP_OBJ = ${XDP_C:.c=.o} -USER_C = ${USER_TARGETS:=.c} -USER_OBJ = ${USER_C:.c=.o} - -OBJECT_LIBBPF = $(LIBBPF_DIR)/libbpf.a - -COMMON_OBJS := ../common/common_params.o -COMMON_OBJS += ../common/common_user_bpf_xdp.o -# Create expansions for dependencies -COMMON_H := ${COMMON_OBJS:.o=.h} - -CFLAGS ?= -I$(LIBBPF_DIR)/root/usr/include/ -CFLAGS += -I../headers/ -LDFLAGS ?= -L$(LIBBPF_DIR) - -LIBS = -lbpf -lelf - -all: llvm-check $(USER_TARGETS) $(XDP_OBJ) - -.PHONY: clean $(CLANG) $(LLC) - -clean: - cd $(LIBBPF_DIR) && $(MAKE) clean; - make -C ../common/ clean - rm -f $(USER_TARGETS) - rm -f $(XDP_OBJ) - rm -f $(USER_OBJ) - rm -f *.ll - rm -f *~ - -llvm-check: $(CLANG) $(LLC) - @for TOOL in $^ ; do \ - if [ ! $$(command -v $${TOOL} 2>/dev/null) ]; then \ - echo "*** ERROR: Cannot find tool $${TOOL}" ;\ - exit 1; \ - else true; fi; \ - done - -$(OBJECT_LIBBPF): - @if [ ! -d $(LIBBPF_DIR) ]; then \ - echo "Error: Need libbpf submodule"; \ - echo "May need to run: git submodule update --init"; \ - exit 1; \ - else \ - cd $(LIBBPF_DIR) && $(MAKE) all; \ - mkdir -p root; DESTDIR=root $(MAKE) install_headers; \ - fi - -# Create dependency: detect if C-file change and touch H-file, to trigger -# target $(COMMON_OBJS) -$(COMMON_H): %.h: %.c - touch $@ - -# Detect if any of common obj changed and create dependency on .h-files -$(COMMON_OBJS): %.o: %.h - make -C ../common/ - -$(USER_TARGETS): %: %.c $(OBJECT_LIBBPF) Makefile $(COMMON_OBJS) common_kern_user.h - $(CC) -Wall $(CFLAGS) $(LDFLAGS) -o $@ $(COMMON_OBJS) \ - $< $(LIBS) - -$(XDP_OBJ): %.o: %.c Makefile - $(CLANG) -S \ - -target bpf \ - -D __BPF_TRACING__ \ - $(CFLAGS) \ - -Wall \ - -Wno-unused-value \ - -Wno-pointer-sign \ - -Wno-compare-distinct-pointer-types \ - -Werror \ - -O2 -emit-llvm -c -g $< - $(LLC) -march=bpf -filetype=obj -o $@ ${@:.o=.ll} +include $(COMMON_DIR)/common.mk