cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

make (13457B)


      1include ../scripts/Makefile.include
      2
      3ifndef MK
      4ifeq ($(MAKECMDGOALS),)
      5# no target specified, trigger the whole suite
      6all:
      7	@echo "Testing Makefile";      $(MAKE) -sf tests/make MK=Makefile
      8	@echo "Testing Makefile.perf"; $(MAKE) -sf tests/make MK=Makefile.perf SET_PARALLEL=1 SET_O=1
      9else
     10# run only specific test over 'Makefile'
     11%:
     12	@echo "Testing Makefile";      $(MAKE) -sf tests/make MK=Makefile $@
     13endif
     14else
     15PERF := .
     16PERF_O := $(PERF)
     17O_OPT :=
     18FULL_O := $(shell readlink -f $(PERF_O) || echo $(PERF_O))
     19
     20ifneq ($(O),)
     21  FULL_O := $(shell readlink -f $(O) || echo $(O))
     22  PERF_O := $(FULL_O)
     23  ifeq ($(SET_O),1)
     24    O_OPT := 'O=$(FULL_O)'
     25  endif
     26  K_O_OPT := 'O=$(FULL_O)'
     27endif
     28
     29PARALLEL_OPT=
     30ifeq ($(SET_PARALLEL),1)
     31  ifeq ($(JOBS),)
     32    cores := $(shell (getconf _NPROCESSORS_ONLN || egrep -c '^processor|^CPU[0-9]' /proc/cpuinfo) 2>/dev/null)
     33    ifeq ($(cores),0)
     34      cores := 1
     35    endif
     36  else
     37    cores=$(JOBS)
     38  endif
     39  PARALLEL_OPT="-j$(cores)"
     40endif
     41
     42# As per kernel Makefile, avoid funny character set dependencies
     43unexport LC_ALL
     44LC_COLLATE=C
     45LC_NUMERIC=C
     46export LC_COLLATE LC_NUMERIC
     47
     48ifeq ($(srctree),)
     49srctree := $(patsubst %/,%,$(dir $(CURDIR)))
     50srctree := $(patsubst %/,%,$(dir $(srctree)))
     51#$(info Determined 'srctree' to be $(srctree))
     52endif
     53
     54include $(srctree)/tools/scripts/Makefile.arch
     55
     56# FIXME looks like x86 is the only arch running tests ;-)
     57# we need some IS_(32/64) flag to make this generic
     58ifeq ($(ARCH)$(IS_64_BIT), x861)
     59lib = lib64
     60else
     61lib = lib
     62endif
     63
     64has = $(shell which $1 2>/dev/null)
     65
     66# standard single make variable specified
     67make_clean_all      := clean all
     68make_python_perf_so := python/perf.so
     69make_debug          := DEBUG=1
     70make_no_libperl     := NO_LIBPERL=1
     71make_no_libpython   := NO_LIBPYTHON=1
     72make_no_scripts     := NO_LIBPYTHON=1 NO_LIBPERL=1
     73make_no_newt        := NO_NEWT=1
     74make_no_slang       := NO_SLANG=1
     75make_no_gtk2        := NO_GTK2=1
     76make_no_ui          := NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
     77make_no_demangle    := NO_DEMANGLE=1
     78make_no_libelf      := NO_LIBELF=1
     79make_no_libunwind   := NO_LIBUNWIND=1
     80make_no_libdw_dwarf_unwind := NO_LIBDW_DWARF_UNWIND=1
     81make_no_backtrace   := NO_BACKTRACE=1
     82make_no_libnuma     := NO_LIBNUMA=1
     83make_no_libaudit    := NO_LIBAUDIT=1
     84make_no_libbionic   := NO_LIBBIONIC=1
     85make_no_auxtrace    := NO_AUXTRACE=1
     86make_no_libbpf	    := NO_LIBBPF=1
     87make_libbpf_dynamic := LIBBPF_DYNAMIC=1
     88make_no_libbpf_DEBUG := NO_LIBBPF=1 DEBUG=1
     89make_no_libcrypto   := NO_LIBCRYPTO=1
     90make_with_babeltrace:= LIBBABELTRACE=1
     91make_with_coresight := CORESIGHT=1
     92make_no_sdt	    := NO_SDT=1
     93make_no_syscall_tbl := NO_SYSCALL_TABLE=1
     94make_with_clangllvm := LIBCLANGLLVM=1
     95make_with_libpfm4   := LIBPFM4=1
     96make_with_gtk2      := GTK2=1
     97make_tags           := tags
     98make_cscope         := cscope
     99make_help           := help
    100make_doc            := doc
    101make_perf_o           := perf.o
    102make_util_map_o       := util/map.o
    103make_util_pmu_bison_o := util/pmu-bison.o
    104make_install        := install
    105make_install_bin    := install-bin
    106make_install_doc    := install-doc
    107make_install_man    := install-man
    108make_install_html   := install-html
    109make_install_info   := install-info
    110make_install_pdf    := install-pdf
    111make_install_prefix       := install prefix=/tmp/krava
    112make_install_prefix_slash := install prefix=/tmp/krava/
    113make_static         := LDFLAGS=-static NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 NO_JVMTI=1
    114
    115# all the NO_* variable combined
    116make_minimal        := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1
    117make_minimal        += NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1
    118make_minimal        += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1
    119make_minimal        += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1
    120make_minimal        += NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 NO_LIBZSTD=1
    121make_minimal        += NO_LIBCAP=1 NO_SYSCALL_TABLE=1
    122
    123# $(run) contains all available tests
    124run := make_pure
    125# Targets 'clean all' can be run together only through top level
    126# Makefile because we detect clean target in Makefile.perf and
    127# disable features detection
    128ifeq ($(MK),Makefile)
    129run += make_clean_all
    130MAKE_F := $(MAKE)
    131else
    132MAKE_F := $(MAKE) -f $(MK)
    133endif
    134run += make_python_perf_so
    135run += make_debug
    136run += make_no_libperl
    137run += make_no_libpython
    138run += make_no_scripts
    139run += make_no_newt
    140run += make_no_slang
    141run += make_no_gtk2
    142run += make_no_ui
    143run += make_no_demangle
    144run += make_no_libelf
    145run += make_no_libunwind
    146run += make_no_libdw_dwarf_unwind
    147run += make_no_backtrace
    148run += make_no_libnuma
    149run += make_no_libaudit
    150run += make_no_libbionic
    151run += make_no_auxtrace
    152run += make_no_libbpf
    153run += make_libbpf_dynamic
    154run += make_no_libbpf_DEBUG
    155run += make_no_libcrypto
    156run += make_no_sdt
    157run += make_no_syscall_tbl
    158run += make_with_babeltrace
    159run += make_with_coresight
    160run += make_with_clangllvm
    161run += make_with_libpfm4
    162run += make_help
    163run += make_doc
    164run += make_perf_o
    165run += make_util_map_o
    166run += make_util_pmu_bison_o
    167run += make_install
    168run += make_install_bin
    169run += make_install_prefix
    170run += make_install_prefix_slash
    171# FIXME 'install-*' commented out till they're fixed
    172# run += make_install_doc
    173# run += make_install_man
    174# run += make_install_html
    175# run += make_install_info
    176# run += make_install_pdf
    177run += make_minimal
    178
    179ifneq ($(call has,ctags),)
    180run += make_tags
    181endif
    182ifneq ($(call has,cscope),)
    183run += make_cscope
    184endif
    185
    186# $(run_O) contains same portion of $(run) tests with '_O' attached
    187# to distinguish O=... tests
    188run_O := $(addsuffix _O,$(run))
    189
    190# disable some tests for O=...
    191run_O := $(filter-out make_python_perf_so_O,$(run_O))
    192
    193# define test for each compile as 'test_NAME' variable
    194# with the test itself as a value
    195test_make_tags   = test -f tags
    196test_make_cscope = test -f cscope.out
    197
    198test_make_tags_O   := $(test_make_tags)
    199test_make_cscope_O := $(test_make_cscope)
    200
    201test_ok          := true
    202test_make_help   := $(test_ok)
    203test_make_doc    := $(test_ok)
    204test_make_help_O := $(test_ok)
    205test_make_doc_O  := $(test_ok)
    206
    207test_make_python_perf_so := test -f $(PERF_O)/python/perf.so
    208
    209test_make_perf_o           := test -f $(PERF_O)/perf.o
    210test_make_util_map_o       := test -f $(PERF_O)/util/map.o
    211test_make_util_pmu_bison_o := test -f $(PERF_O)/util/pmu-bison.o
    212
    213define test_dest_files
    214  for file in $(1); do				\
    215    if [ ! -x $$TMP_DEST/$$file ]; then		\
    216      echo "  failed to find: $$file";		\
    217    fi						\
    218  done
    219endef
    220
    221installed_files_bin := bin/perf
    222installed_files_bin += etc/bash_completion.d/perf
    223installed_files_bin += libexec/perf-core/perf-archive
    224
    225installed_files_plugins := $(lib)/traceevent/plugins/plugin_cfg80211.so
    226installed_files_plugins += $(lib)/traceevent/plugins/plugin_scsi.so
    227installed_files_plugins += $(lib)/traceevent/plugins/plugin_xen.so
    228installed_files_plugins += $(lib)/traceevent/plugins/plugin_function.so
    229installed_files_plugins += $(lib)/traceevent/plugins/plugin_sched_switch.so
    230installed_files_plugins += $(lib)/traceevent/plugins/plugin_mac80211.so
    231installed_files_plugins += $(lib)/traceevent/plugins/plugin_kvm.so
    232installed_files_plugins += $(lib)/traceevent/plugins/plugin_kmem.so
    233installed_files_plugins += $(lib)/traceevent/plugins/plugin_hrtimer.so
    234installed_files_plugins += $(lib)/traceevent/plugins/plugin_jbd2.so
    235
    236installed_files_all := $(installed_files_bin)
    237installed_files_all += $(installed_files_plugins)
    238
    239test_make_install       := $(call test_dest_files,$(installed_files_all))
    240test_make_install_O     := $(call test_dest_files,$(installed_files_all))
    241test_make_install_bin   := $(call test_dest_files,$(installed_files_bin))
    242test_make_install_bin_O := $(call test_dest_files,$(installed_files_bin))
    243
    244# We prefix all installed files for make_install_prefix(_slash)
    245# with '/tmp/krava' to match installed/prefix-ed files.
    246installed_files_all_prefix := $(addprefix /tmp/krava/,$(installed_files_all))
    247test_make_install_prefix   :=  $(call test_dest_files,$(installed_files_all_prefix))
    248test_make_install_prefix_O :=  $(call test_dest_files,$(installed_files_all_prefix))
    249
    250test_make_install_prefix_slash   := $(test_make_install_prefix)
    251test_make_install_prefix_slash_O := $(test_make_install_prefix_O)
    252
    253# FIXME nothing gets installed
    254test_make_install_man    := test -f $$TMP_DEST/share/man/man1/perf.1
    255test_make_install_man_O  := $(test_make_install_man)
    256
    257# FIXME nothing gets installed
    258test_make_install_doc    := $(test_ok)
    259test_make_install_doc_O  := $(test_ok)
    260
    261# FIXME nothing gets installed
    262test_make_install_html   := $(test_ok)
    263test_make_install_html_O := $(test_ok)
    264
    265# FIXME nothing gets installed
    266test_make_install_info   := $(test_ok)
    267test_make_install_info_O := $(test_ok)
    268
    269# FIXME nothing gets installed
    270test_make_install_pdf    := $(test_ok)
    271test_make_install_pdf_O  := $(test_ok)
    272
    273test_make_libbpf_dynamic :=   ldd $(PERF_O)/perf | grep -q libbpf
    274test_make_libbpf_dynamic_O := ldd $$TMP_O/perf | grep -q libbpf
    275
    276test_make_python_perf_so_O    := test -f $$TMP_O/python/perf.so
    277test_make_perf_o_O            := test -f $$TMP_O/perf.o
    278test_make_util_map_o_O        := test -f $$TMP_O/util/map.o
    279test_make_util_pmu_bison_o_O := test -f $$TMP_O/util/pmu-bison.o
    280
    281test_default = test -x $(PERF_O)/perf
    282test = $(if $(test_$1),$(test_$1),$(test_default))
    283
    284test_default_O = test -x $$TMP_O/perf
    285test_O = $(if $(test_$1),$(test_$1),$(test_default_O))
    286
    287all:
    288
    289ifdef SHUF
    290run := $(shell shuf -e $(run))
    291run_O := $(shell shuf -e $(run_O))
    292endif
    293
    294max_width := $(shell echo $(run_O) | sed 's/ /\n/g' | wc -L)
    295
    296ifdef DEBUG
    297d := $(info run   $(run))
    298d := $(info run_O $(run_O))
    299endif
    300
    301MAKEFLAGS := --no-print-directory
    302
    303clean := @(cd $(PERF); $(MAKE_F) -s $(O_OPT) clean >/dev/null && $(MAKE) -s $(O_OPT) -C ../build clean >/dev/null)
    304
    305$(run):
    306	$(call clean)
    307	@TMP_DEST=$$(mktemp -d); \
    308	cmd="cd $(PERF) && $(MAKE_F) $($@) $(PARALLEL_OPT) $(O_OPT) DESTDIR=$$TMP_DEST"; \
    309	printf "%*.*s: %s\n" $(max_width) $(max_width) "$@" "$$cmd" && echo $$cmd > $@ && \
    310	( eval $$cmd ) >> $@ 2>&1; \
    311	echo "  test: $(call test,$@)" >> $@ 2>&1; \
    312	$(call test,$@) && \
    313	rm -rf $@ $$TMP_DEST || (cat $@ ; false)
    314
    315make_with_gtk2:
    316	$(call clean)
    317	@TMP_DEST=$$(mktemp -d); \
    318	cmd="cd $(PERF) && $(MAKE_F) $($@) $(PARALLEL_OPT) $(O_OPT) DESTDIR=$$TMP_DEST"; \
    319	printf "%*.*s: %s\n" $(max_width) $(max_width) "$@" "$$cmd" && echo $$cmd > $@ && \
    320	( eval $$cmd ) >> $@ 2>&1; \
    321	echo "  test: $(call test,$@)" >> $@ 2>&1; \
    322	$(call test,$@) && \
    323	rm -rf $@ $$TMP_DEST || (cat $@ ; false)
    324
    325make_static:
    326	$(call clean)
    327	@TMP_DEST=$$(mktemp -d); \
    328	cmd="cd $(PERF) && $(MAKE_F) $($@) $(PARALLEL_OPT) $(O_OPT) DESTDIR=$$TMP_DEST"; \
    329	printf "%*.*s: %s\n" $(max_width) $(max_width) "$@" "$$cmd" && echo $$cmd > $@ && \
    330	( eval $$cmd ) >> $@ 2>&1; \
    331	echo "  test: $(call test,$@)" >> $@ 2>&1; \
    332	$(call test,$@) && \
    333	rm -rf $@ $$TMP_DEST || (cat $@ ; false)
    334
    335$(run_O):
    336	$(call clean)
    337	@TMP_O=$$(mktemp -d); \
    338	TMP_DEST=$$(mktemp -d); \
    339	cmd="cd $(PERF) && $(MAKE_F) $($(patsubst %_O,%,$@)) $(PARALLEL_OPT) O=$$TMP_O DESTDIR=$$TMP_DEST"; \
    340	printf "%*.*s: %s\n" $(max_width) $(max_width) "$@" "$$cmd" && echo $$cmd > $@ && \
    341	( eval $$cmd ) >> $@ 2>&1 && \
    342	echo "  test: $(call test_O,$@)" >> $@ 2>&1; \
    343	$(call test_O,$@) && \
    344	rm -rf $@ $$TMP_O $$TMP_DEST || (cat $@ ; false)
    345
    346tarpkg:
    347	@cmd="$(PERF)/tests/perf-targz-src-pkg $(PERF)"; \
    348	echo "- $@: $$cmd" && echo $$cmd > $@ && \
    349	( eval $$cmd ) >> $@ 2>&1 && \
    350	rm -f $@
    351
    352KERNEL_O := ../..
    353ifneq ($(O),)
    354  KERNEL_O := $(O)
    355endif
    356
    357make_kernelsrc:
    358	@echo "- make -C <kernelsrc> $(PARALLEL_OPT) $(K_O_OPT) tools/perf"
    359	$(call clean); \
    360	(make -C ../.. $(PARALLEL_OPT) $(K_O_OPT) tools/perf) > $@ 2>&1 && \
    361	test -x $(KERNEL_O)/tools/perf/perf && rm -f $@ || (cat $@ ; false)
    362
    363make_kernelsrc_tools:
    364	@echo "- make -C <kernelsrc>/tools $(PARALLEL_OPT) $(K_O_OPT) perf"
    365	$(call clean); \
    366	(make -C ../../tools $(PARALLEL_OPT) $(K_O_OPT) perf) > $@ 2>&1 && \
    367	test -x $(KERNEL_O)/tools/perf/perf && rm -f $@ || (cat $@ ; false)
    368
    369make_libperf:
    370	@echo "- make -C lib";
    371	make -C lib clean >$@ 2>&1; make -C lib >>$@ 2>&1 && rm $@
    372
    373FEATURES_DUMP_FILE := $(FULL_O)/BUILD_TEST_FEATURE_DUMP
    374FEATURES_DUMP_FILE_STATIC := $(FULL_O)/BUILD_TEST_FEATURE_DUMP_STATIC
    375
    376all: $(run) $(run_O) tarpkg make_kernelsrc make_kernelsrc_tools
    377	@echo OK
    378	@rm -f $(FEATURES_DUMP_FILE) $(FEATURES_DUMP_FILE_STATIC)
    379
    380out: $(run_O)
    381	@echo OK
    382	@rm -f $(FEATURES_DUMP_FILE) $(FEATURES_DUMP_FILE_STATIC)
    383
    384ifeq ($(REUSE_FEATURES_DUMP),1)
    385$(FEATURES_DUMP_FILE):
    386	$(call clean)
    387	@cmd="cd $(PERF) && make FEATURE_DUMP_COPY=$@ $(O_OPT) feature-dump"; \
    388	echo "- $@: $$cmd" && echo $$cmd && \
    389	( eval $$cmd ) > /dev/null 2>&1
    390
    391$(FEATURES_DUMP_FILE_STATIC):
    392	$(call clean)
    393	@cmd="cd $(PERF) && make FEATURE_DUMP_COPY=$@ $(O_OPT) LDFLAGS='-static' feature-dump"; \
    394	echo "- $@: $$cmd" && echo $$cmd && \
    395	( eval $$cmd ) > /dev/null 2>&1
    396
    397# Add feature dump dependency for run/run_O targets
    398$(foreach t,$(run) $(run_O),$(eval \
    399	$(t): $(if $(findstring make_static,$(t)),\
    400		$(FEATURES_DUMP_FILE_STATIC),\
    401		$(FEATURES_DUMP_FILE))))
    402
    403# Append 'FEATURES_DUMP=' option to all test cases. For example:
    404# make_no_libbpf: NO_LIBBPF=1  --> NO_LIBBPF=1 FEATURES_DUMP=/a/b/BUILD_TEST_FEATURE_DUMP
    405# make_static: LDFLAGS=-static --> LDFLAGS=-static FEATURES_DUMP=/a/b/BUILD_TEST_FEATURE_DUMP_STATIC
    406$(foreach t,$(run),$(if $(findstring make_static,$(t)),\
    407			$(eval $(t) := $($(t)) FEATURES_DUMP=$(FEATURES_DUMP_FILE_STATIC)),\
    408			$(eval $(t) := $($(t)) FEATURES_DUMP=$(FEATURES_DUMP_FILE))))
    409endif
    410
    411.PHONY: all $(run) $(run_O) tarpkg clean make_kernelsrc make_kernelsrc_tools make_libperf
    412endif # ifndef MK