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