| 1 |
|
| 2 |
|
| 3 |
|
| 4 | include ../../../build/Build.include
|
| 5 | include ../../../scripts/Makefile.arch
|
| 6 | include ../../../scripts/Makefile.include
|
| 7 |
|
| 8 | TEST_PROGS := hid-core.sh
|
| 9 | TEST_PROGS += hid-apple.sh
|
| 10 | TEST_PROGS += hid-gamepad.sh
|
| 11 | TEST_PROGS += hid-ite.sh
|
| 12 | TEST_PROGS += hid-keyboard.sh
|
| 13 | TEST_PROGS += hid-mouse.sh
|
| 14 | TEST_PROGS += hid-multitouch.sh
|
| 15 | TEST_PROGS += hid-sony.sh
|
| 16 | TEST_PROGS += hid-tablet.sh
|
| 17 | TEST_PROGS += hid-usb_crash.sh
|
| 18 | TEST_PROGS += hid-wacom.sh
|
| 19 |
|
| 20 | TEST_FILES := run-hid-tools-tests.sh
|
| 21 | TEST_FILES += tests
|
| 22 |
|
| 23 | CXX ?= $(CROSS_COMPILE)g++
|
| 24 |
|
| 25 | HOSTPKG_CONFIG := pkg-config
|
| 26 |
|
| 27 | CFLAGS += -g -O0 -rdynamic -Wall -Werror -I$(OUTPUT) $(KHDR_INCLUDES)
|
| 28 | CFLAGS += -I$(OUTPUT)/tools/include
|
| 29 |
|
| 30 | LDLIBS += -lelf -lz -lrt -lpthread
|
| 31 |
|
| 32 |
|
| 33 | ifneq ($(LLVM),)
|
| 34 | CFLAGS += -Wno-unused-command-line-argument
|
| 35 | endif
|
| 36 |
|
| 37 |
|
| 38 | TEST_GEN_PROGS = hid_bpf hidraw
|
| 39 |
|
| 40 |
|
| 41 |
|
| 42 |
|
| 43 |
|
| 44 |
|
| 45 | ifeq ($(V),1)
|
| 46 | msg =
|
| 47 | else
|
| 48 | msg = @printf ' %-8s%s %s%s\n' "$(1)" "$(if $(2), [$(2)])" "$(notdir $(3))" "$(if $(4), $(4))";
|
| 49 | MAKEFLAGS += --no-print-directory
|
| 50 | submake_extras := feature_display=0
|
| 51 | endif
|
| 52 |
|
| 53 |
|
| 54 | OVERRIDE_TARGETS := 1
|
| 55 | override define CLEAN
|
| 56 | $(call msg,CLEAN)
|
| 57 | $(Q)$(RM) -r $(TEST_GEN_PROGS)
|
| 58 | $(Q)$(RM) -r $(EXTRA_CLEAN)
|
| 59 | endef
|
| 60 |
|
| 61 | include ../lib.mk
|
| 62 |
|
| 63 | TOOLSDIR := $(top_srcdir)/tools
|
| 64 | LIBDIR := $(TOOLSDIR)/lib
|
| 65 | BPFDIR := $(LIBDIR)/bpf
|
| 66 | TOOLSINCDIR := $(TOOLSDIR)/include
|
| 67 | BPFTOOLDIR := $(TOOLSDIR)/bpf/bpftool
|
| 68 | SCRATCH_DIR := $(OUTPUT)/tools
|
| 69 | BUILD_DIR := $(SCRATCH_DIR)/build
|
| 70 | INCLUDE_DIR := $(SCRATCH_DIR)/include
|
| 71 | BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
|
| 72 | ifneq ($(CROSS_COMPILE),)
|
| 73 | HOST_BUILD_DIR := $(BUILD_DIR)/host
|
| 74 | HOST_SCRATCH_DIR := $(OUTPUT)/host-tools
|
| 75 | HOST_INCLUDE_DIR := $(HOST_SCRATCH_DIR)/include
|
| 76 | else
|
| 77 | HOST_BUILD_DIR := $(BUILD_DIR)
|
| 78 | HOST_SCRATCH_DIR := $(SCRATCH_DIR)
|
| 79 | HOST_INCLUDE_DIR := $(INCLUDE_DIR)
|
| 80 | endif
|
| 81 | HOST_BPFOBJ := $(HOST_BUILD_DIR)/libbpf/libbpf.a
|
| 82 | RESOLVE_BTFIDS := $(HOST_BUILD_DIR)/resolve_btfids/resolve_btfids
|
| 83 |
|
| 84 | VMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \
|
| 85 | $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \
|
| 86 | ../../../../vmlinux \
|
| 87 | /sys/kernel/btf/vmlinux \
|
| 88 | /boot/vmlinux-$(shell uname -r)
|
| 89 | VMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS))))
|
| 90 | ifeq ($(VMLINUX_BTF),)
|
| 91 | $(error Cannot find a vmlinux for VMLINUX_BTF at any of "$(VMLINUX_BTF_PATHS)")
|
| 92 | endif
|
| 93 |
|
| 94 |
|
| 95 |
|
| 96 |
|
| 97 |
|
| 98 | $(notdir $(TEST_GEN_PROGS)): %: $(OUTPUT)/% ;
|
| 99 |
|
| 100 |
|
| 101 | MAKE_DIRS := $(sort $(BUILD_DIR)/libbpf $(HOST_BUILD_DIR)/libbpf \
|
| 102 | $(HOST_BUILD_DIR)/bpftool $(HOST_BUILD_DIR)/resolve_btfids \
|
| 103 | $(INCLUDE_DIR))
|
| 104 | $(MAKE_DIRS):
|
| 105 | $(call msg,MKDIR,,$@)
|
| 106 | $(Q)mkdir -p $@
|
| 107 |
|
| 108 | DEFAULT_BPFTOOL := $(HOST_SCRATCH_DIR)/sbin/bpftool
|
| 109 |
|
| 110 | TEST_GEN_PROGS_EXTENDED += $(DEFAULT_BPFTOOL)
|
| 111 |
|
| 112 | $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(BPFOBJ)
|
| 113 |
|
| 114 | BPFTOOL ?= $(DEFAULT_BPFTOOL)
|
| 115 | $(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile) \
|
| 116 | $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/bpftool
|
| 117 | $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \
|
| 118 | ARCH= CROSS_COMPILE= CC=$(HOSTCC) LD=$(HOSTLD) \
|
| 119 | EXTRA_CFLAGS='-g -O0' \
|
| 120 | OUTPUT=$(HOST_BUILD_DIR)/bpftool/ \
|
| 121 | LIBBPF_OUTPUT=$(HOST_BUILD_DIR)/libbpf/ \
|
| 122 | LIBBPF_DESTDIR=$(HOST_SCRATCH_DIR)/ \
|
| 123 | prefix= DESTDIR=$(HOST_SCRATCH_DIR)/ install-bin
|
| 124 |
|
| 125 | $(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
|
| 126 | | $(BUILD_DIR)/libbpf
|
| 127 | $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
|
| 128 | EXTRA_CFLAGS='-g -O0' \
|
| 129 | DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
|
| 130 |
|
| 131 | ifneq ($(BPFOBJ),$(HOST_BPFOBJ))
|
| 132 | $(HOST_BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
|
| 133 | | $(HOST_BUILD_DIR)/libbpf
|
| 134 | $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \
|
| 135 | EXTRA_CFLAGS='-g -O0' ARCH= CROSS_COMPILE= \
|
| 136 | OUTPUT=$(HOST_BUILD_DIR)/libbpf/ CC=$(HOSTCC) LD=$(HOSTLD) \
|
| 137 | DESTDIR=$(HOST_SCRATCH_DIR)/ prefix= all install_headers
|
| 138 | endif
|
| 139 |
|
| 140 | $(INCLUDE_DIR)/vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) | $(INCLUDE_DIR)
|
| 141 | ifeq ($(VMLINUX_H),)
|
| 142 | $(call msg,GEN,,$@)
|
| 143 | $(Q)$(BPFTOOL) btf dump file $(VMLINUX_BTF) format c > $@
|
| 144 | else
|
| 145 | $(call msg,CP,,$@)
|
| 146 | $(Q)cp "$(VMLINUX_H)" $@
|
| 147 | endif
|
| 148 |
|
| 149 | $(RESOLVE_BTFIDS): $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/resolve_btfids \
|
| 150 | $(TOOLSDIR)/bpf/resolve_btfids/main.c \
|
| 151 | $(TOOLSDIR)/lib/rbtree.c \
|
| 152 | $(TOOLSDIR)/lib/zalloc.c \
|
| 153 | $(TOOLSDIR)/lib/string.c \
|
| 154 | $(TOOLSDIR)/lib/ctype.c \
|
| 155 | $(TOOLSDIR)/lib/str_error_r.c
|
| 156 | $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/resolve_btfids \
|
| 157 | CC=$(HOSTCC) LD=$(HOSTLD) AR=$(HOSTAR) \
|
| 158 | LIBBPF_INCLUDE=$(HOST_INCLUDE_DIR) \
|
| 159 | OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ)
|
| 160 |
|
| 161 |
|
| 162 |
|
| 163 |
|
| 164 |
|
| 165 |
|
| 166 |
|
| 167 | define get_sys_includes
|
| 168 | $(shell $(1) -v -E - </dev/null 2>&1 \
|
| 169 | | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
|
| 170 | $(shell $(1) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}')
|
| 171 | endef
|
| 172 |
|
| 173 |
|
| 174 | IS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \
|
| 175 | grep 'define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__')
|
| 176 | MENDIAN=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian)
|
| 177 |
|
| 178 | CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG))
|
| 179 | BPF_CFLAGS = -g -Werror -D__TARGET_ARCH_$(SRCARCH) $(MENDIAN) \
|
| 180 | -Wno-microsoft-anon-tag \
|
| 181 | -fms-extensions \
|
| 182 | -I$(INCLUDE_DIR)
|
| 183 |
|
| 184 | CLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \
|
| 185 | -Wno-compare-distinct-pointer-types
|
| 186 |
|
| 187 |
|
| 188 |
|
| 189 |
|
| 190 |
|
| 191 | define CLANG_BPF_BUILD_RULE
|
| 192 | $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2)
|
| 193 | $(Q)$(CLANG) $3 -O2 --target=bpf -c $1 -mcpu=v3 -o $2
|
| 194 | endef
|
| 195 |
|
| 196 | define CLANG_NOALU32_BPF_BUILD_RULE
|
| 197 | $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2)
|
| 198 | $(Q)$(CLANG) $3 -O2 --target=bpf -c $1 -mcpu=v2 -o $2
|
| 199 | endef
|
| 200 |
|
| 201 | define GCC_BPF_BUILD_RULE
|
| 202 | $(call msg,GCC-BPF,$(TRUNNER_BINARY),$2)
|
| 203 | $(Q)$(BPF_GCC) $3 -O2 -c $1 -o $2
|
| 204 | endef
|
| 205 |
|
| 206 | BPF_PROGS_DIR := progs
|
| 207 | BPF_BUILD_RULE := CLANG_BPF_BUILD_RULE
|
| 208 | BPF_SRCS := $(notdir $(wildcard $(BPF_PROGS_DIR)/*.c))
|
| 209 | BPF_OBJS := $(patsubst %.c,$(OUTPUT)/%.bpf.o, $(BPF_SRCS))
|
| 210 | BPF_SKELS := $(patsubst %.c,$(OUTPUT)/%.skel.h, $(BPF_SRCS))
|
| 211 | TEST_GEN_FILES += $(BPF_OBJS)
|
| 212 |
|
| 213 | $(BPF_PROGS_DIR)-bpfobjs := y
|
| 214 | $(BPF_OBJS): $(OUTPUT)/%.bpf.o: \
|
| 215 | $(BPF_PROGS_DIR)/%.c \
|
| 216 | $(wildcard $(BPF_PROGS_DIR)/*.h) \
|
| 217 | $(INCLUDE_DIR)/vmlinux.h \
|
| 218 | $(wildcard $(BPFDIR)/hid_bpf_*.h) \
|
| 219 | $(wildcard $(BPFDIR)/*.bpf.h) \
|
| 220 | | $(OUTPUT) $(BPFOBJ)
|
| 221 | $(call $(BPF_BUILD_RULE),$<,$@, $(BPF_CFLAGS))
|
| 222 |
|
| 223 | $(BPF_SKELS): %.skel.h: %.bpf.o $(BPFTOOL) | $(OUTPUT)
|
| 224 | $(call msg,GEN-SKEL,$(BINARY),$@)
|
| 225 | $(Q)$(BPFTOOL) gen object $(<:.o=.linked1.o) $<
|
| 226 | $(Q)$(BPFTOOL) gen skeleton $(<:.o=.linked1.o) name $(notdir $(<:.bpf.o=)) > $@
|
| 227 |
|
| 228 | $(OUTPUT)/%.o: %.c $(BPF_SKELS) hid_common.h
|
| 229 | $(call msg,CC,,$@)
|
| 230 | $(Q)$(CC) $(CFLAGS) -c $(filter %.c,$^) $(LDLIBS) -o $@
|
| 231 |
|
| 232 | $(OUTPUT)/%: $(OUTPUT)/%.o
|
| 233 | $(call msg,BINARY,,$@)
|
| 234 | $(Q)$(LINK.c) $^ $(LDLIBS) -o $@
|
| 235 |
|
| 236 | EXTRA_CLEAN := $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) feature bpftool \
|
| 237 | $(addprefix $(OUTPUT)/,*.o *.skel.h no_alu32)
|