186878f14SJakub Kicinski# SPDX-License-Identifier: GPL-2.0 286878f14SJakub Kicinski 386878f14SJakub KicinskiCC=gcc 405a318b4SJan StancekCFLAGS += -std=gnu11 -O2 -W -Wall -Wextra -Wno-unused-parameter -Wshadow \ 5f0ec58d5SJakub Kicinski -I../lib/ -idirafter $(UAPI_PATH) 686878f14SJakub Kicinskiifeq ("$(DEBUG)","1") 786878f14SJakub Kicinski CFLAGS += -g -fsanitize=address -fsanitize=leak -static-libasan 886878f14SJakub Kicinskiendif 986878f14SJakub Kicinski 10*1b038af9SJan StancekINSTALL ?= install 11*1b038af9SJan Stancekprefix ?= /usr 12*1b038af9SJan Stancekdatarootdir ?= $(prefix)/share 13*1b038af9SJan Stancekdocdir ?= $(datarootdir)/doc 14*1b038af9SJan Stancekincludedir ?= $(prefix)/include 15*1b038af9SJan Stancek 16f0ec58d5SJakub Kicinskiinclude ../Makefile.deps 17f0ec58d5SJakub Kicinski 182d7be507SJakub KicinskiYNL_GEN_ARG_ethtool:=--user-header linux/ethtool_netlink.h \ 192d7be507SJakub Kicinski --exclude-op stats-get 202d7be507SJakub Kicinski 21ab88c2b3SJan StancekTOOL:=../pyynl/ynl_gen_c.py 22*1b038af9SJan StancekTOOL_RST:=../pyynl/ynl_gen_rst.py 2386878f14SJakub Kicinski 24*1b038af9SJan StancekSPECS_DIR:=../../../../Documentation/netlink/specs 25d2866539SJakub KicinskiGENS_PATHS=$(shell grep -nrI --files-without-match \ 26d2866539SJakub Kicinski 'protocol: netlink' \ 27*1b038af9SJan Stancek $(SPECS_DIR)) 28*1b038af9SJan StancekGENS=$(patsubst $(SPECS_DIR)/%.yaml,%,${GENS_PATHS}) 2986878f14SJakub KicinskiSRCS=$(patsubst %,%-user.c,${GENS}) 3086878f14SJakub KicinskiHDRS=$(patsubst %,%-user.h,${GENS}) 3186878f14SJakub KicinskiOBJS=$(patsubst %,%-user.o,${GENS}) 3286878f14SJakub Kicinski 33*1b038af9SJan StancekSPECS_PATHS=$(wildcard $(SPECS_DIR)/*.yaml) 34*1b038af9SJan StancekSPECS=$(patsubst $(SPECS_DIR)/%.yaml,%,${SPECS_PATHS}) 35*1b038af9SJan StancekRSTS=$(patsubst %,%.rst,${SPECS}) 36*1b038af9SJan Stancek 37*1b038af9SJan Stancekall: protos.a $(HDRS) $(SRCS) $(KHDRS) $(KSRCS) $(UAPI) $(RSTS) 3886878f14SJakub Kicinski 3986878f14SJakub Kicinskiprotos.a: $(OBJS) 4086878f14SJakub Kicinski @echo -e "\tAR $@" 4186878f14SJakub Kicinski @ar rcs $@ $(OBJS) 4286878f14SJakub Kicinski 43*1b038af9SJan Stancek%-user.h: $(SPECS_DIR)/%.yaml $(TOOL) 4486878f14SJakub Kicinski @echo -e "\tGEN $@" 45cb7fb0aaSJakub Kicinski @$(TOOL) --mode user --header --spec $< -o $@ $(YNL_GEN_ARG_$*) 4686878f14SJakub Kicinski 47*1b038af9SJan Stancek%-user.c: $(SPECS_DIR)/%.yaml $(TOOL) 4886878f14SJakub Kicinski @echo -e "\tGEN $@" 49cb7fb0aaSJakub Kicinski @$(TOOL) --mode user --source --spec $< -o $@ $(YNL_GEN_ARG_$*) 5086878f14SJakub Kicinski 5186878f14SJakub Kicinski%-user.o: %-user.c %-user.h 5286878f14SJakub Kicinski @echo -e "\tCC $@" 53f0ec58d5SJakub Kicinski @$(COMPILE.c) $(CFLAGS_$*) -o $@ $< 5486878f14SJakub Kicinski 55*1b038af9SJan Stancek%.rst: $(SPECS_DIR)/%.yaml $(TOOL_RST) 56*1b038af9SJan Stancek @echo -e "\tGEN_RST $@" 57*1b038af9SJan Stancek @$(TOOL_RST) -o $@ -i $< 58*1b038af9SJan Stancek 5986878f14SJakub Kicinskiclean: 6086878f14SJakub Kicinski rm -f *.o 6186878f14SJakub Kicinski 624e887471SJakub Kicinskidistclean: clean 63*1b038af9SJan Stancek rm -f *.c *.h *.a *.rst 6486878f14SJakub Kicinski 6586878f14SJakub Kicinskiregen: 6686878f14SJakub Kicinski @../ynl-regen.sh 6786878f14SJakub Kicinski 68*1b038af9SJan Stancekinstall-headers: $(HDRS) 69*1b038af9SJan Stancek @echo -e "\tINSTALL generated headers" 70*1b038af9SJan Stancek @$(INSTALL) -d $(DESTDIR)$(includedir)/ynl 71*1b038af9SJan Stancek @$(INSTALL) -m 0644 *.h $(DESTDIR)$(includedir)/ynl/ 72*1b038af9SJan Stancek 73*1b038af9SJan Stancekinstall-rsts: $(RSTS) 74*1b038af9SJan Stancek @echo -e "\tINSTALL generated docs" 75*1b038af9SJan Stancek @$(INSTALL) -d $(DESTDIR)$(docdir)/ynl 76*1b038af9SJan Stancek @$(INSTALL) -m 0644 $(RSTS) $(DESTDIR)$(docdir)/ynl/ 77*1b038af9SJan Stancek 78*1b038af9SJan Stancekinstall-specs: 79*1b038af9SJan Stancek @echo -e "\tINSTALL specs" 80*1b038af9SJan Stancek @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl 81*1b038af9SJan Stancek @$(INSTALL) -m 0644 ../../../../Documentation/netlink/*.yaml $(DESTDIR)$(datarootdir)/ynl/ 82*1b038af9SJan Stancek @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl/specs 83*1b038af9SJan Stancek @$(INSTALL) -m 0644 $(SPECS_DIR)/*.yaml $(DESTDIR)$(datarootdir)/ynl/specs/ 84*1b038af9SJan Stancek 85*1b038af9SJan Stancekinstall: install-headers install-rsts install-specs 86*1b038af9SJan Stancek 87*1b038af9SJan Stancek.PHONY: all clean distclean regen install install-headers install-rsts install-specs 8886878f14SJakub Kicinski.DEFAULT_GOAL: all 89