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