18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci# 38c2ecf20Sopenharmony_ci# This is a simple wrapper Makefile that calls the main Makefile.perf 48c2ecf20Sopenharmony_ci# with a -j option to do parallel builds 58c2ecf20Sopenharmony_ci# 68c2ecf20Sopenharmony_ci# If you want to invoke the perf build in some non-standard way then 78c2ecf20Sopenharmony_ci# you can use the 'make -f Makefile.perf' method to invoke it. 88c2ecf20Sopenharmony_ci# 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci# 118c2ecf20Sopenharmony_ci# Clear out the built-in rules GNU make defines by default (such as .o targets), 128c2ecf20Sopenharmony_ci# so that we pass through all targets to Makefile.perf: 138c2ecf20Sopenharmony_ci# 148c2ecf20Sopenharmony_ci.SUFFIXES: 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci# 178c2ecf20Sopenharmony_ci# We don't want to pass along options like -j: 188c2ecf20Sopenharmony_ci# 198c2ecf20Sopenharmony_ciunexport MAKEFLAGS 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci# 228c2ecf20Sopenharmony_ci# Do a parallel build with multiple jobs, based on the number of CPUs online 238c2ecf20Sopenharmony_ci# in this system: 'make -j8' on a 8-CPU system, etc. 248c2ecf20Sopenharmony_ci# 258c2ecf20Sopenharmony_ci# (To override it, run 'make JOBS=1' and similar.) 268c2ecf20Sopenharmony_ci# 278c2ecf20Sopenharmony_ciifeq ($(JOBS),) 288c2ecf20Sopenharmony_ci JOBS := $(shell (getconf _NPROCESSORS_ONLN || egrep -c '^processor|^CPU[0-9]' /proc/cpuinfo) 2>/dev/null) 298c2ecf20Sopenharmony_ci ifeq ($(JOBS),0) 308c2ecf20Sopenharmony_ci JOBS := 1 318c2ecf20Sopenharmony_ci endif 328c2ecf20Sopenharmony_ciendif 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci# 358c2ecf20Sopenharmony_ci# Only pass canonical directory names as the output directory: 368c2ecf20Sopenharmony_ci# 378c2ecf20Sopenharmony_ciifneq ($(O),) 388c2ecf20Sopenharmony_ci FULL_O := $(shell cd $(PWD); readlink -f $(O) || echo $(O)) 398c2ecf20Sopenharmony_ciendif 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci# 428c2ecf20Sopenharmony_ci# Only accept the 'DEBUG' variable from the command line: 438c2ecf20Sopenharmony_ci# 448c2ecf20Sopenharmony_ciifeq ("$(origin DEBUG)", "command line") 458c2ecf20Sopenharmony_ci ifeq ($(DEBUG),) 468c2ecf20Sopenharmony_ci override DEBUG = 0 478c2ecf20Sopenharmony_ci else 488c2ecf20Sopenharmony_ci SET_DEBUG = "DEBUG=$(DEBUG)" 498c2ecf20Sopenharmony_ci endif 508c2ecf20Sopenharmony_cielse 518c2ecf20Sopenharmony_ci override DEBUG = 0 528c2ecf20Sopenharmony_ciendif 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cidefine print_msg 558c2ecf20Sopenharmony_ci @printf ' BUILD: Doing '\''make \033[33m-j'$(JOBS)'\033[m'\'' parallel build\n' 568c2ecf20Sopenharmony_ciendef 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cidefine make 598c2ecf20Sopenharmony_ci @$(MAKE) -f Makefile.perf --no-print-directory -j$(JOBS) O=$(FULL_O) $(SET_DEBUG) $@ 608c2ecf20Sopenharmony_ciendef 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci# 638c2ecf20Sopenharmony_ci# Needed if no target specified: 648c2ecf20Sopenharmony_ci# (Except for tags and TAGS targets. The reason is that the 658c2ecf20Sopenharmony_ci# Makefile does not treat tags/TAGS as targets but as files 668c2ecf20Sopenharmony_ci# and thus won't rebuilt them once they are in place.) 678c2ecf20Sopenharmony_ci# 688c2ecf20Sopenharmony_ciall tags TAGS: 698c2ecf20Sopenharmony_ci $(print_msg) 708c2ecf20Sopenharmony_ci $(make) 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ciifdef MAKECMDGOALS 738c2ecf20Sopenharmony_cihas_clean := 0 748c2ecf20Sopenharmony_ciifneq ($(filter clean,$(MAKECMDGOALS)),) 758c2ecf20Sopenharmony_ci has_clean := 1 768c2ecf20Sopenharmony_ciendif # clean 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ciifeq ($(has_clean),1) 798c2ecf20Sopenharmony_ci rest := $(filter-out clean,$(MAKECMDGOALS)) 808c2ecf20Sopenharmony_ci ifneq ($(rest),) 818c2ecf20Sopenharmony_ci$(rest): clean 828c2ecf20Sopenharmony_ci endif # rest 838c2ecf20Sopenharmony_ciendif # has_clean 848c2ecf20Sopenharmony_ciendif # MAKECMDGOALS 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci# 878c2ecf20Sopenharmony_ci# Explicitly disable parallelism for the clean target. 888c2ecf20Sopenharmony_ci# 898c2ecf20Sopenharmony_ciclean: 908c2ecf20Sopenharmony_ci $(make) -j1 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci# 938c2ecf20Sopenharmony_ci# The build-test target is not really parallel, don't print the jobs info, 948c2ecf20Sopenharmony_ci# it also uses only the tests/make targets that don't pollute the source 958c2ecf20Sopenharmony_ci# repository, i.e. that uses O= or builds the tarpkg outside the source 968c2ecf20Sopenharmony_ci# repo directories. 978c2ecf20Sopenharmony_ci# 988c2ecf20Sopenharmony_ci# For a full test, use: 998c2ecf20Sopenharmony_ci# 1008c2ecf20Sopenharmony_ci# make -C tools/perf -f tests/make 1018c2ecf20Sopenharmony_ci# 1028c2ecf20Sopenharmony_cibuild-test: 1038c2ecf20Sopenharmony_ci @$(MAKE) SHUF=1 -f tests/make REUSE_FEATURES_DUMP=1 MK=Makefile SET_PARALLEL=1 --no-print-directory tarpkg out 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci# 1068c2ecf20Sopenharmony_ci# All other targets get passed through: 1078c2ecf20Sopenharmony_ci# 1088c2ecf20Sopenharmony_ci%: FORCE 1098c2ecf20Sopenharmony_ci $(print_msg) 1108c2ecf20Sopenharmony_ci $(make) 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci.PHONY: tags TAGS FORCE Makefile 113