| H := \# |
| |
| HAVE_C_HEADER = $(shell if echo "$(H)include <$(1)>" | \ |
| $(CC) $(CFLAGS) -E - > /dev/null 2>&1; then echo "$(2)"; \ |
| else echo "$(3)"; fi) |
| |
| HAVE_C_MACRO = $(shell if echo "$(H)include <$(1)>" | \ |
| $(CC) $(CFLAGS) -E - 2>&1 /dev/null | grep $(2) > /dev/null 2>&1; \ |
| then echo 1;else echo 0; fi) |
| |
| HAVE_C_DEF = $(shell if printf '$(H)include <%s>\n$(H)ifdef %s\nHAVE_%s\n$(H)endif\n' \ |
| "$(1)" "$(2)" "$(2)" | \ |
| $(CC) $(CFLAGS) -E - 2>/dev/null | grep HAVE_$(2) > /dev/null 2>&1; \ |
| then echo 1;else echo 0; fi) |
| |
| C_TARGETS := \ |
| bio-bounce-read \ |
| bio-full-trim \ |
| dio-offsets \ |
| loblksize \ |
| loop_change_fd \ |
| loop_get_status_null \ |
| mmap-loss \ |
| mount_clear_sock \ |
| nvme-delay-ioctl \ |
| nvme-passthrough-meta \ |
| ioctl-lbmd-query \ |
| nbdsetsize \ |
| openclose \ |
| sg/dxfer-from-dev \ |
| zbdioctl |
| |
| C_URING_TARGETS := metadata \ |
| nvme-passthru-admin-uring |
| C_UBLK_TARGETS := miniublk |
| |
| HAVE_LIBURING := $(call HAVE_C_MACRO,liburing.h,IORING_OP_URING_CMD) |
| HAVE_UBLK_HEADER := $(call HAVE_C_HEADER,linux/ublk_cmd.h,1) |
| HAVE_NEW_UBLK_INTF := $(call HAVE_C_DEF,linux/ublk_cmd.h,UBLK_U_CMD_START_DEV) |
| |
| CXX_TARGETS := \ |
| discontiguous-io |
| |
| SYZKALLER_TARGETS := \ |
| sg/syzkaller1 |
| |
| TARGETS := $(C_TARGETS) $(CXX_TARGETS) $(SYZKALLER_TARGETS) |
| |
| ifeq ($(HAVE_UBLK_HEADER), 1) |
| ifeq ($(HAVE_NEW_UBLK_INTF), 1) |
| C_URING_TARGETS += $(C_UBLK_TARGETS) |
| else |
| $(info Skip $(C_UBLK_TARGETS) build due to missing new ublk interface(v6.4+)) |
| endif |
| else |
| $(info Skip $(C_UBLK_TARGETS) build due to missing kernel header(v6.0+)) |
| endif |
| |
| ifeq ($(HAVE_LIBURING), 1) |
| TARGETS += $(C_URING_TARGETS) |
| else |
| $(info Skip $(C_URING_TARGETS) build due to missing liburing(2.2+)) |
| endif |
| |
| CONFIG_DEFS := $(call HAVE_C_HEADER,linux/blkzoned.h,-DHAVE_LINUX_BLKZONED_H) |
| |
| override CFLAGS := -O2 -Wall -Wshadow $(CFLAGS) $(CONFIG_DEFS) |
| override CXXFLAGS := -O2 -std=c++11 -Wall -Wextra -Wshadow -Wno-sign-compare \ |
| -Werror $(CXXFLAGS) $(CONFIG_DEFS) |
| URING_FLAGS := -D_GNU_SOURCE |
| URING_LIBS := -lpthread -luring |
| LDFLAGS ?= |
| |
| all: $(TARGETS) |
| |
| clean: |
| rm -f $(TARGETS) |
| |
| install: $(TARGETS) |
| install -m755 -d $(dest) |
| install $(TARGETS) $(dest) |
| |
| $(C_TARGETS): %: %.c |
| $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $^ |
| |
| $(CXX_TARGETS): %: %.cpp |
| $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ |
| |
| $(SYZKALLER_TARGETS): %: %.c |
| $(CC) $(CFLAGS) -Wno-unused-but-set-variable $(LDFLAGS) -o $@ $^ |
| |
| $(C_URING_TARGETS): %: %.c |
| $(CC) $(CFLAGS) $(LDFLAGS) $(URING_FLAGS) -o $@ $^ $(URING_LIBS) |
| |
| .PHONY: all clean install |