diff --git a/ci/publish-bpf-sdk.sh b/ci/publish-bpf-sdk.sh index 05975a79d7..8942e966f2 100755 --- a/ci/publish-bpf-sdk.sh +++ b/ci/publish-bpf-sdk.sh @@ -14,7 +14,7 @@ echo --- Creating tarball git rev-parse HEAD ) > bpf-sdk/version.txt - cp -ra programs/bpf/c/* bpf-sdk/ + cp -ra programs/bpf/c/sdk/* bpf-sdk/ tar jvcf bpf-sdk.tar.bz2 bpf-sdk/ ) diff --git a/programs/bpf/c/makefile b/programs/bpf/c/makefile index a19ff77ef7..31e5bcfd02 100644 --- a/programs/bpf/c/makefile +++ b/programs/bpf/c/makefile @@ -1,105 +1 @@ - -ifneq ($(V),1) -_@ :=@ -endif - -INC_DIRS := -I. -SRC_DIR := ./src -OUT_DIR := ./out - -OS=$(uname) -ifeq ($(OS),Darwin) -LLVM_DIR := $(brew --prefix llvm) -else -LLVM_DIR := /usr/local/opt/llvm -endif - -CC = $(LLVM_DIR)/bin/clang -CC_FLAGS = \ - -Werror \ - -target \ - bpf -O2 \ - -emit-llvm \ - -fno-builtin - -LD = $(LLVM_DIR)/bin/llc -LD_FLAGS = \ - -march=bpf \ - -filetype=obj \ - -function-sections - -OBJ_DUMP = $(LLVM_DIR)/bin/llvm-objdump -OBJ_DUMP_FLAGS = \ - -color \ - -source \ - -disassemble - -help: - @echo 'BPF Program makefile' - @echo '' - @echo 'This makefile will build BPF Programs from C source files into ELFs' - @echo '' - @echo 'Assumptions:' - @echo ' - Programs are a single .c source file (may include headers)' - @echo ' - Programs are located in the source directory: $(SRC_DIR)' - @echo ' - Programs are named by their basename (eg. file name:foo.c -> program name:foo)' - @echo ' - Output files will be placed in the directory: $(OUT_DIR)' - @echo '' - @echo 'User settings' - @echo ' - The following setting are overridable on the command line, default values shown' - @echo ' - Show commands:' - @echo ' V=1' - @echo ' - List of include dirs:' - @echo ' INC_DIRS=$(INC_DIRS)' - @echo ' - Location of source files:' - @echo ' SRC_DIR=$(SRC_DIR)' - @echo ' - Location to place output files:' - @echo ' OUT_DIR=$(OUT_DIR)' - @echo ' - Location of LLVM:' - @echo ' LLVM_DIR=$(LLVM_DIR)' - @echo '' - @echo 'Usage:' - @echo ' - make help - This help message' - @echo ' - make all - Builds all the programs in the directory: $(SRC_DIR)' - @echo ' - make clean - Cleans all programs' - @echo ' - make dump_ - Dumps the contents of the program to stdout' - @echo ' - make - Build a single program by name' - @echo '' - @echo 'Available programs:' - $(foreach name, $(PROGRAM_NAMES), @echo ' - $(name)'$(\n)) - @echo '' - @echo 'Example:' - @echo ' - Assuming a programed named foo (src/foo.c)' - @echo ' - make foo INC_DIRS='-I. -Isrc'' - @echo ' - make dump_foo' - -.PRECIOUS: $(OUT_DIR)/%.bc -$(OUT_DIR)/%.bc: $(SRC_DIR)/%.c - $(_@)mkdir -p $(OUT_DIR) - $(_@)$(CC) $(CC_FLAGS) $(INC_DIRS) -o $@ -c $< -MMD -MF $(@:.bc=.d) - -.PRECIOUS: $(OUT_DIR)/%.o -$(OUT_DIR)/%.o: $(OUT_DIR)/%.bc - $(_@)$(LD) $(LD_FLAGS) -o $@ $< - --include $(wildcard $(OUT_DIR)/*.d) - -PROGRAM_NAMES := $(notdir $(basename $(wildcard src/*.c))) - -define \n - - -endef - -%: $(addprefix $(OUT_DIR)/, %.o) - @echo $@ up to date - -.PHONY: help all dump clean - -all: $(PROGRAM_NAMES) - -dump_%: % - $(_@)$(OBJ_DUMP) $(OBJ_DUMP_FLAGS) $(addprefix $(OUT_DIR)/, $(addsuffix .o, $<)) - -clean: - $(_@)rm -rf $(OUT_DIR) +include sdk/bpf.mk diff --git a/programs/bpf/c/README.md b/programs/bpf/c/sdk/README.md similarity index 100% rename from programs/bpf/c/README.md rename to programs/bpf/c/sdk/README.md diff --git a/programs/bpf/c/sdk/bpf.mk b/programs/bpf/c/sdk/bpf.mk new file mode 100644 index 0000000000..ca17a37440 --- /dev/null +++ b/programs/bpf/c/sdk/bpf.mk @@ -0,0 +1,107 @@ + +all: +.PHONY: help all clean + +ifneq ($(V),1) +_@ :=@ +endif + +INC_DIRS := +SYSTEM_INC_DIRS := -isystem $(dir $(lastword $(MAKEFILE_LIST)))/inc +SRC_DIR := ./src +OUT_DIR := ./out + +OS=$(uname) +ifeq ($(OS),Darwin) +LLVM_DIR := $(brew --prefix llvm) +else +LLVM_DIR := /usr/local/opt/llvm +endif + +CC = $(LLVM_DIR)/bin/clang +CC_FLAGS = \ + -Werror \ + -target \ + bpf -O2 \ + -emit-llvm \ + -fno-builtin + +LD = $(LLVM_DIR)/bin/llc +LD_FLAGS = \ + -march=bpf \ + -filetype=obj \ + -function-sections + +OBJ_DUMP = $(LLVM_DIR)/bin/llvm-objdump +OBJ_DUMP_FLAGS = \ + -color \ + -source \ + -disassemble + +help: + @echo 'BPF Program makefile' + @echo '' + @echo 'This makefile will build BPF Programs from C source files into ELFs' + @echo '' + @echo 'Assumptions:' + @echo ' - Programs are a single .c source file (may include headers)' + @echo ' - Programs are located in the source directory: $(SRC_DIR)' + @echo ' - Programs are named by their basename (eg. file name:foo.c -> program name:foo)' + @echo ' - Output files will be placed in the directory: $(OUT_DIR)' + @echo '' + @echo 'User settings' + @echo ' - The following setting are overridable on the command line, default values shown' + @echo ' - Show commands:' + @echo ' V=1' + @echo ' - List of include dirs:' + @echo ' INC_DIRS=$(INC_DIRS)' + @echo ' - Location of source files:' + @echo ' SRC_DIR=$(SRC_DIR)' + @echo ' - Location to place output files:' + @echo ' OUT_DIR=$(OUT_DIR)' + @echo ' - Location of LLVM:' + @echo ' LLVM_DIR=$(LLVM_DIR)' + @echo '' + @echo 'Usage:' + @echo ' - make help - This help message' + @echo ' - make all - Builds all the programs in the directory: $(SRC_DIR)' + @echo ' - make clean - Cleans all programs' + @echo ' - make dump_ - Dumps the contents of the program to stdout' + @echo ' - make - Build a single program by name' + @echo '' + @echo 'Available programs:' + $(foreach name, $(PROGRAM_NAMES), @echo ' - $(name)'$(\n)) + @echo '' + @echo 'Example:' + @echo ' - Assuming a programed named foo (src/foo.c)' + @echo ' - make foo' + @echo ' - make dump_foo' + +.PRECIOUS: $(OUT_DIR)/%.bc +$(OUT_DIR)/%.bc: $(SRC_DIR)/%.c + $(_@)mkdir -p $(OUT_DIR) + $(_@)$(CC) $(CC_FLAGS) $(SYSTEM_INC_DIRS) $(INC_DIRS) -o $@ -c $< -MMD -MF $(@:.bc=.d) + +.PRECIOUS: $(OUT_DIR)/%.o +$(OUT_DIR)/%.o: $(OUT_DIR)/%.bc + $(_@)$(LD) $(LD_FLAGS) -o $@ $< + +-include $(wildcard $(OUT_DIR)/*.d) + +PROGRAM_NAMES := $(notdir $(basename $(wildcard src/*.c))) + +define \n + + +endef + +all: $(PROGRAM_NAMES) + +%: $(addprefix $(OUT_DIR)/, %.o) + @echo $@ up to date + +dump_%: % + $(_@)$(OBJ_DUMP) $(OBJ_DUMP_FLAGS) $(addprefix $(OUT_DIR)/, $(addsuffix .o, $<)) + +clean: + rm -rf $(OUT_DIR) diff --git a/programs/bpf/c/sol_bpf_c.h b/programs/bpf/c/sdk/inc/sol_bpf_c.h similarity index 100% rename from programs/bpf/c/sol_bpf_c.h rename to programs/bpf/c/sdk/inc/sol_bpf_c.h diff --git a/programs/bpf/c/src/move_funds.c b/programs/bpf/c/src/move_funds.c index a46f78cd95..2f35171126 100644 --- a/programs/bpf/c/src/move_funds.c +++ b/programs/bpf/c/src/move_funds.c @@ -3,7 +3,7 @@ * another */ -#include "sol_bpf_c.h" +#include /** * Numer of SolKeyedAccounts expected. The program should bail if an diff --git a/programs/bpf/c/src/noop.c b/programs/bpf/c/src/noop.c index b887f5be0f..5662aab3c0 100644 --- a/programs/bpf/c/src/noop.c +++ b/programs/bpf/c/src/noop.c @@ -3,7 +3,7 @@ * passed to it */ -#include "sol_bpf_c.h" +#include /** * Numer of SolKeyedAccounts expected. The program should bail if an diff --git a/programs/bpf/c/src/tictactoe.c b/programs/bpf/c/src/tictactoe.c index 00b1c8c405..af9311d448 100644 --- a/programs/bpf/c/src/tictactoe.c +++ b/programs/bpf/c/src/tictactoe.c @@ -2,8 +2,7 @@ * @brief TicTacToe Dashboard C-based BPF program */ -#include "sol_bpf_c.h" - +#include #include "tictactoe.h" typedef enum { diff --git a/programs/bpf/c/src/tictactoe_dashboard.c b/programs/bpf/c/src/tictactoe_dashboard.c index 9eee71a0ec..789276b994 100644 --- a/programs/bpf/c/src/tictactoe_dashboard.c +++ b/programs/bpf/c/src/tictactoe_dashboard.c @@ -2,8 +2,7 @@ * @brief TicTacToe C-based BPF program */ -#include "sol_bpf_c.h" - +#include #include "tictactoe.h" #define MAX_GAMES_TRACKED 5