162306a36Sopenharmony_ciNAME	:=	rtla
262306a36Sopenharmony_ci# Follow the kernel version
362306a36Sopenharmony_ciVERSION :=	$(shell cat VERSION 2> /dev/null || make -sC ../../.. kernelversion | grep -v make)
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci# From libtracefs:
662306a36Sopenharmony_ci# Makefiles suck: This macro sets a default value of $(2) for the
762306a36Sopenharmony_ci# variable named by $(1), unless the variable has been set by
862306a36Sopenharmony_ci# environment or command line. This is necessary for CC and AR
962306a36Sopenharmony_ci# because make sets default values, so the simpler ?= approach
1062306a36Sopenharmony_ci# won't work as expected.
1162306a36Sopenharmony_cidefine allow-override
1262306a36Sopenharmony_ci  $(if $(or $(findstring environment,$(origin $(1))),\
1362306a36Sopenharmony_ci            $(findstring command line,$(origin $(1)))),,\
1462306a36Sopenharmony_ci    $(eval $(1) = $(2)))
1562306a36Sopenharmony_ciendef
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix.
1862306a36Sopenharmony_ci$(call allow-override,CC,$(CROSS_COMPILE)gcc)
1962306a36Sopenharmony_ci$(call allow-override,AR,$(CROSS_COMPILE)ar)
2062306a36Sopenharmony_ci$(call allow-override,STRIP,$(CROSS_COMPILE)strip)
2162306a36Sopenharmony_ci$(call allow-override,PKG_CONFIG,pkg-config)
2262306a36Sopenharmony_ci$(call allow-override,LD_SO_CONF_PATH,/etc/ld.so.conf.d/)
2362306a36Sopenharmony_ci$(call allow-override,LDCONFIG,ldconfig)
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciINSTALL	=	install
2662306a36Sopenharmony_ciMKDIR	=	mkdir
2762306a36Sopenharmony_ciFOPTS	:=	-flto=auto -ffat-lto-objects -fexceptions -fstack-protector-strong \
2862306a36Sopenharmony_ci		-fasynchronous-unwind-tables -fstack-clash-protection
2962306a36Sopenharmony_ciWOPTS	:= 	-Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -Wno-maybe-uninitialized
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciifeq ($(CC),clang)
3262306a36Sopenharmony_ci  FOPTS := $(filter-out -ffat-lto-objects, $(FOPTS))
3362306a36Sopenharmony_ci  WOPTS := $(filter-out -Wno-maybe-uninitialized, $(WOPTS))
3462306a36Sopenharmony_ciendif
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ciTRACEFS_HEADERS	:= $$($(PKG_CONFIG) --cflags libtracefs)
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciCFLAGS	:=	-O -g -DVERSION=\"$(VERSION)\" $(FOPTS) $(MOPTS) $(WOPTS) $(TRACEFS_HEADERS) $(EXTRA_CFLAGS)
3962306a36Sopenharmony_ciLDFLAGS	:=	-flto=auto -ggdb $(EXTRA_LDFLAGS)
4062306a36Sopenharmony_ciLIBS	:=	$$($(PKG_CONFIG) --libs libtracefs)
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciSRC	:=	$(wildcard src/*.c)
4362306a36Sopenharmony_ciHDR	:=	$(wildcard src/*.h)
4462306a36Sopenharmony_ciOBJ	:=	$(SRC:.c=.o)
4562306a36Sopenharmony_ciDIRS	:=	src
4662306a36Sopenharmony_ciFILES	:=	Makefile README.txt
4762306a36Sopenharmony_ciCEXT	:=	bz2
4862306a36Sopenharmony_ciTARBALL	:=	$(NAME)-$(VERSION).tar.$(CEXT)
4962306a36Sopenharmony_ciTAROPTS	:=	-cvjf $(TARBALL)
5062306a36Sopenharmony_ciBINDIR	:=	/usr/bin
5162306a36Sopenharmony_ciDATADIR	:=	/usr/share
5262306a36Sopenharmony_ciDOCDIR	:=	$(DATADIR)/doc
5362306a36Sopenharmony_ciMANDIR	:=	$(DATADIR)/man
5462306a36Sopenharmony_ciLICDIR	:=	$(DATADIR)/licenses
5562306a36Sopenharmony_ciSRCTREE	:=	$(or $(BUILD_SRC),$(CURDIR))
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci# If running from the tarball, man pages are stored in the Documentation
5862306a36Sopenharmony_ci# dir. If running from the kernel source, man pages are stored in
5962306a36Sopenharmony_ci# Documentation/tools/rtla/.
6062306a36Sopenharmony_ciifneq ($(wildcard Documentation/.*),)
6162306a36Sopenharmony_ciDOCSRC	=	Documentation/
6262306a36Sopenharmony_cielse
6362306a36Sopenharmony_ciDOCSRC	=	$(SRCTREE)/../../../Documentation/tools/rtla/
6462306a36Sopenharmony_ciendif
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ciLIBTRACEEVENT_MIN_VERSION = 1.5
6762306a36Sopenharmony_ciLIBTRACEFS_MIN_VERSION = 1.3
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci.PHONY:	all warnings show_warnings
7062306a36Sopenharmony_ciall:	warnings rtla
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ciTEST_LIBTRACEEVENT = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEEVENT_MIN_VERSION) libtraceevent > /dev/null 2>&1 || echo n")
7362306a36Sopenharmony_ciifeq ("$(TEST_LIBTRACEEVENT)", "n")
7462306a36Sopenharmony_ciWARNINGS = show_warnings
7562306a36Sopenharmony_ciMISSING_LIBS += echo "**   libtraceevent version $(LIBTRACEEVENT_MIN_VERSION) or higher";
7662306a36Sopenharmony_ciMISSING_PACKAGES += "libtraceevent-devel"
7762306a36Sopenharmony_ciMISSING_SOURCE += echo "**  https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/ ";
7862306a36Sopenharmony_ciendif
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ciTEST_LIBTRACEFS = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEFS_MIN_VERSION) libtracefs > /dev/null 2>&1 || echo n")
8162306a36Sopenharmony_ciifeq ("$(TEST_LIBTRACEFS)", "n")
8262306a36Sopenharmony_ciWARNINGS = show_warnings
8362306a36Sopenharmony_ciMISSING_LIBS += echo "**   libtracefs version $(LIBTRACEFS_MIN_VERSION) or higher";
8462306a36Sopenharmony_ciMISSING_PACKAGES += "libtracefs-devel"
8562306a36Sopenharmony_ciMISSING_SOURCE += echo "**  https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/ ";
8662306a36Sopenharmony_ciendif
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_cidefine show_dependencies
8962306a36Sopenharmony_ci	@echo "********************************************";				\
9062306a36Sopenharmony_ci	echo "** NOTICE: Failed build dependencies";					\
9162306a36Sopenharmony_ci	echo "**";									\
9262306a36Sopenharmony_ci	echo "** Required Libraries:";							\
9362306a36Sopenharmony_ci	$(MISSING_LIBS)									\
9462306a36Sopenharmony_ci	echo "**";									\
9562306a36Sopenharmony_ci	echo "** Consider installing the latest libtracefs from your";			\
9662306a36Sopenharmony_ci	echo "** distribution, e.g., 'dnf install $(MISSING_PACKAGES)' on Fedora,";	\
9762306a36Sopenharmony_ci	echo "** or from source:";							\
9862306a36Sopenharmony_ci	echo "**";									\
9962306a36Sopenharmony_ci	$(MISSING_SOURCE)								\
10062306a36Sopenharmony_ci	echo "**";									\
10162306a36Sopenharmony_ci	echo "********************************************"
10262306a36Sopenharmony_ciendef
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_cishow_warnings:
10562306a36Sopenharmony_ci	$(call show_dependencies);
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ciifneq ("$(WARNINGS)", "")
10862306a36Sopenharmony_ciERROR_OUT = $(error Please add the necessary dependencies)
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ciwarnings: $(WARNINGS)
11162306a36Sopenharmony_ci	$(ERROR_OUT)
11262306a36Sopenharmony_ciendif
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_cirtla: $(OBJ)
11562306a36Sopenharmony_ci	$(CC) -o rtla $(LDFLAGS) $(OBJ) $(LIBS)
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_cistatic: $(OBJ)
11862306a36Sopenharmony_ci	$(CC) -o rtla-static $(LDFLAGS) --static $(OBJ) $(LIBS) -lpthread -ldl
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci.PHONY: install
12162306a36Sopenharmony_ciinstall: doc_install
12262306a36Sopenharmony_ci	$(MKDIR) -p $(DESTDIR)$(BINDIR)
12362306a36Sopenharmony_ci	$(INSTALL) rtla -m 755 $(DESTDIR)$(BINDIR)
12462306a36Sopenharmony_ci	$(STRIP) $(DESTDIR)$(BINDIR)/rtla
12562306a36Sopenharmony_ci	@test ! -f $(DESTDIR)$(BINDIR)/osnoise || rm $(DESTDIR)$(BINDIR)/osnoise
12662306a36Sopenharmony_ci	ln -s rtla $(DESTDIR)$(BINDIR)/osnoise
12762306a36Sopenharmony_ci	@test ! -f $(DESTDIR)$(BINDIR)/hwnoise || rm $(DESTDIR)$(BINDIR)/hwnoise
12862306a36Sopenharmony_ci	ln -s rtla $(DESTDIR)$(BINDIR)/hwnoise
12962306a36Sopenharmony_ci	@test ! -f $(DESTDIR)$(BINDIR)/timerlat || rm $(DESTDIR)$(BINDIR)/timerlat
13062306a36Sopenharmony_ci	ln -s rtla $(DESTDIR)$(BINDIR)/timerlat
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci.PHONY: clean tarball
13362306a36Sopenharmony_ciclean: doc_clean
13462306a36Sopenharmony_ci	@test ! -f rtla || rm rtla
13562306a36Sopenharmony_ci	@test ! -f rtla-static || rm rtla-static
13662306a36Sopenharmony_ci	@test ! -f src/rtla.o || rm src/rtla.o
13762306a36Sopenharmony_ci	@test ! -f $(TARBALL) || rm -f $(TARBALL)
13862306a36Sopenharmony_ci	@rm -rf *~ $(OBJ) *.tar.$(CEXT)
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_citarball: clean
14162306a36Sopenharmony_ci	rm -rf $(NAME)-$(VERSION) && mkdir $(NAME)-$(VERSION)
14262306a36Sopenharmony_ci	echo $(VERSION) > $(NAME)-$(VERSION)/VERSION
14362306a36Sopenharmony_ci	cp -r $(DIRS) $(FILES) $(NAME)-$(VERSION)
14462306a36Sopenharmony_ci	mkdir $(NAME)-$(VERSION)/Documentation/
14562306a36Sopenharmony_ci	cp -rp $(SRCTREE)/../../../Documentation/tools/rtla/* $(NAME)-$(VERSION)/Documentation/
14662306a36Sopenharmony_ci	tar $(TAROPTS) --exclude='*~' $(NAME)-$(VERSION)
14762306a36Sopenharmony_ci	rm -rf $(NAME)-$(VERSION)
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci.PHONY: doc doc_clean doc_install
15062306a36Sopenharmony_cidoc:
15162306a36Sopenharmony_ci	$(MAKE) -C $(DOCSRC)
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_cidoc_clean:
15462306a36Sopenharmony_ci	$(MAKE) -C $(DOCSRC) clean
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_cidoc_install:
15762306a36Sopenharmony_ci	$(MAKE) -C $(DOCSRC) install
158