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 101b038af9SJan StancekINSTALL ?= install 111b038af9SJan Stancekprefix ?= /usr 121b038af9SJan Stancekdatarootdir ?= $(prefix)/share 131b038af9SJan Stancekdocdir ?= $(datarootdir)/doc 141b038af9SJan Stancekincludedir ?= $(prefix)/include 151b038af9SJan 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 221b038af9SJan StancekTOOL_RST:=../pyynl/ynl_gen_rst.py 2386878f14SJakub Kicinski 241b038af9SJan StancekSPECS_DIR:=../../../../Documentation/netlink/specs 256bab77ceSJakub KicinskiSPECS_PATHS=$(wildcard $(SPECS_DIR)/*.yaml) 26*e06c9d25SJakub KicinskiGENS_UNSUP=conntrack nftables 276bab77ceSJakub KicinskiGENS=$(filter-out ${GENS_UNSUP},$(patsubst $(SPECS_DIR)/%.yaml,%,${SPECS_PATHS})) 2886878f14SJakub KicinskiSRCS=$(patsubst %,%-user.c,${GENS}) 2986878f14SJakub KicinskiHDRS=$(patsubst %,%-user.h,${GENS}) 3086878f14SJakub KicinskiOBJS=$(patsubst %,%-user.o,${GENS}) 3186878f14SJakub Kicinski 321b038af9SJan StancekSPECS_PATHS=$(wildcard $(SPECS_DIR)/*.yaml) 331b038af9SJan StancekSPECS=$(patsubst $(SPECS_DIR)/%.yaml,%,${SPECS_PATHS}) 341b038af9SJan StancekRSTS=$(patsubst %,%.rst,${SPECS}) 351b038af9SJan Stancek 361b038af9SJan Stancekall: protos.a $(HDRS) $(SRCS) $(KHDRS) $(KSRCS) $(UAPI) $(RSTS) 3786878f14SJakub Kicinski 3886878f14SJakub Kicinskiprotos.a: $(OBJS) 3986878f14SJakub Kicinski @echo -e "\tAR $@" 4086878f14SJakub Kicinski @ar rcs $@ $(OBJS) 4186878f14SJakub Kicinski 421b038af9SJan Stancek%-user.h: $(SPECS_DIR)/%.yaml $(TOOL) 4386878f14SJakub Kicinski @echo -e "\tGEN $@" 44cb7fb0aaSJakub Kicinski @$(TOOL) --mode user --header --spec $< -o $@ $(YNL_GEN_ARG_$*) 4586878f14SJakub Kicinski 461b038af9SJan Stancek%-user.c: $(SPECS_DIR)/%.yaml $(TOOL) 4786878f14SJakub Kicinski @echo -e "\tGEN $@" 48cb7fb0aaSJakub Kicinski @$(TOOL) --mode user --source --spec $< -o $@ $(YNL_GEN_ARG_$*) 4986878f14SJakub Kicinski 5086878f14SJakub Kicinski%-user.o: %-user.c %-user.h 5186878f14SJakub Kicinski @echo -e "\tCC $@" 52f0ec58d5SJakub Kicinski @$(COMPILE.c) $(CFLAGS_$*) -o $@ $< 5386878f14SJakub Kicinski 541b038af9SJan Stancek%.rst: $(SPECS_DIR)/%.yaml $(TOOL_RST) 551b038af9SJan Stancek @echo -e "\tGEN_RST $@" 561b038af9SJan Stancek @$(TOOL_RST) -o $@ -i $< 571b038af9SJan Stancek 5886878f14SJakub Kicinskiclean: 5986878f14SJakub Kicinski rm -f *.o 6086878f14SJakub Kicinski 614e887471SJakub Kicinskidistclean: clean 621b038af9SJan Stancek rm -f *.c *.h *.a *.rst 6386878f14SJakub Kicinski 6486878f14SJakub Kicinskiregen: 6586878f14SJakub Kicinski @../ynl-regen.sh 6686878f14SJakub Kicinski 671b038af9SJan Stancekinstall-headers: $(HDRS) 681b038af9SJan Stancek @echo -e "\tINSTALL generated headers" 691b038af9SJan Stancek @$(INSTALL) -d $(DESTDIR)$(includedir)/ynl 701b038af9SJan Stancek @$(INSTALL) -m 0644 *.h $(DESTDIR)$(includedir)/ynl/ 711b038af9SJan Stancek 721b038af9SJan Stancekinstall-rsts: $(RSTS) 731b038af9SJan Stancek @echo -e "\tINSTALL generated docs" 741b038af9SJan Stancek @$(INSTALL) -d $(DESTDIR)$(docdir)/ynl 751b038af9SJan Stancek @$(INSTALL) -m 0644 $(RSTS) $(DESTDIR)$(docdir)/ynl/ 761b038af9SJan Stancek 771b038af9SJan Stancekinstall-specs: 781b038af9SJan Stancek @echo -e "\tINSTALL specs" 791b038af9SJan Stancek @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl 801b038af9SJan Stancek @$(INSTALL) -m 0644 ../../../../Documentation/netlink/*.yaml $(DESTDIR)$(datarootdir)/ynl/ 811b038af9SJan Stancek @$(INSTALL) -d $(DESTDIR)$(datarootdir)/ynl/specs 821b038af9SJan Stancek @$(INSTALL) -m 0644 $(SPECS_DIR)/*.yaml $(DESTDIR)$(datarootdir)/ynl/specs/ 831b038af9SJan Stancek 841b038af9SJan Stancekinstall: install-headers install-rsts install-specs 851b038af9SJan Stancek 861b038af9SJan Stancek.PHONY: all clean distclean regen install install-headers install-rsts install-specs 8786878f14SJakub Kicinski.DEFAULT_GOAL: all 88