summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/net/ynl/Makefile.deps28
-rw-r--r--tools/net/ynl/generated/Makefile6
-rw-r--r--tools/net/ynl/samples/Makefile4
3 files changed, 35 insertions, 3 deletions
diff --git a/tools/net/ynl/Makefile.deps b/tools/net/ynl/Makefile.deps
new file mode 100644
index 000000000000..524fc4bb586b
--- /dev/null
+++ b/tools/net/ynl/Makefile.deps
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0
+
+# Try to include uAPI headers from the kernel uapi/ path.
+# Most code under tools/ requires the respective kernel uAPI headers
+# to be copied to tools/include. The duplication is annoying.
+# All the family headers should be self-contained. We avoid the copying
+# by selectively including just the uAPI header of the family directly
+# from the kernel sources.
+
+UAPI_PATH:=../../../../include/uapi/
+
+# If the header does not exist at all in the system path - let the
+# compiler fall back to the kernel header via -Idirafter.
+# GCC seems to ignore header guard if the header is different, so we need
+# to specify the -D$(hdr_guard).
+# And we need to define HASH indirectly because GNU Make 4.2 wants it escaped
+# and Gnu Make 4.4 wants it without escaping.
+
+HASH := \#
+
+get_hdr_inc=$(if $(shell echo "$(HASH)include <linux/$(2)>" | \
+ cpp >>/dev/null 2>/dev/null && echo yes),\
+ -D$(1) -include $(UAPI_PATH)/linux/$(2))
+
+CFLAGS_devlink:=$(call get_hdr_inc,_UAPI_LINUX_DEVLINK_H_,devlink.h)
+CFLAGS_ethtool:=$(call get_hdr_inc,_LINUX_ETHTOOL_NETLINK_H_,ethtool_netlink.h)
+CFLAGS_handshake:=$(call get_hdr_inc,_UAPI_LINUX_HANDSHAKE_H,handshake.h)
+CFLAGS_netdev:=$(call get_hdr_inc,_UAPI_LINUX_NETDEV_H,netdev.h)
diff --git a/tools/net/ynl/generated/Makefile b/tools/net/ynl/generated/Makefile
index f15c24893296..f8817d2e56e4 100644
--- a/tools/net/ynl/generated/Makefile
+++ b/tools/net/ynl/generated/Makefile
@@ -2,11 +2,13 @@
CC=gcc
CFLAGS=-std=gnu11 -O2 -W -Wall -Wextra -Wno-unused-parameter -Wshadow \
- -I../lib/
+ -I../lib/ -idirafter $(UAPI_PATH)
ifeq ("$(DEBUG)","1")
CFLAGS += -g -fsanitize=address -fsanitize=leak -static-libasan
endif
+include ../Makefile.deps
+
YNL_GEN_ARG_ethtool:=--user-header linux/ethtool_netlink.h \
--exclude-op stats-get
@@ -33,7 +35,7 @@ protos.a: $(OBJS)
%-user.o: %-user.c %-user.h
@echo -e "\tCC $@"
- @$(COMPILE.c) -c -o $@ $<
+ @$(COMPILE.c) $(CFLAGS_$*) -o $@ $<
clean:
rm -f *.o
diff --git a/tools/net/ynl/samples/Makefile b/tools/net/ynl/samples/Makefile
index 714316cad45f..f2db8bb78309 100644
--- a/tools/net/ynl/samples/Makefile
+++ b/tools/net/ynl/samples/Makefile
@@ -1,8 +1,10 @@
# SPDX-License-Identifier: GPL-2.0
+include ../Makefile.deps
+
CC=gcc
CFLAGS=-std=gnu11 -O2 -W -Wall -Wextra -Wno-unused-parameter -Wshadow \
- -I../lib/ -I../generated/
+ -I../lib/ -I../generated/ -idirafter $(UAPI_PATH)
ifeq ("$(DEBUG)","1")
CFLAGS += -g -fsanitize=address -fsanitize=leak -static-libasan
endif