Blame view

samples/sockmap/Makefile 2.31 KB
81f7e3824   Eric Lee   Initial Release, ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  # kbuild trick to avoid linker error. Can be omitted if a module is built.
  obj- := dummy.o
  
  # List of programs to build
  hostprogs-y := sockmap
  
  # Libbpf dependencies
  LIBBPF := ../../tools/lib/bpf/bpf.o
  
  HOSTCFLAGS += -I$(objtree)/usr/include
  HOSTCFLAGS += -I$(srctree)/tools/lib/
  HOSTCFLAGS += -I$(srctree)/tools/testing/selftests/bpf/
  HOSTCFLAGS += -I$(srctree)/tools/lib/ -I$(srctree)/tools/include
  HOSTCFLAGS += -I$(srctree)/tools/perf
  
  sockmap-objs := ../bpf/bpf_load.o $(LIBBPF) sockmap_user.o
  
  # Tell kbuild to always build the programs
  always := $(hostprogs-y)
  always += sockmap_kern.o
  
  HOSTLOADLIBES_sockmap += -lelf -lpthread
  
  # Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline:
  #  make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
  LLC ?= llc
  CLANG ?= clang
  
  # Trick to allow make to be run from this directory
  all:
  	$(MAKE) -C ../../ $(CURDIR)/
  
  clean:
  	$(MAKE) -C ../../ M=$(CURDIR) clean
  	@rm -f *~
  
  $(obj)/syscall_nrs.s:	$(src)/syscall_nrs.c
  	$(call if_changed_dep,cc_s_c)
  
  $(obj)/syscall_nrs.h:	$(obj)/syscall_nrs.s FORCE
  	$(call filechk,offsets,__SYSCALL_NRS_H__)
  
  clean-files += syscall_nrs.h
  
  FORCE:
  
  
  # Verify LLVM compiler tools are available and bpf target is supported by llc
  .PHONY: verify_cmds verify_target_bpf $(CLANG) $(LLC)
  
  verify_cmds: $(CLANG) $(LLC)
  	@for TOOL in $^ ; do \
  		if ! (which -- "$${TOOL}" > /dev/null 2>&1); then \
  			echo "*** ERROR: Cannot find LLVM tool $${TOOL}" ;\
  			exit 1; \
  		else true; fi; \
  	done
  
  verify_target_bpf: verify_cmds
  	@if ! (${LLC} -march=bpf -mattr=help > /dev/null 2>&1); then \
  		echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\
  		echo "   NOTICE: LLVM version >= 3.7.1 required" ;\
  		exit 2; \
  	else true; fi
  
  $(src)/*.c: verify_target_bpf
  
  # asm/sysreg.h - inline assembly used by it is incompatible with llvm.
  # But, there is no easy way to fix it, so just exclude it since it is
  # useless for BPF samples.
  $(obj)/%.o: $(src)/%.c
  	$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) -I$(obj) \
  		-D__KERNEL__ -D__ASM_SYSREG_H -Wno-unused-value -Wno-pointer-sign \
  		-Wno-compare-distinct-pointer-types \
  		-Wno-gnu-variable-sized-type-not-at-end \
  		-Wno-address-of-packed-member -Wno-tautological-compare \
  		-Wno-unknown-warning-option \
  		-O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf -filetype=obj -o $@