1*4bc4b131SDaniel Bristot de OliveiraNAME := rv 2*4bc4b131SDaniel Bristot de Oliveira# Follow the kernel version 3*4bc4b131SDaniel Bristot de OliveiraVERSION := $(shell cat VERSION 2> /dev/null || make -sC ../../.. kernelversion | grep -v make) 4*4bc4b131SDaniel Bristot de Oliveira 5*4bc4b131SDaniel Bristot de Oliveira# From libtracefs: 6*4bc4b131SDaniel Bristot de Oliveira# Makefiles suck: This macro sets a default value of $(2) for the 7*4bc4b131SDaniel Bristot de Oliveira# variable named by $(1), unless the variable has been set by 8*4bc4b131SDaniel Bristot de Oliveira# environment or command line. This is necessary for CC and AR 9*4bc4b131SDaniel Bristot de Oliveira# because make sets default values, so the simpler ?= approach 10*4bc4b131SDaniel Bristot de Oliveira# won't work as expected. 11*4bc4b131SDaniel Bristot de Oliveiradefine allow-override 12*4bc4b131SDaniel Bristot de Oliveira $(if $(or $(findstring environment,$(origin $(1))),\ 13*4bc4b131SDaniel Bristot de Oliveira $(findstring command line,$(origin $(1)))),,\ 14*4bc4b131SDaniel Bristot de Oliveira $(eval $(1) = $(2))) 15*4bc4b131SDaniel Bristot de Oliveiraendef 16*4bc4b131SDaniel Bristot de Oliveira 17*4bc4b131SDaniel Bristot de Oliveira# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix. 18*4bc4b131SDaniel Bristot de Oliveira$(call allow-override,CC,$(CROSS_COMPILE)gcc) 19*4bc4b131SDaniel Bristot de Oliveira$(call allow-override,AR,$(CROSS_COMPILE)ar) 20*4bc4b131SDaniel Bristot de Oliveira$(call allow-override,STRIP,$(CROSS_COMPILE)strip) 21*4bc4b131SDaniel Bristot de Oliveira$(call allow-override,PKG_CONFIG,pkg-config) 22*4bc4b131SDaniel Bristot de Oliveira$(call allow-override,LD_SO_CONF_PATH,/etc/ld.so.conf.d/) 23*4bc4b131SDaniel Bristot de Oliveira$(call allow-override,LDCONFIG,ldconfig) 24*4bc4b131SDaniel Bristot de Oliveira 25*4bc4b131SDaniel Bristot de OliveiraINSTALL = install 26*4bc4b131SDaniel Bristot de OliveiraMKDIR = mkdir 27*4bc4b131SDaniel Bristot de OliveiraFOPTS := -flto=auto -ffat-lto-objects -fexceptions -fstack-protector-strong \ 28*4bc4b131SDaniel Bristot de Oliveira -fasynchronous-unwind-tables -fstack-clash-protection 29*4bc4b131SDaniel Bristot de OliveiraWOPTS := -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -Wno-maybe-uninitialized 30*4bc4b131SDaniel Bristot de Oliveira 31*4bc4b131SDaniel Bristot de OliveiraTRACEFS_HEADERS := $$($(PKG_CONFIG) --cflags libtracefs) 32*4bc4b131SDaniel Bristot de Oliveira 33*4bc4b131SDaniel Bristot de OliveiraCFLAGS := -O -g -DVERSION=\"$(VERSION)\" $(FOPTS) $(MOPTS) $(WOPTS) $(TRACEFS_HEADERS) $(EXTRA_CFLAGS) -I include 34*4bc4b131SDaniel Bristot de OliveiraLDFLAGS := -ggdb $(EXTRA_LDFLAGS) 35*4bc4b131SDaniel Bristot de OliveiraLIBS := $$($(PKG_CONFIG) --libs libtracefs) 36*4bc4b131SDaniel Bristot de Oliveira 37*4bc4b131SDaniel Bristot de OliveiraSRC := $(wildcard src/*.c) 38*4bc4b131SDaniel Bristot de OliveiraHDR := $(wildcard src/*.h) 39*4bc4b131SDaniel Bristot de OliveiraOBJ := $(SRC:.c=.o) 40*4bc4b131SDaniel Bristot de OliveiraDIRS := src 41*4bc4b131SDaniel Bristot de OliveiraFILES := Makefile README.txt 42*4bc4b131SDaniel Bristot de OliveiraCEXT := bz2 43*4bc4b131SDaniel Bristot de OliveiraTARBALL := $(NAME)-$(VERSION).tar.$(CEXT) 44*4bc4b131SDaniel Bristot de OliveiraTAROPTS := -cvjf $(TARBALL) 45*4bc4b131SDaniel Bristot de OliveiraBINDIR := /usr/bin 46*4bc4b131SDaniel Bristot de OliveiraDATADIR := /usr/share 47*4bc4b131SDaniel Bristot de OliveiraMANDIR := $(DATADIR)/man 48*4bc4b131SDaniel Bristot de OliveiraLICDIR := $(DATADIR)/licenses 49*4bc4b131SDaniel Bristot de OliveiraSRCTREE := $(or $(BUILD_SRC),$(CURDIR)) 50*4bc4b131SDaniel Bristot de Oliveira 51*4bc4b131SDaniel Bristot de OliveiraLIBTRACEEVENT_MIN_VERSION = 1.5 52*4bc4b131SDaniel Bristot de OliveiraLIBTRACEFS_MIN_VERSION = 1.3 53*4bc4b131SDaniel Bristot de Oliveira 54*4bc4b131SDaniel Bristot de Oliveira.PHONY: all warnings show_warnings 55*4bc4b131SDaniel Bristot de Oliveiraall: warnings rv 56*4bc4b131SDaniel Bristot de Oliveira 57*4bc4b131SDaniel Bristot de OliveiraTEST_LIBTRACEEVENT = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEEVENT_MIN_VERSION) libtraceevent > /dev/null 2>&1 || echo n") 58*4bc4b131SDaniel Bristot de Oliveiraifeq ("$(TEST_LIBTRACEEVENT)", "n") 59*4bc4b131SDaniel Bristot de OliveiraWARNINGS = show_warnings 60*4bc4b131SDaniel Bristot de OliveiraMISSING_LIBS += echo "** libtraceevent version $(LIBTRACEEVENT_MIN_VERSION) or higher"; 61*4bc4b131SDaniel Bristot de OliveiraMISSING_PACKAGES += "libtraceevent-devel" 62*4bc4b131SDaniel Bristot de OliveiraMISSING_SOURCE += echo "** https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/ "; 63*4bc4b131SDaniel Bristot de Oliveiraendif 64*4bc4b131SDaniel Bristot de Oliveira 65*4bc4b131SDaniel Bristot de OliveiraTEST_LIBTRACEFS = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEFS_MIN_VERSION) libtracefs > /dev/null 2>&1 || echo n") 66*4bc4b131SDaniel Bristot de Oliveiraifeq ("$(TEST_LIBTRACEFS)", "n") 67*4bc4b131SDaniel Bristot de OliveiraWARNINGS = show_warnings 68*4bc4b131SDaniel Bristot de OliveiraMISSING_LIBS += echo "** libtracefs version $(LIBTRACEFS_MIN_VERSION) or higher"; 69*4bc4b131SDaniel Bristot de OliveiraMISSING_PACKAGES += "libtracefs-devel" 70*4bc4b131SDaniel Bristot de OliveiraMISSING_SOURCE += echo "** https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/ "; 71*4bc4b131SDaniel Bristot de Oliveiraendif 72*4bc4b131SDaniel Bristot de Oliveira 73*4bc4b131SDaniel Bristot de Oliveiradefine show_dependencies 74*4bc4b131SDaniel Bristot de Oliveira @echo "********************************************"; \ 75*4bc4b131SDaniel Bristot de Oliveira echo "** NOTICE: Failed build dependencies"; \ 76*4bc4b131SDaniel Bristot de Oliveira echo "**"; \ 77*4bc4b131SDaniel Bristot de Oliveira echo "** Required Libraries:"; \ 78*4bc4b131SDaniel Bristot de Oliveira $(MISSING_LIBS) \ 79*4bc4b131SDaniel Bristot de Oliveira echo "**"; \ 80*4bc4b131SDaniel Bristot de Oliveira echo "** Consider installing the latest libtracefs from your"; \ 81*4bc4b131SDaniel Bristot de Oliveira echo "** distribution, e.g., 'dnf install $(MISSING_PACKAGES)' on Fedora,"; \ 82*4bc4b131SDaniel Bristot de Oliveira echo "** or from source:"; \ 83*4bc4b131SDaniel Bristot de Oliveira echo "**"; \ 84*4bc4b131SDaniel Bristot de Oliveira $(MISSING_SOURCE) \ 85*4bc4b131SDaniel Bristot de Oliveira echo "**"; \ 86*4bc4b131SDaniel Bristot de Oliveira echo "********************************************" 87*4bc4b131SDaniel Bristot de Oliveiraendef 88*4bc4b131SDaniel Bristot de Oliveira 89*4bc4b131SDaniel Bristot de Oliveirashow_warnings: 90*4bc4b131SDaniel Bristot de Oliveira $(call show_dependencies); 91*4bc4b131SDaniel Bristot de Oliveira 92*4bc4b131SDaniel Bristot de Oliveiraifneq ("$(WARNINGS)", "") 93*4bc4b131SDaniel Bristot de OliveiraERROR_OUT = $(error Please add the necessary dependencies) 94*4bc4b131SDaniel Bristot de Oliveira 95*4bc4b131SDaniel Bristot de Oliveirawarnings: $(WARNINGS) 96*4bc4b131SDaniel Bristot de Oliveira $(ERROR_OUT) 97*4bc4b131SDaniel Bristot de Oliveiraendif 98*4bc4b131SDaniel Bristot de Oliveira 99*4bc4b131SDaniel Bristot de Oliveirarv: $(OBJ) 100*4bc4b131SDaniel Bristot de Oliveira $(CC) -o rv $(LDFLAGS) $(OBJ) $(LIBS) 101*4bc4b131SDaniel Bristot de Oliveira 102*4bc4b131SDaniel Bristot de Oliveira.PHONY: install 103*4bc4b131SDaniel Bristot de Oliveirainstall: 104*4bc4b131SDaniel Bristot de Oliveira $(MKDIR) -p $(DESTDIR)$(BINDIR) 105*4bc4b131SDaniel Bristot de Oliveira $(INSTALL) rv -m 755 $(DESTDIR)$(BINDIR) 106*4bc4b131SDaniel Bristot de Oliveira $(STRIP) $(DESTDIR)$(BINDIR)/rv 107*4bc4b131SDaniel Bristot de Oliveira 108*4bc4b131SDaniel Bristot de Oliveira.PHONY: clean tarball 109*4bc4b131SDaniel Bristot de Oliveiraclean: 110*4bc4b131SDaniel Bristot de Oliveira @test ! -f rv || rm rv 111*4bc4b131SDaniel Bristot de Oliveira @test ! -f $(TARBALL) || rm -f $(TARBALL) 112*4bc4b131SDaniel Bristot de Oliveira @rm -rf *~ $(OBJ) *.tar.$(CEXT) 113*4bc4b131SDaniel Bristot de Oliveira 114*4bc4b131SDaniel Bristot de Oliveiratarball: clean 115*4bc4b131SDaniel Bristot de Oliveira rm -rf $(NAME)-$(VERSION) && mkdir $(NAME)-$(VERSION) 116*4bc4b131SDaniel Bristot de Oliveira echo $(VERSION) > $(NAME)-$(VERSION)/VERSION 117*4bc4b131SDaniel Bristot de Oliveira cp -r $(DIRS) $(FILES) $(NAME)-$(VERSION) 118*4bc4b131SDaniel Bristot de Oliveira tar $(TAROPTS) --exclude='*~' $(NAME)-$(VERSION) 119*4bc4b131SDaniel Bristot de Oliveira rm -rf $(NAME)-$(VERSION) 120