From: Prarit Bhargava <pra...@redhat.com>

Makefile: add kabi targets

Add make wrappers on redhat/kabi/{diff,update}-kabi and
redhat/kabi/symtypes:

 - dist-kabi-update updates the stablelist checksums

 - dist-symtype-diff diffs the current state against a reference
   stored in the stablelist

 - dist-kabi-image-NODE and dist-kabi-preimage-NODE dump the
   image or preimage for a symtypes node (where NODE is either
   an exported symbol, or a node representing a type, e.g.,
   s#kobject).

A helper target called dist-assert-cross-tools is added to ensure
that cross compilation toolchain is available prior to execution
to ensure correct results.

Signed-off-by: Čestmír Kalina <ckal...@redhat.com>
Signed-off-by: Prarit Bhargava <pra...@redhat.com>

diff --git a/redhat/Makefile b/redhat/Makefile
index blahblah..blahblah 100644
--- a/redhat/Makefile
+++ b/redhat/Makefile
@@ -350,6 +350,82 @@ ifeq ($(FORCE),)
        fi
 endif
 
+KABI_SUPPORTED_ARCHS ?= $(patsubst kabi_%,%,$(notdir $(wildcard 
kabi/kabi-module/*)))
+export KABI_CROSS_COMPILE_PREFIX ?= /usr/bin/
+export KABI_CROSS_COMPILE_SUFFIX ?= -linux-gnu-
+KABI_CROSS_COMPILE = $(patsubst 
%,$(KABI_CROSS_COMPILE_PREFIX)%$(KABI_CROSS_COMPILE_SUFFIX),$(filter-out 
$(CURARCH),$(KABI_SUPPORTED_ARCHS)))
+
+ifeq ($(ARCH),$(CURARCH))
+dist-assert-cross-tools: # no dependencies when we're building for native arch
+else
+dist-assert-cross-tools: $(patsubst %,%gcc,$(KABI_CROSS_COMPILE))
+endif
+
+$(KABI_CROSS_COMPILE_PREFIX)%$(KABI_CROSS_COMPILE_SUFFIX)gcc:
+       @echo "ERROR: couldn't find cross compilation toolchain (looking for: 
$@)" >&2
+       @echo "       override KABI_CROSS_COMPILE_PREFIX to set path (currently 
$(KABI_CROSS_COMPILE_PREFIX))" >&2
+       @echo "       override KABI_CROSS_COMPILE_SUFFIX to set suffix 
(currently $(KABI_CROSS_COMPILE_SUFFIX))" >&2
+       @exit 1
+
+
+ifeq ($(ARCH),)
+dist-kabi-index: ARCH=$(CURARCH)
+endif
+dist-kabi-index:
+       : > $(REDHAT)/kabi/kabi-module/kabi_$(ARCH)/.index.json
+       for sym in $$(find $(REDHAT)/kabi/kabi-module/kabi_$(ARCH)/ -type f 
-not -name "*.*" \
+                         -exec basename {} \;); do \
+               $(REDHAT)/kabi/symtypes index \
+                       $(REDHAT)/kabi/kabi-module/kabi_$(ARCH)/.$$(basename 
$$sym) \
+                       -o $(REDHAT)/kabi/kabi-module/kabi_$(ARCH)/.index.json 
|| : ; \
+       done
+
+ifeq ($(ARCH),)
+dist-kabi-image-%: ARCH=$(CURARCH)
+endif
+dist-kabi-image-%: NODE = $(patsubst dist-kabi-image-%,%,$@)
+dist-kabi-image-%: dist-kabi-index
+       $(REDHAT)/kabi/symtypes image -s $(NODE) -t 
$(REDHAT)/kabi/kabi-module/kabi_$(ARCH)/.index.json
+
+ifeq ($(ARCH),)
+dist-kabi-preimage-%: ARCH=$(CURARCH)
+endif
+dist-kabi-preimage-%: NODE = $(patsubst dist-kabi-preimage-%,%,$@)
+dist-kabi-preimage-%: dist-kabi-index
+       @node="$(NODE)"; \
+       if [ "${node:1:1}" = "#" ]; then \
+               $(REDHAT)/kabi/symtypes preimage -s '$(NODE)' -t 
$(REDHAT)/kabi/kabi-module/kabi_$(ARCH)/.index.json; \
+       else \
+               for prefix in {E,e,s,t,u}; do \
+               $(REDHAT)/kabi/symtypes preimage -S -s "$$prefix#$(NODE)" -t 
$(REDHAT)/kabi/kabi-module/kabi_$(ARCH)/.index.json || :; \
+               done; \
+       fi
+
+dist-symtype-diff: KABI_TOOL = $(REDHAT)/kabi/diff-kabi
+dist-symtype-diff: dist-assert-cross-tools dist-assert-tree-clean dist-configs 
dist-symtype-shared
+
+dist-kabi-update: KABI_TOOL = $(REDHAT)/kabi/update-kabi
+dist-kabi-update: dist-assert-cross-tools dist-assert-tree-clean dist-configs 
dist-symtype-shared
+
+dist-symtype-shared:
+       @declare -a _ARGS; \
+       declare -a _ARCHS; \
+       for symbol in $${SYMBOL:-}; do \
+               _ARGS=("$${_ARGS[@]}" -s "$$symbol"); \
+       done; \
+       if [ -n "$${SRC:-}" ]; then \
+               _ARGS=("$${_ARGS[@]}" $$SRC); \
+       fi; \
+       if [ -n "$${ARCH:-}" ]; then \
+               $(KABI_TOOL) -a $(ARCH) $${_ARGS[@]}; \
+       else \
+               cnt=1; \
+               for arch in $(KABI_SUPPORTED_ARCHS); do \
+                       $(KABI_TOOL) -a $$arch $${_ARGS[@]} || : ; \
+                       let cnt++; \
+               done; \
+       fi
+
 dist-check-kabi: dist-kabi
        @if [ ! -e $(_OUTPUT)/Module.symvers ]; then \
                echo "ERROR: You must compile the kernel and modules first";\
@@ -814,6 +890,8 @@ dist-full-help:
        @echo  '  dist-kabi-dw-base   - Generate the base dataset for kABI 
DWARF-based check.'
        @echo  '  dist-kabi-dw-check  - Run DWARF-based kABI comparison of 
current binaries'
        @echo  '                        with the base dataset.'
+       @echo  '  dist-kabi-update    - Update kabi stablelist checksums.'
+       @echo  '  dist-symtype-diff   - Diff kabi stablelist and current 
kernel.'
 
        @echo  ''
        @echo  'Configuration targets:'

--
https://gitlab.com/cki-project/kernel-ark/-/merge_requests/2021
_______________________________________________
kernel mailing list -- kernel@lists.fedoraproject.org
To unsubscribe send an email to kernel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to