github.com/gojue/ecapture@v0.8.2/Makefile (about) 1 include variables.mk 2 include functions.mk 3 4 .PHONY: all | env nocore 5 # include core and non-core ebpf bytecode 6 all: ebpf ebpf_noncore assets build 7 @echo $(shell date) 8 9 # exclude core ebpf 10 nocore: ebpf_noncore assets_noncore build_noncore 11 @echo $(shell date) 12 13 noncore: nocore 14 ebpf_nocore: ebpf_noncore 15 16 .ONESHELL: 17 SHELL = /bin/bash 18 19 .PHONY: env 20 env: 21 @echo --------------------------------------- 22 @echo "eCapture Makefile Environment:" 23 @echo --------------------------------------- 24 @echo "PARALLEL $(PARALLEL)" 25 @echo ----------------[ from args ]--------------- 26 @echo "CROSS_ARCH $(CROSS_ARCH)" 27 @echo "ANDROID $(ANDROID)" 28 @echo "DEBUG $(DEBUG)" 29 @echo "SNAPSHOT_VERSION $(SNAPSHOT_VERSION)" 30 @echo --------------------------------------- 31 @echo "HOST_ARCH $(HOST_ARCH)" 32 @echo "UNAME_R $(UNAME_R)" 33 @echo "CLANG_VERSION $(CLANG_VERSION)" 34 @echo "GO_VERSION $(GO_VERSION)" 35 @echo --------------------------------------- 36 @echo "CMD_CLANG $(CMD_CLANG)" 37 @echo "CMD_GIT $(CMD_GIT)" 38 @echo "CMD_GO $(CMD_GO)" 39 @echo "CMD_INSTALL $(CMD_INSTALL)" 40 @echo "CMD_LLC $(CMD_LLC)" 41 @echo "CMD_MD5 $(CMD_MD5)" 42 @echo "CMD_PKGCONFIG $(CMD_PKGCONFIG)" 43 @echo "CMD_STRIP $(CMD_STRIP)" 44 @echo "CMD_CC_PREFIX $(CMD_CC_PREFIX)" 45 @echo "CMD_TAR $(CMD_TAR)" 46 @echo "CMD_RPMBUILD $(CMD_RPMBUILD)" 47 @echo "CMD_RPM_SETUP_TREE $(CMD_RPM_SETUP_TREE)" 48 @echo --------------------------------------- 49 @echo "VERSION_NUM $(VERSION_NUM)" 50 @echo "LAST_GIT_TAG $(LAST_GIT_TAG)" 51 @echo "BPF_NOCORE_TAG $(BPF_NOCORE_TAG)" 52 @echo "KERN_RELEASE $(KERN_RELEASE)" 53 @echo "KERN_BUILD_PATH $(KERN_BUILD_PATH)" 54 @echo "KERN_SRC_PATH $(KERN_SRC_PATH)" 55 @echo "TARGET_ARCH $(TARGET_ARCH)" 56 @echo "GOARCH $(GOARCH)" 57 @echo "LINUX_ARCH $(LINUX_ARCH)" 58 @echo "LIBPCAP_ARCH $(LIBPCAP_ARCH)" 59 @echo "AUTOGENCMD $(AUTOGENCMD)" 60 @echo "PACKAGE_VERSION $(PACKAGE_VERSION)" 61 @echo "OUT_DEB_FILE $(OUT_DEB_FILE)" 62 @echo --------------------------------------- 63 64 .PHONY:rpm 65 rpm: 66 @$(CMD_RPM_SETUP_TREE) || exit 1 67 $(CMD_SED) -i '0,/^Version:.*$$/s//Version: $(TAG)/' builder/rpmBuild.spec 68 $(CMD_SED) -i '0,/^Release:.*$$/s//Release: $(RPM_RELEASE)/' builder/rpmBuild.spec 69 $(CMD_TAR) zcvf ~/rpmbuild/SOURCES/$(RPM_SOURCE0) ./ 70 $(CMD_RPMBUILD) -ba builder/rpmBuild.spec 71 72 # 73 # usage 74 # 75 76 .PHONY: help 77 help: 78 @echo "# environment" 79 @echo " $$ make env # show makefile environment/variables" 80 @echo "" 81 @echo "# build" 82 @echo " $$ make all # build ecapture" 83 @echo "" 84 @echo "# build rpm" 85 @echo " $$ make rpm VERSION=0.0.0 RELEASE=1 # build ecapture rpm" 86 @echo "" 87 @echo "# clean" 88 @echo " $$ make clean # wipe ./bin/ ./user/bytecode/ ./assets/" 89 @echo "" 90 @echo "# test" 91 @echo " $$ CROSS_ARCH=arm64 make ... # cross compile, build eCapture for arm64(aarch64) on amd64(x86_64) host" 92 @echo "" 93 @echo "# flags" 94 @echo " $$ ANDROID=1 make ... # build eCapture for Android" 95 96 97 .PHONY: prepare 98 prepare: 99 $(CMD_CD) $(LINUX_SOURCE_PATH) 100 $(KERNEL_HEADER_GEN) || exit 1 101 102 .PHONY: clean assets build ebpf 103 104 .PHONY: clean 105 clean: 106 $(CMD_RM) -f user/bytecode/*.d 107 $(CMD_RM) -f user/bytecode/*.o 108 $(CMD_RM) -f assets/ebpf_probe.go 109 $(CMD_RM) -f bin/ecapture 110 $(CMD_RM) -f .check* 111 @if [ -e ./lib/libpcap/Makefile ] ; then \ 112 cd ./lib/libpcap && make clean 113 fi 114 115 .PHONY: $(KERN_OBJECTS) 116 $(KERN_OBJECTS): %.o: %.c \ 117 | .checkver_$(CMD_CLANG) \ 118 .checkver_$(CMD_GO) \ 119 autogen 120 $(CMD_CLANG) -D__TARGET_ARCH_$(LINUX_ARCH) \ 121 $(EXTRA_CFLAGS) \ 122 $(BPFHEADER) \ 123 -target bpfel -c $< -o $(subst kern/,user/bytecode/,$(subst .o,_core.o,$@)) \ 124 -fno-ident -fdebug-compilation-dir . -g -D__BPF_TARGET_MISSING="GCC error \"The eBPF is using target specific macros, please provide -target\"" \ 125 -MD -MP 126 $(CMD_CLANG) -D__TARGET_ARCH_$(LINUX_ARCH) \ 127 $(EXTRA_CFLAGS) \ 128 $(BPFHEADER) \ 129 -DKERNEL_LESS_5_2 \ 130 -target bpfel -c $< -o $(subst kern/,user/bytecode/,$(subst .c,_core$(KERNEL_LESS_5_2_PREFIX),$<)) \ 131 -fno-ident -fdebug-compilation-dir . -g -D__BPF_TARGET_MISSING="GCC error \"The eBPF is using target specific macros, please provide -target\"" \ 132 -MD -MP 133 134 .PHONY: autogen 135 autogen: .checkver_$(CMD_BPFTOOL) 136 $(AUTOGENCMD) 137 138 .PHONY: ebpf 139 ebpf: autogen $(KERN_OBJECTS) 140 141 .PHONY: ebpf_noncore 142 ebpf_noncore: prepare $(KERN_OBJECTS_NOCORE) 143 144 .PHONY: $(KERN_OBJECTS_NOCORE) 145 $(KERN_OBJECTS_NOCORE): %.nocore: %.c \ 146 | .checkver_$(CMD_CLANG) \ 147 .checkver_$(CMD_GO) 148 $(CMD_CLANG) \ 149 $(EXTRA_CFLAGS_NOCORE) \ 150 $(BPFHEADER) \ 151 -I $(KERN_SRC_PATH)/arch/$(LINUX_ARCH)/include \ 152 -I $(KERN_BUILD_PATH)/arch/$(LINUX_ARCH)/include/generated \ 153 -I $(KERN_SRC_PATH)/include \ 154 -I $(KERN_SRC_PATH)/arch/$(LINUX_ARCH)/include/uapi \ 155 -I $(KERN_BUILD_PATH)/arch/$(LINUX_ARCH)/include/generated/uapi \ 156 -I $(KERN_SRC_PATH)/include/uapi \ 157 -I $(KERN_BUILD_PATH)/include/generated/uapi \ 158 -c $< \ 159 -o - |$(CMD_LLC) \ 160 -march=bpf \ 161 -filetype=obj \ 162 -o $(subst kern/,user/bytecode/,$(subst .c,_noncore.o,$<)) 163 $(CMD_CLANG) \ 164 $(EXTRA_CFLAGS_NOCORE) \ 165 $(BPFHEADER) \ 166 -I $(KERN_SRC_PATH)/arch/$(LINUX_ARCH)/include \ 167 -I $(KERN_BUILD_PATH)/arch/$(LINUX_ARCH)/include/generated \ 168 -I $(KERN_SRC_PATH)/include \ 169 -I $(KERN_SRC_PATH)/arch/$(LINUX_ARCH)/include/uapi \ 170 -I $(KERN_BUILD_PATH)/arch/$(LINUX_ARCH)/include/generated/uapi \ 171 -I $(KERN_SRC_PATH)/include/uapi \ 172 -I $(KERN_BUILD_PATH)/include/generated/uapi \ 173 -DKERNEL_LESS_5_2 \ 174 -c $< \ 175 -o - |$(CMD_LLC) \ 176 -march=bpf \ 177 -filetype=obj \ 178 -o $(subst kern/,user/bytecode/,$(subst .c,_noncore$(KERNEL_LESS_5_2_PREFIX),$<)) 179 180 .PHONY: assets 181 assets: \ 182 .checkver_$(CMD_GO) \ 183 ebpf \ 184 ebpf_noncore 185 $(CMD_GO) run github.com/shuLhan/go-bindata/cmd/go-bindata $(IGNORE_LESS52) -pkg assets -o "assets/ebpf_probe.go" $(wildcard ./user/bytecode/*.o) 186 187 .PHONY: assets_noncore 188 assets_noncore: \ 189 .checkver_$(CMD_GO) \ 190 ebpf_noncore 191 $(CMD_GO) run github.com/shuLhan/go-bindata/cmd/go-bindata $(IGNORE_LESS52) -pkg assets -o "assets/ebpf_probe.go" $(wildcard ./user/bytecode/*.o) 192 193 194 .PHONY: $(TARGET_LIBPCAP) 195 $(TARGET_LIBPCAP): 196 test -f ./lib/libpcap/configure || git submodule update --init 197 cd lib/libpcap && \ 198 CC=$(CMD_CC_PREFIX)$(CMD_CC) AR=$(CMD_AR_PREFIX)$(CMD_AR) CFLAGS="-O2 -g -gdwarf-4 -static" ./configure --disable-rdma --disable-shared --disable-usb \ 199 --disable-netmap --disable-bluetooth --disable-dbus --without-libnl \ 200 --without-dpdk --without-dag --without-septel --without-snf \ 201 --without-gcc --with-pcap=linux --disable-ipv6\ 202 --without-turbocap --host=$(LIBPCAP_ARCH) && \ 203 CC=$(CMD_CC_PREFIX)$(CMD_CC) AR=$(CMD_AR_PREFIX)$(CMD_AR) make 204 205 .PHONY: build 206 build: \ 207 .checkver_$(CMD_GO) \ 208 $(TARGET_LIBPCAP) \ 209 assets \ 210 assets_noncore 211 $(call allow-override,VERSION_FLAG,$(UNAME_R)) 212 $(call gobuild, $(ANDROID)) 213 214 215 .PHONY: build_noncore 216 build_noncore: \ 217 .checkver_$(CMD_GO) \ 218 $(TARGET_LIBPCAP) \ 219 assets_noncore 220 $(call allow-override,VERSION_FLAG,$(HOST_ARCH)) 221 $(call gobuild, $(ANDROID)) 222 223 # Format the code 224 .PHONY: format 225 format: 226 @echo " -> Formatting code" 227 @clang-format -i -style=$(STYLE) kern/*.c 228 @clang-format -i -style=$(STYLE) kern/common.h 229 @clang-format -i -style=$(STYLE) kern/openssl_masterkey.h 230 @clang-format -i -style=$(STYLE) kern/openssl_masterkey_3.0.h 231 @clang-format -i -style=$(STYLE) kern/openssl_masterkey_3.2.h 232 @clang-format -i -style=$(STYLE) kern/boringssl_masterkey.h 233 @clang-format -i -style=$(STYLE) utils/*.c