# # SPDX-License-Identifier: AGPL-3.0-only # Copyright (c) 2022-2023, daeuniverse Organization # # The development version of clang is distributed as the 'clang' binary, # while stable/released versions have a version number attached. # Pin the default clang to a stable version. CLANG ?= clang STRIP ?= llvm-strip CFLAGS := -O2 -Wall -Werror $(CFLAGS) TARGET ?= bpfel,bpfeb OUTPUT ?= dae MAX_MATCH_SET_LEN ?= 64 CFLAGS := -DMAX_MATCH_SET_LEN=$(MAX_MATCH_SET_LEN) $(CFLAGS) NOSTRIP ?= n STRIP_PATH := $(shell command -v $(STRIP) 2>/dev/null) ifeq ($(strip $(NOSTRIP)),y) STRIP_FLAG := -no-strip else ifeq ($(wildcard $(STRIP_PATH)),) STRIP_FLAG := -no-strip else STRIP_FLAG := -strip=$(STRIP_PATH) endif GOARCH ?= $(shell go env GOARCH) # Do NOT remove the line below. This line is for CI. #export GOMODCACHE=$(PWD)/go-mod # Get version from .git. date=$(shell git log -1 --format="%cd" --date=short | sed s/-//g) count=$(shell git rev-list --count HEAD) commit=$(shell git rev-parse --short HEAD) ifeq ($(wildcard .git/.),) VERSION ?= unstable-0.nogit else VERSION ?= unstable-$(date).r$(count).$(commit) endif # amd64 and arm64 use PIE build mode by default ifeq ($(GOARCH),$(filter $(GOARCH),amd64 arm64)) BUILD_MODE ?= -buildmode=pie endif BUILD_ARGS := -trimpath -ldflags "-s -w -X github.com/daeuniverse/dae/cmd.Version=$(VERSION) -X github.com/daeuniverse/dae/common/consts.MaxMatchSetLen_=$(MAX_MATCH_SET_LEN)" $(BUILD_MODE) $(BUILD_ARGS) .PHONY: clean-ebpf ebpf dae submodule submodules ## Begin Dae Build dae: export GOOS=linux dae: ebpf @echo $(CFLAGS) go build -o $(OUTPUT) $(BUILD_ARGS) . ## End Dae Build ## Begin Git Submodules .gitmodules.d.mk: .gitmodules @set -e && \ submodules=$$(grep '\[submodule "' .gitmodules | cut -d'"' -f2 | tr '\n' ' ' | tr ' \n' '\n') && \ echo "submodule_paths=$${submodules}" > $@ -include .gitmodules.d.mk $(submodule_paths): .gitmodules.d.mk git submodule update --init --recursive -- $@ && \ touch $@ submodule submodules: $(submodule_paths) @if [ -z "$(submodule_paths)" ]; then \ rm -f .gitmodules.d.mk; \ echo "Failed to generate submodules list. Please try again."; \ exit 1; \ fi ## End Git Submodules ## Begin Ebpf clean-ebpf: @rm -f control/bpf_bpf*.go && \ rm -f control/bpf_bpf*.o fmt: go fmt ./... # $BPF_CLANG is used in go:generate invocations. ebpf: export BPF_CLANG := $(CLANG) ebpf: export BPF_STRIP_FLAG := $(STRIP_FLAG) ebpf: export BPF_CFLAGS := $(CFLAGS) ebpf: export BPF_TARGET := $(TARGET) ebpf: submodule clean-ebpf @unset GOOS && \ unset GOARCH && \ unset GOARM && \ echo $(STRIP_FLAG) && \ go generate ./control/control.go ## End Ebpf