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

Makefile.feature (8826B)


      1# SPDX-License-Identifier: GPL-2.0-only
      2feature_dir := $(srctree)/tools/build/feature
      3
      4ifneq ($(OUTPUT),)
      5  OUTPUT_FEATURES = $(OUTPUT)feature/
      6  $(shell mkdir -p $(OUTPUT_FEATURES))
      7endif
      8
      9feature_check = $(eval $(feature_check_code))
     10define feature_check_code
     11  feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CC="$(CC)" CXX="$(CXX)" CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" CXXFLAGS="$(EXTRA_CXXFLAGS) $(FEATURE_CHECK_CXXFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C $(feature_dir) $(OUTPUT_FEATURES)test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0)
     12endef
     13
     14feature_set = $(eval $(feature_set_code))
     15define feature_set_code
     16  feature-$(1) := 1
     17endef
     18
     19#
     20# Build the feature check binaries in parallel, ignore errors, ignore return value and suppress output:
     21#
     22
     23#
     24# Note that this is not a complete list of all feature tests, just
     25# those that are typically built on a fully configured system.
     26#
     27# [ Feature tests not mentioned here have to be built explicitly in
     28#   the rule that uses them - an example for that is the 'bionic'
     29#   feature check. ]
     30#
     31FEATURE_TESTS_BASIC :=                  \
     32        backtrace                       \
     33        dwarf                           \
     34        dwarf_getlocations              \
     35        eventfd                         \
     36        fortify-source                  \
     37        get_current_dir_name            \
     38        gettid				\
     39        glibc                           \
     40        libbfd                          \
     41        libbfd-buildid			\
     42        libcap                          \
     43        libelf                          \
     44        libelf-getphdrnum               \
     45        libelf-gelf_getnote             \
     46        libelf-getshdrstrndx            \
     47        libnuma                         \
     48        numa_num_possible_cpus          \
     49        libperl                         \
     50        libpython                       \
     51        libslang                        \
     52        libslang-include-subdir         \
     53        libtraceevent                   \
     54        libtracefs                      \
     55        libcrypto                       \
     56        libunwind                       \
     57        pthread-attr-setaffinity-np     \
     58        pthread-barrier     		\
     59        reallocarray                    \
     60        stackprotector-all              \
     61        timerfd                         \
     62        libdw-dwarf-unwind              \
     63        zlib                            \
     64        lzma                            \
     65        get_cpuid                       \
     66        bpf                             \
     67        sched_getcpu			\
     68        sdt				\
     69        setns				\
     70        libaio				\
     71        libzstd				\
     72        disassembler-four-args		\
     73        file-handle
     74
     75# FEATURE_TESTS_BASIC + FEATURE_TESTS_EXTRA is the complete list
     76# of all feature tests
     77FEATURE_TESTS_EXTRA :=                  \
     78         bionic                         \
     79         compile-32                     \
     80         compile-x32                    \
     81         cplus-demangle                 \
     82         gtk2                           \
     83         gtk2-infobar                   \
     84         hello                          \
     85         libbabeltrace                  \
     86         libbfd-liberty                 \
     87         libbfd-liberty-z               \
     88         libopencsd                     \
     89         libunwind-x86                  \
     90         libunwind-x86_64               \
     91         libunwind-arm                  \
     92         libunwind-aarch64              \
     93         libunwind-debug-frame          \
     94         libunwind-debug-frame-arm      \
     95         libunwind-debug-frame-aarch64  \
     96         cxx                            \
     97         llvm                           \
     98         llvm-version                   \
     99         clang                          \
    100         libbpf                         \
    101         libbpf-btf__load_from_kernel_by_id \
    102         libbpf-bpf_prog_load           \
    103         libbpf-bpf_object__next_program \
    104         libbpf-bpf_object__next_map    \
    105         libbpf-bpf_create_map		\
    106         libpfm4                        \
    107         libdebuginfod			\
    108         clang-bpf-co-re
    109
    110
    111FEATURE_TESTS ?= $(FEATURE_TESTS_BASIC)
    112
    113ifeq ($(FEATURE_TESTS),all)
    114  FEATURE_TESTS := $(FEATURE_TESTS_BASIC) $(FEATURE_TESTS_EXTRA)
    115endif
    116
    117FEATURE_DISPLAY ?=              \
    118         dwarf                  \
    119         dwarf_getlocations     \
    120         glibc                  \
    121         libbfd                 \
    122         libbfd-buildid		\
    123         libcap                 \
    124         libelf                 \
    125         libnuma                \
    126         numa_num_possible_cpus \
    127         libperl                \
    128         libpython              \
    129         libcrypto              \
    130         libunwind              \
    131         libdw-dwarf-unwind     \
    132         zlib                   \
    133         lzma                   \
    134         get_cpuid              \
    135         bpf			\
    136         libaio			\
    137         libzstd		\
    138         disassembler-four-args
    139
    140# Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features.
    141# If in the future we need per-feature checks/flags for features not
    142# mentioned in this list we need to refactor this ;-).
    143set_test_all_flags = $(eval $(set_test_all_flags_code))
    144define set_test_all_flags_code
    145  FEATURE_CHECK_CFLAGS-all  += $(FEATURE_CHECK_CFLAGS-$(1))
    146  FEATURE_CHECK_LDFLAGS-all += $(FEATURE_CHECK_LDFLAGS-$(1))
    147endef
    148
    149$(foreach feat,$(FEATURE_TESTS),$(call set_test_all_flags,$(feat)))
    150
    151#
    152# Special fast-path for the 'all features are available' case:
    153#
    154$(call feature_check,all,$(MSG))
    155
    156#
    157# Just in case the build freshly failed, make sure we print the
    158# feature matrix:
    159#
    160ifeq ($(feature-all), 1)
    161  #
    162  # test-all.c passed - just set all the core feature flags to 1:
    163  #
    164  $(foreach feat,$(FEATURE_TESTS),$(call feature_set,$(feat)))
    165  #
    166  # test-all.c does not comprise these tests, so we need to
    167  # for this case to get features proper values
    168  #
    169  $(call feature_check,compile-32)
    170  $(call feature_check,compile-x32)
    171  $(call feature_check,bionic)
    172  $(call feature_check,libbabeltrace)
    173else
    174  $(foreach feat,$(FEATURE_TESTS),$(call feature_check,$(feat)))
    175endif
    176
    177#
    178# Print the result of the feature test:
    179#
    180feature_print_status = $(eval $(feature_print_status_code)) $(info $(MSG))
    181
    182define feature_print_status_code
    183  ifeq ($(feature-$(1)), 1)
    184    MSG = $(shell printf '...%30s: [ \033[32mon\033[m  ]' $(1))
    185  else
    186    MSG = $(shell printf '...%30s: [ \033[31mOFF\033[m ]' $(1))
    187  endif
    188endef
    189
    190feature_print_text = $(eval $(feature_print_text_code)) $(info $(MSG))
    191define feature_print_text_code
    192    MSG = $(shell printf '...%30s: %s' $(1) $(2))
    193endef
    194
    195#
    196# generates feature value assignment for name, like:
    197#   $(call feature_assign,dwarf) == feature-dwarf=1
    198#
    199feature_assign = feature-$(1)=$(feature-$(1))
    200
    201FEATURE_DUMP_FILENAME = $(OUTPUT)FEATURE-DUMP$(FEATURE_USER)
    202FEATURE_DUMP := $(shell touch $(FEATURE_DUMP_FILENAME); cat $(FEATURE_DUMP_FILENAME))
    203
    204feature_dump_check = $(eval $(feature_dump_check_code))
    205define feature_dump_check_code
    206  ifeq ($(findstring $(1),$(FEATURE_DUMP)),)
    207    $(2) := 1
    208  endif
    209endef
    210
    211#
    212# First check if any test from FEATURE_DISPLAY
    213# and set feature_display := 1 if it does
    214$(foreach feat,$(FEATURE_DISPLAY),$(call feature_dump_check,$(call feature_assign,$(feat)),feature_display))
    215
    216#
    217# Now also check if any other test changed,
    218# so we force FEATURE-DUMP generation
    219$(foreach feat,$(FEATURE_TESTS),$(call feature_dump_check,$(call feature_assign,$(feat)),feature_dump_changed))
    220
    221# The $(feature_display) controls the default detection message
    222# output. It's set if:
    223# - detected features differes from stored features from
    224#   last build (in $(FEATURE_DUMP_FILENAME) file)
    225# - one of the $(FEATURE_DISPLAY) is not detected
    226# - VF is enabled
    227
    228ifeq ($(feature_dump_changed),1)
    229  $(shell rm -f $(FEATURE_DUMP_FILENAME))
    230  $(foreach feat,$(FEATURE_TESTS),$(shell echo "$(call feature_assign,$(feat))" >> $(FEATURE_DUMP_FILENAME)))
    231endif
    232
    233feature_display_check = $(eval $(feature_check_display_code))
    234define feature_check_display_code
    235  ifneq ($(feature-$(1)), 1)
    236    feature_display := 1
    237  endif
    238endef
    239
    240$(foreach feat,$(FEATURE_DISPLAY),$(call feature_display_check,$(feat)))
    241
    242ifeq ($(VF),1)
    243  feature_display := 1
    244  feature_verbose := 1
    245endif
    246
    247feature_display_entries = $(eval $(feature_display_entries_code))
    248define feature_display_entries_code
    249  ifeq ($(feature_display),1)
    250    $(info )
    251    $(info Auto-detecting system features:)
    252    $(foreach feat,$(FEATURE_DISPLAY),$(call feature_print_status,$(feat),))
    253    ifneq ($(feature_verbose),1)
    254      $(info )
    255    endif
    256  endif
    257
    258  ifeq ($(feature_verbose),1)
    259    TMP := $(filter-out $(FEATURE_DISPLAY),$(FEATURE_TESTS))
    260    $(foreach feat,$(TMP),$(call feature_print_status,$(feat),))
    261    $(info )
    262  endif
    263endef
    264
    265ifeq ($(FEATURE_DISPLAY_DEFERRED),)
    266  $(call feature_display_entries)
    267endif