1*58e6ee5fSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 2*58e6ee5fSAndroid Build Coastguard Worker 3*58e6ee5fSAndroid Build Coastguard Worker# Utils 4*58e6ee5fSAndroid Build Coastguard Worker 5*58e6ee5fSAndroid Build Coastguard Workerifeq ($(BUILDGUI), 1) 6*58e6ee5fSAndroid Build Coastguard Worker GUI = 'GUI ' 7*58e6ee5fSAndroid Build Coastguard Worker GSPACE = 8*58e6ee5fSAndroid Build Coastguard Workerelse 9*58e6ee5fSAndroid Build Coastguard Worker GUI = 10*58e6ee5fSAndroid Build Coastguard Worker GSPACE = " " 11*58e6ee5fSAndroid Build Coastguard Workerendif 12*58e6ee5fSAndroid Build Coastguard Worker 13*58e6ee5fSAndroid Build Coastguard Worker GOBJ = $(GSPACE)$(notdir $(strip $@)) 14*58e6ee5fSAndroid Build Coastguard Worker 15*58e6ee5fSAndroid Build Coastguard Worker 16*58e6ee5fSAndroid Build Coastguard Workerifeq ($(VERBOSE),1) 17*58e6ee5fSAndroid Build Coastguard Worker Q = 18*58e6ee5fSAndroid Build Coastguard Worker S = 19*58e6ee5fSAndroid Build Coastguard Workerelse 20*58e6ee5fSAndroid Build Coastguard Worker Q = @ 21*58e6ee5fSAndroid Build Coastguard Worker S = -s 22*58e6ee5fSAndroid Build Coastguard Workerendif 23*58e6ee5fSAndroid Build Coastguard Worker 24*58e6ee5fSAndroid Build Coastguard Worker# Use empty print_* macros if either SILENT or VERBOSE. 25*58e6ee5fSAndroid Build Coastguard Workerifeq ($(findstring 1,$(SILENT)$(VERBOSE)),1) 26*58e6ee5fSAndroid Build Coastguard Worker print_compile = 27*58e6ee5fSAndroid Build Coastguard Worker print_app_build = 28*58e6ee5fSAndroid Build Coastguard Worker print_fpic_compile = 29*58e6ee5fSAndroid Build Coastguard Worker print_shared_lib_compile = 30*58e6ee5fSAndroid Build Coastguard Worker print_plugin_obj_compile = 31*58e6ee5fSAndroid Build Coastguard Worker print_plugin_build = 32*58e6ee5fSAndroid Build Coastguard Worker print_install = 33*58e6ee5fSAndroid Build Coastguard Worker print_uninstall = 34*58e6ee5fSAndroid Build Coastguard Worker print_update = 35*58e6ee5fSAndroid Build Coastguard Worker print_asciidoc = 36*58e6ee5fSAndroid Build Coastguard Worker print_xsltproc = 37*58e6ee5fSAndroid Build Coastguard Worker print_install = 38*58e6ee5fSAndroid Build Coastguard Worker hide_xsltproc_output = 39*58e6ee5fSAndroid Build Coastguard Workerelse 40*58e6ee5fSAndroid Build Coastguard Worker print_compile = echo ' $(GUI)COMPILE '$(GOBJ); 41*58e6ee5fSAndroid Build Coastguard Worker print_app_build = echo ' $(GUI)BUILD '$(GOBJ); 42*58e6ee5fSAndroid Build Coastguard Worker print_fpic_compile = echo ' $(GUI)COMPILE FPIC '$(GOBJ); 43*58e6ee5fSAndroid Build Coastguard Worker print_shared_lib_compile = echo ' $(GUI)COMPILE SHARED LIB '$(GOBJ); 44*58e6ee5fSAndroid Build Coastguard Worker print_plugin_obj_compile = echo ' $(GUI)COMPILE PLUGIN OBJ '$(GOBJ); 45*58e6ee5fSAndroid Build Coastguard Worker print_plugin_build = echo ' $(GUI)BUILD PLUGIN '$(GOBJ); 46*58e6ee5fSAndroid Build Coastguard Worker print_static_lib_build = echo ' $(GUI)BUILD STATIC LIB '$(GOBJ); 47*58e6ee5fSAndroid Build Coastguard Worker print_install = echo ' $(GUI)INSTALL '$(GSPACE)$1' to $(DESTDIR_SQ)$2'; 48*58e6ee5fSAndroid Build Coastguard Worker print_update = echo ' $(GUI)UPDATE '$(GOBJ); 49*58e6ee5fSAndroid Build Coastguard Worker print_uninstall = echo ' $(GUI)UNINSTALLING $(DESTDIR_SQ)$1'; 50*58e6ee5fSAndroid Build Coastguard Worker print_asciidoc = echo ' ASCIIDOC '`basename $@`; 51*58e6ee5fSAndroid Build Coastguard Worker print_xsltproc = echo ' XSLTPROC '`basename $@`; 52*58e6ee5fSAndroid Build Coastguard Worker print_install = echo ' INSTALL '`basename $1`' to $(DESTDIR_SQ)'$2; 53*58e6ee5fSAndroid Build Coastguard Worker hide_xsltproc_output = 2> /dev/null 54*58e6ee5fSAndroid Build Coastguard Workerendif 55*58e6ee5fSAndroid Build Coastguard Worker 56*58e6ee5fSAndroid Build Coastguard Workerdo_fpic_compile = \ 57*58e6ee5fSAndroid Build Coastguard Worker ($(print_fpic_compile) \ 58*58e6ee5fSAndroid Build Coastguard Worker $(CC) -c $(CPPFLAGS) $(CFLAGS) $(EXT) -fPIC $< -o $@) 59*58e6ee5fSAndroid Build Coastguard Worker 60*58e6ee5fSAndroid Build Coastguard Workerdo_compile = \ 61*58e6ee5fSAndroid Build Coastguard Worker ($(if $(GENERATE_PIC), $(do_fpic_compile), \ 62*58e6ee5fSAndroid Build Coastguard Worker $(print_compile) \ 63*58e6ee5fSAndroid Build Coastguard Worker $(CC) -c $(CPPFLAGS) $(CFLAGS) $(EXT) $< -o $@)) 64*58e6ee5fSAndroid Build Coastguard Worker 65*58e6ee5fSAndroid Build Coastguard Workerdo_app_build = \ 66*58e6ee5fSAndroid Build Coastguard Worker ($(print_app_build) \ 67*58e6ee5fSAndroid Build Coastguard Worker $(CC) $^ -rdynamic -Wl,-rpath=$(libdir) -o $@ $(LDFLAGS) $(CONFIG_LIBS) $(LIBS)) 68*58e6ee5fSAndroid Build Coastguard Worker 69*58e6ee5fSAndroid Build Coastguard Workerdo_build_static_lib = \ 70*58e6ee5fSAndroid Build Coastguard Worker ($(print_static_lib_build) \ 71*58e6ee5fSAndroid Build Coastguard Worker $(RM) $@; $(AR) rcs $@ $^) 72*58e6ee5fSAndroid Build Coastguard Worker 73*58e6ee5fSAndroid Build Coastguard Workerdo_compile_shared_library = \ 74*58e6ee5fSAndroid Build Coastguard Worker ($(print_shared_lib_compile) \ 75*58e6ee5fSAndroid Build Coastguard Worker $(CC) --shared $^ '-Wl,-soname,$(1),-rpath=$$ORIGIN' -o $@ $(LDFLAGS) $(LIBS)) 76*58e6ee5fSAndroid Build Coastguard Worker 77*58e6ee5fSAndroid Build Coastguard Workerdo_compile_plugin_obj = \ 78*58e6ee5fSAndroid Build Coastguard Worker ($(print_plugin_obj_compile) \ 79*58e6ee5fSAndroid Build Coastguard Worker $(CC) -c $(CPPFLAGS) $(CFLAGS) -fPIC -o $@ $<) 80*58e6ee5fSAndroid Build Coastguard Worker 81*58e6ee5fSAndroid Build Coastguard Workerdo_plugin_build = \ 82*58e6ee5fSAndroid Build Coastguard Worker ($(print_plugin_build) \ 83*58e6ee5fSAndroid Build Coastguard Worker $(CC) $(CFLAGS) $(LDFLAGS) -shared -nostartfiles -o $@ $<) 84*58e6ee5fSAndroid Build Coastguard Worker 85*58e6ee5fSAndroid Build Coastguard Workerdo_compile_python_plugin_obj = \ 86*58e6ee5fSAndroid Build Coastguard Worker ($(print_plugin_obj_compile) \ 87*58e6ee5fSAndroid Build Coastguard Worker $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PYTHON_DIR_SQ) $(PYTHON_INCLUDES) -fPIC -o $@ $<) 88*58e6ee5fSAndroid Build Coastguard Worker 89*58e6ee5fSAndroid Build Coastguard Workerdo_python_plugin_build = \ 90*58e6ee5fSAndroid Build Coastguard Worker ($(print_plugin_build) \ 91*58e6ee5fSAndroid Build Coastguard Worker $(CC) $< -shared $(LDFLAGS) $(PYTHON_LDFLAGS) -o $@) 92*58e6ee5fSAndroid Build Coastguard Worker 93*58e6ee5fSAndroid Build Coastguard Workerdefine make_version.h 94*58e6ee5fSAndroid Build Coastguard Worker (echo '/* This file is automatically generated. Do not modify. */'; \ 95*58e6ee5fSAndroid Build Coastguard Worker echo \#define VERSION_CODE $(shell \ 96*58e6ee5fSAndroid Build Coastguard Worker expr $(VERSION) \* 256 + $(PATCHLEVEL)); \ 97*58e6ee5fSAndroid Build Coastguard Worker echo '#define EXTRAVERSION ' $(EXTRAVERSION); \ 98*58e6ee5fSAndroid Build Coastguard Worker echo '#define VERSION_STRING "'$(VERSION).$(PATCHLEVEL).$(EXTRAVERSION)'"'; \ 99*58e6ee5fSAndroid Build Coastguard Worker echo '#define FILE_VERSION '$(FILE_VERSION); \ 100*58e6ee5fSAndroid Build Coastguard Worker if [ -d $(src)/.git ]; then \ 101*58e6ee5fSAndroid Build Coastguard Worker d=`git diff`; \ 102*58e6ee5fSAndroid Build Coastguard Worker x=""; \ 103*58e6ee5fSAndroid Build Coastguard Worker if [ ! -z "$$d" ]; then x="+"; fi; \ 104*58e6ee5fSAndroid Build Coastguard Worker echo '#define VERSION_GIT "'$(shell \ 105*58e6ee5fSAndroid Build Coastguard Worker git log -1 --pretty=format:"%H" 2>/dev/null)$$x'"'; \ 106*58e6ee5fSAndroid Build Coastguard Worker else \ 107*58e6ee5fSAndroid Build Coastguard Worker echo '#define VERSION_GIT "not-a-git-repo"'; \ 108*58e6ee5fSAndroid Build Coastguard Worker fi \ 109*58e6ee5fSAndroid Build Coastguard Worker ) > $1 110*58e6ee5fSAndroid Build Coastguard Workerendef 111*58e6ee5fSAndroid Build Coastguard Worker 112*58e6ee5fSAndroid Build Coastguard Workerdefine update_version.h 113*58e6ee5fSAndroid Build Coastguard Worker ($(call make_version.h, $@.tmp); \ 114*58e6ee5fSAndroid Build Coastguard Worker if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 115*58e6ee5fSAndroid Build Coastguard Worker rm -f $@.tmp; \ 116*58e6ee5fSAndroid Build Coastguard Worker else \ 117*58e6ee5fSAndroid Build Coastguard Worker $(print_update) \ 118*58e6ee5fSAndroid Build Coastguard Worker mv -f $@.tmp $@; \ 119*58e6ee5fSAndroid Build Coastguard Worker fi); 120*58e6ee5fSAndroid Build Coastguard Workerendef 121*58e6ee5fSAndroid Build Coastguard Worker 122*58e6ee5fSAndroid Build Coastguard Workerdefine update_dir 123*58e6ee5fSAndroid Build Coastguard Worker (echo $1 > $@.tmp; \ 124*58e6ee5fSAndroid Build Coastguard Worker if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 125*58e6ee5fSAndroid Build Coastguard Worker rm -f $@.tmp; \ 126*58e6ee5fSAndroid Build Coastguard Worker else \ 127*58e6ee5fSAndroid Build Coastguard Worker $(print_update) \ 128*58e6ee5fSAndroid Build Coastguard Worker mv -f $@.tmp $@; \ 129*58e6ee5fSAndroid Build Coastguard Worker fi); 130*58e6ee5fSAndroid Build Coastguard Workerendef 131*58e6ee5fSAndroid Build Coastguard Worker 132*58e6ee5fSAndroid Build Coastguard Workerdefine build_prefix 133*58e6ee5fSAndroid Build Coastguard Worker (echo $1 > $@.tmp; \ 134*58e6ee5fSAndroid Build Coastguard Worker if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 135*58e6ee5fSAndroid Build Coastguard Worker rm -f $@.tmp; \ 136*58e6ee5fSAndroid Build Coastguard Worker else \ 137*58e6ee5fSAndroid Build Coastguard Worker $(print_update) \ 138*58e6ee5fSAndroid Build Coastguard Worker mv -f $@.tmp $@; \ 139*58e6ee5fSAndroid Build Coastguard Worker fi); 140*58e6ee5fSAndroid Build Coastguard Workerendef 141*58e6ee5fSAndroid Build Coastguard Worker 142*58e6ee5fSAndroid Build Coastguard Workerdefine do_install 143*58e6ee5fSAndroid Build Coastguard Worker $(print_install) \ 144*58e6ee5fSAndroid Build Coastguard Worker if [ ! -d '$(DESTDIR_SQ)$2' ]; then \ 145*58e6ee5fSAndroid Build Coastguard Worker $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \ 146*58e6ee5fSAndroid Build Coastguard Worker fi; \ 147*58e6ee5fSAndroid Build Coastguard Worker $(INSTALL) $(if $3,-m $3,) $1 '$(DESTDIR_SQ)$2' 148*58e6ee5fSAndroid Build Coastguard Workerendef 149*58e6ee5fSAndroid Build Coastguard Worker 150*58e6ee5fSAndroid Build Coastguard Workerdefine do_install_data 151*58e6ee5fSAndroid Build Coastguard Worker $(print_install) \ 152*58e6ee5fSAndroid Build Coastguard Worker if [ ! -d '$(DESTDIR_SQ)$2' ]; then \ 153*58e6ee5fSAndroid Build Coastguard Worker $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \ 154*58e6ee5fSAndroid Build Coastguard Worker fi; \ 155*58e6ee5fSAndroid Build Coastguard Worker $(INSTALL) -m 644 $1 '$(DESTDIR_SQ)$2' 156*58e6ee5fSAndroid Build Coastguard Workerendef 157*58e6ee5fSAndroid Build Coastguard Worker 158*58e6ee5fSAndroid Build Coastguard Workerdefine do_install_pkgconfig_file 159*58e6ee5fSAndroid Build Coastguard Worker if [ -n "${pkgconfig_dir}" ]; then \ 160*58e6ee5fSAndroid Build Coastguard Worker $(call do_install,$(PKG_CONFIG_FILE),$(pkgconfig_dir),644); \ 161*58e6ee5fSAndroid Build Coastguard Worker else \ 162*58e6ee5fSAndroid Build Coastguard Worker (echo Failed to locate pkg-config directory) 1>&2; \ 163*58e6ee5fSAndroid Build Coastguard Worker fi 164*58e6ee5fSAndroid Build Coastguard Workerendef 165*58e6ee5fSAndroid Build Coastguard Worker 166*58e6ee5fSAndroid Build Coastguard Workerdefine do_make_pkgconfig_file 167*58e6ee5fSAndroid Build Coastguard Worker $(print_app_build) 168*58e6ee5fSAndroid Build Coastguard Worker $(Q)cp -f $(srctree)/${PKG_CONFIG_SOURCE_FILE}.template ${PKG_CONFIG_FILE}; \ 169*58e6ee5fSAndroid Build Coastguard Worker sed -i "s|INSTALL_PREFIX|${1}|g" ${PKG_CONFIG_FILE}; \ 170*58e6ee5fSAndroid Build Coastguard Worker sed -i "s|LIB_VERSION|${LIBTRACECMD_VERSION}|g" ${PKG_CONFIG_FILE}; \ 171*58e6ee5fSAndroid Build Coastguard Worker sed -i "s|LIB_DIR|$(libdir)|g" ${PKG_CONFIG_FILE}; \ 172*58e6ee5fSAndroid Build Coastguard Worker sed -i "s|LIBTRACEFS_MIN_VERSION|$(LIBTRACEFS_MIN_VERSION)|g" ${PKG_CONFIG_FILE}; \ 173*58e6ee5fSAndroid Build Coastguard Worker sed -i "s|HEADER_DIR|$(includedir)/trace-cmd|g" ${PKG_CONFIG_FILE}; 174*58e6ee5fSAndroid Build Coastguard Workerendef 175*58e6ee5fSAndroid Build Coastguard Worker 176*58e6ee5fSAndroid Build Coastguard Workerdo_asciidoc_build = \ 177*58e6ee5fSAndroid Build Coastguard Worker ($(print_asciidoc) \ 178*58e6ee5fSAndroid Build Coastguard Worker asciidoc -d manpage -b docbook -o $@ $<) 179*58e6ee5fSAndroid Build Coastguard Worker 180*58e6ee5fSAndroid Build Coastguard Workerdo_xsltproc_build = \ 181*58e6ee5fSAndroid Build Coastguard Worker ($(print_xsltproc) \ 182*58e6ee5fSAndroid Build Coastguard Worker xsltproc --nonet -o $@ ${MANPAGE_DOCBOOK_XSL} $< $(hide_xsltproc_output)) 183*58e6ee5fSAndroid Build Coastguard Worker 184*58e6ee5fSAndroid Build Coastguard Worker# 185*58e6ee5fSAndroid Build Coastguard Worker# asciidoc requires a synopsis, but file format man pages (5) do 186*58e6ee5fSAndroid Build Coastguard Worker# not require them. This removes it from the file in the final step. 187*58e6ee5fSAndroid Build Coastguard Workerdefine remove_synopsis 188*58e6ee5fSAndroid Build Coastguard Worker (sed -e '/^\.SH "SYNOPSIS"/,/ignore/d' $1 > $1.tmp;\ 189*58e6ee5fSAndroid Build Coastguard Worker mv $1.tmp $1) 190*58e6ee5fSAndroid Build Coastguard Workerendef 191*58e6ee5fSAndroid Build Coastguard Worker 192*58e6ee5fSAndroid Build Coastguard Workerdefine do_install_docs 193*58e6ee5fSAndroid Build Coastguard Worker $(print_install) \ 194*58e6ee5fSAndroid Build Coastguard Worker if [ ! -d '$(DESTDIR_SQ)$2' ]; then \ 195*58e6ee5fSAndroid Build Coastguard Worker $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \ 196*58e6ee5fSAndroid Build Coastguard Worker fi; \ 197*58e6ee5fSAndroid Build Coastguard Worker $(INSTALL) -m 644 $1 '$(DESTDIR_SQ)$2' 198*58e6ee5fSAndroid Build Coastguard Workerendef 199*58e6ee5fSAndroid Build Coastguard Worker 200*58e6ee5fSAndroid Build Coastguard Workerifneq ($(findstring $(MAKEFLAGS),s),s) 201*58e6ee5fSAndroid Build Coastguard Workerifneq ($(V),1) 202*58e6ee5fSAndroid Build Coastguard Worker QUIET_ASCIIDOC = @echo ' ASCIIDOC '$@; 203*58e6ee5fSAndroid Build Coastguard Worker QUIET_XMLTO = @echo ' XMLTO '$@; 204*58e6ee5fSAndroid Build Coastguard Worker QUIET_SUBDIR0 = +@subdir= 205*58e6ee5fSAndroid Build Coastguard Worker QUIET_SUBDIR1 = ;$(NO_SUBDIR) \ 206*58e6ee5fSAndroid Build Coastguard Worker echo ' SUBDIR ' $$subdir; \ 207*58e6ee5fSAndroid Build Coastguard Worker $(MAKE) $(PRINT_DIR) -C $$subdir 208*58e6ee5fSAndroid Build Coastguard Worker export V 209*58e6ee5fSAndroid Build Coastguard Workerendif 210*58e6ee5fSAndroid Build Coastguard Workerendif 211