1d5327480SEmil Tsalapatis# SPDX-License-Identifier: LGPL-2.1 OR BSD-2-Clause 2d5327480SEmil Tsalapatis# Copyright (c) 2026 Meta Platforms, Inc. and affiliates. 3d5327480SEmil Tsalapatis 4d5327480SEmil Tsalapatis.PHONY: clean 5d5327480SEmil Tsalapatis 6d5327480SEmil Tsalapatis# Defaults for standalone builds 7d5327480SEmil Tsalapatis 8d5327480SEmil TsalapatisCLANG ?= clang 9d5327480SEmil TsalapatisBPFTOOL ?= bpftool 10d5327480SEmil TsalapatisLDLIBS ?= -lbpf -lelf -lz -lrt -lpthread -lzstd 11d5327480SEmil Tsalapatis 12d5327480SEmil Tsalapatisifeq ($(V),1) 13d5327480SEmil TsalapatisQ = 14d5327480SEmil Tsalapatismsg = 15d5327480SEmil Tsalapatiselse 16d5327480SEmil TsalapatisQ ?= @ 17d5327480SEmil Tsalapatismsg = @printf ' %-8s%s %s%s\n' "$(1)" "$(if $(2), [$(2)])" "$(notdir $(3))" "$(if $(4), $(4))"; 18d5327480SEmil Tsalapatisendif 19d5327480SEmil Tsalapatis 20d5327480SEmil TsalapatisIS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \ 21d5327480SEmil Tsalapatis grep 'define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__') 22d5327480SEmil TsalapatisBPF_TARGET_ENDIAN ?= $(if $(IS_LITTLE_ENDIAN),--target=bpfel,--target=bpfeb) 23d5327480SEmil Tsalapatis 24d5327480SEmil TsalapatisLIBARENA=$(abspath .) 25d5327480SEmil TsalapatisBPFDIR=$(abspath $(LIBARENA)/..) 26d5327480SEmil Tsalapatis 27d5327480SEmil TsalapatisINCLUDE_DIR ?= $(BPFDIR)/tools/include 28d5327480SEmil TsalapatisLIBBPF_INCLUDE ?= $(INCLUDE_DIR) 29d5327480SEmil Tsalapatis 30d5327480SEmil Tsalapatis# Scan src/ and selftests/ to generate the final binaries 31d5327480SEmil TsalapatisLIBARENA_SOURCES = $(wildcard $(LIBARENA)/src/*.bpf.c) $(wildcard $(LIBARENA)/selftests/*.bpf.c) 32d5327480SEmil TsalapatisLIBARENA_OBJECTS = $(notdir $(LIBARENA_SOURCES:.bpf.c=.bpf.o)) 33*cfc00618SEmil TsalapatisLIBARENA_OBJECTS_ASAN = $(notdir $(LIBARENA_SOURCES:.bpf.c=_asan.bpf.o)) 34d5327480SEmil Tsalapatis 35d5327480SEmil TsalapatisINCLUDES = -I$(LIBARENA)/include -I$(BPFDIR) 36d5327480SEmil Tsalapatisifneq ($(INCLUDE_DIR),) 37d5327480SEmil TsalapatisINCLUDES += -I$(INCLUDE_DIR) 38d5327480SEmil Tsalapatisendif 39d5327480SEmil Tsalapatisifneq ($(LIBBPF_INCLUDE),) 40d5327480SEmil TsalapatisINCLUDES += -I$(LIBBPF_INCLUDE) 41d5327480SEmil Tsalapatisendif 42d5327480SEmil Tsalapatis 43*cfc00618SEmil TsalapatisASAN_FLAGS = -fsanitize=kernel-address -fno-stack-protector -fno-builtin 44*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-instrument-address-spaces=1 -mllvm -asan-shadow-addr-space=1 45*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-use-stack-safety=0 -mllvm -asan-stack=0 46*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-kernel=1 47*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-constructor-kind=none 48*cfc00618SEmil TsalapatisASAN_FLAGS += -mllvm -asan-destructor-kind=none 49*cfc00618SEmil Tsalapatis 50d5327480SEmil Tsalapatis# ENABLE_ATOMICS_TESTS required because we use arena spinlocks 51d5327480SEmil Tsalapatisoverride BPF_CFLAGS += -DENABLE_ATOMICS_TESTS 52d5327480SEmil Tsalapatisoverride BPF_CFLAGS += -O2 -g 53d5327480SEmil Tsalapatisoverride BPF_CFLAGS += -Wno-incompatible-pointer-types-discards-qualifiers 54d5327480SEmil Tsalapatis# Required for suppressing harmless vmlinux.h-related warnings. 55d5327480SEmil Tsalapatisoverride BPF_CFLAGS += -Wno-missing-declarations 56d5327480SEmil Tsalapatisoverride BPF_CFLAGS += $(INCLUDES) 57d5327480SEmil Tsalapatis 58d5327480SEmil TsalapatisCFLAGS = -O2 -no-pie 59d5327480SEmil TsalapatisCFLAGS += $(INCLUDES) 60d5327480SEmil Tsalapatis 61d5327480SEmil Tsalapatisvpath %.bpf.c $(LIBARENA)/src $(LIBARENA)/selftests 62d5327480SEmil Tsalapatisvpath %.c $(LIBARENA)/src $(LIBARENA)/selftests 63d5327480SEmil Tsalapatis 64*cfc00618SEmil Tsalapatisskeletons: libarena.skel.h libarena_asan.skel.h 65*cfc00618SEmil Tsalapatis.PHONY: skeletons 66*cfc00618SEmil Tsalapatis 67*cfc00618SEmil Tsalapatislibarena_asan.skel.h: libarena_asan.bpf.o 68*cfc00618SEmil Tsalapatis $(call msg,GEN-SKEL,libarena,$@) 69*cfc00618SEmil Tsalapatis $(Q)$(BPFTOOL) gen skeleton $< name "libarena_asan" > $@ 70*cfc00618SEmil Tsalapatis 71d5327480SEmil Tsalapatislibarena.skel.h: libarena.bpf.o 72d5327480SEmil Tsalapatis $(call msg,GEN-SKEL,libarena,$@) 73d5327480SEmil Tsalapatis $(Q)$(BPFTOOL) gen skeleton $< name "libarena" > $@ 74d5327480SEmil Tsalapatis 75*cfc00618SEmil Tsalapatislibarena_asan.bpf.o: $(LIBARENA_OBJECTS_ASAN) 76*cfc00618SEmil Tsalapatis $(call msg,GEN-OBJ,libarena,$@) 77*cfc00618SEmil Tsalapatis $(Q)$(BPFTOOL) gen object $@ $^ 78*cfc00618SEmil Tsalapatis 79d5327480SEmil Tsalapatislibarena.bpf.o: $(LIBARENA_OBJECTS) 80d5327480SEmil Tsalapatis $(call msg,GEN-OBJ,libarena,$@) 81d5327480SEmil Tsalapatis $(Q)$(BPFTOOL) gen object $@ $^ 82d5327480SEmil Tsalapatis 83*cfc00618SEmil Tsalapatis%_asan.bpf.o: %.bpf.c 84*cfc00618SEmil Tsalapatis $(call msg,CLNG-BPF,libarena,$@) 85*cfc00618SEmil Tsalapatis $(Q)$(CLANG) $(BPF_CFLAGS) $(ASAN_FLAGS) -DBPF_ARENA_ASAN $(BPF_TARGET_ENDIAN) -c $< -o $@ 86*cfc00618SEmil Tsalapatis 87d5327480SEmil Tsalapatis%.bpf.o: %.bpf.c 88d5327480SEmil Tsalapatis $(call msg,CLNG-BPF,libarena,$@) 89d5327480SEmil Tsalapatis $(Q)$(CLANG) $(BPF_CFLAGS) $(BPF_TARGET_ENDIAN) -c $< -o $@ 90d5327480SEmil Tsalapatis 91d5327480SEmil Tsalapatisclean: 92*cfc00618SEmil Tsalapatis $(Q)rm -f *.skel.h *.bpf.o *.linked*.o 93