public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [kvm-unit-tests PATCH 0/4] powerpc fix and misc docs/build/CI improvements
@ 2024-06-02 12:25 Nicholas Piggin
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 1/4] powerpc/sprs: Fix report_kfail call Nicholas Piggin
                   ` (3 more replies)
  0 siblings, 4 replies; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-02 12:25 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Nicholas Piggin, Andrew Jones, kvm

This is some fixes and odd bits before I was going to resubmit the
remains of the powerpc series.

Patch 1 is a silly rebase bug. I thought I must have missed a warning
in the build noise, but no gcc just doesn't warn for string literal to
bool conversion.

Patch 2 is the doc fix updated according to feedback from Thomas
(main change, enumerate the other special groups).

Patch 3 is a quick hack to make build warnings more obvious. Thoughts?
Results can be seen here
https://gitlab.com/npiggin/kvm-unit-tests/-/pipelines/1314895857

Patch 4, after debugging something with CI, it doesn't seem to save the
test logs on failure. I can't drive gitlab CI very well but this seemed
to fix it.

Thanks,
Nick

Nicholas Piggin (4):
  powerpc/sprs: Fix report_kfail call
  doc: update unittests doc
  build: Make build output pretty
  gitlab-ci: Always save artifacts

 .gitlab-ci.yml          |  5 +++++
 Makefile                | 14 ++++++++++++++
 arm/Makefile.common     |  7 +++++++
 docs/unittests.txt      | 11 ++++++++---
 powerpc/Makefile.common | 11 +++++++----
 powerpc/sprs.c          |  2 +-
 riscv/Makefile          |  5 +++++
 s390x/Makefile          | 18 +++++++++++++++++-
 scripts/mkstandalone.sh |  2 +-
 x86/Makefile.common     |  5 +++++
 10 files changed, 70 insertions(+), 10 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 19+ messages in thread

* [kvm-unit-tests PATCH 1/4] powerpc/sprs: Fix report_kfail call
  2024-06-02 12:25 [kvm-unit-tests PATCH 0/4] powerpc fix and misc docs/build/CI improvements Nicholas Piggin
@ 2024-06-02 12:25 ` Nicholas Piggin
  2024-06-03  4:22   ` Thomas Huth
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 2/4] doc: update unittests doc Nicholas Piggin
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-02 12:25 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Nicholas Piggin, Andrew Jones, kvm

Parameters to report_kfail are wrong. String to bool conversion is not
warned by gcc, and printf format did not catch it due to string variable
being passed at the format location.

Fixes: 8f6290f0e6 ("powerpc/sprs: Specify SPRs with data rather than code")
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 powerpc/sprs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/powerpc/sprs.c b/powerpc/sprs.c
index de9e87a21..33872136d 100644
--- a/powerpc/sprs.c
+++ b/powerpc/sprs.c
@@ -590,7 +590,7 @@ int main(int argc, char **argv)
 
 		if (sprs[i].width == 32 && !(before[i] >> 32) && !(after[i] >> 32)) {
 			/* known failure KVM migration of CTRL */
-			report_kfail(true && i == 136,
+			report_kfail(i == 136, pass,
 				"%-10s(%4d):\t        0x%08lx <==>         0x%08lx",
 				sprs[i].name, i,
 				before[i], after[i]);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [kvm-unit-tests PATCH 2/4] doc: update unittests doc
  2024-06-02 12:25 [kvm-unit-tests PATCH 0/4] powerpc fix and misc docs/build/CI improvements Nicholas Piggin
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 1/4] powerpc/sprs: Fix report_kfail call Nicholas Piggin
@ 2024-06-02 12:25 ` Nicholas Piggin
  2024-06-03  4:24   ` Thomas Huth
  2024-06-03  6:47   ` Andrew Jones
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 3/4] build: Make build output pretty Nicholas Piggin
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 4/4] gitlab-ci: Always save artifacts Nicholas Piggin
  3 siblings, 2 replies; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-02 12:25 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Nicholas Piggin, Andrew Jones, kvm

Document the special groups, check path restrictions, and a small fix
for check option syntax.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 docs/unittests.txt | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/docs/unittests.txt b/docs/unittests.txt
index 6ff9872cf..509c529d7 100644
--- a/docs/unittests.txt
+++ b/docs/unittests.txt
@@ -69,8 +69,11 @@ groups
 groups = <group_name1> <group_name2> ...
 
 Used to group the test cases for the `run_tests.sh -g ...` run group
-option. Adding a test to the nodefault group will cause it to not be
-run by default.
+option. The group name is arbitrary, except for these special groups:
+- Tests in the "nodefault" group are not run by default (with no -g option).
+- Tests in the "migration" group are run with the migration harness and
+  expects the test to make migrate_*() calls.
+- Tests in the "panic" group expect QEMU to enter the GUEST_PANICKED state.
 
 accel
 -----
@@ -89,8 +92,10 @@ Optional timeout in seconds, after which the test will be killed and fail.
 
 check
 -----
-check = <path>=<<value>
+check = <path>=<value>
 
 Check a file for a particular value before running a test. The check line
 can contain multiple files to check separated by a space, but each check
 parameter needs to be of the form <path>=<value>
+
+The path and value can not contain space, =, or shell wildcard characters.
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [kvm-unit-tests PATCH 3/4] build: Make build output pretty
  2024-06-02 12:25 [kvm-unit-tests PATCH 0/4] powerpc fix and misc docs/build/CI improvements Nicholas Piggin
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 1/4] powerpc/sprs: Fix report_kfail call Nicholas Piggin
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 2/4] doc: update unittests doc Nicholas Piggin
@ 2024-06-02 12:25 ` Nicholas Piggin
  2024-06-03  7:00   ` Andrew Jones
  2024-06-03  8:26   ` Thomas Huth
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 4/4] gitlab-ci: Always save artifacts Nicholas Piggin
  3 siblings, 2 replies; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-02 12:25 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Nicholas Piggin, Andrew Jones, kvm

Unless make V=1 is specified, silence make recipe echoing and print
an abbreviated line for major build steps.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 Makefile                | 14 ++++++++++++++
 arm/Makefile.common     |  7 +++++++
 powerpc/Makefile.common | 11 +++++++----
 riscv/Makefile          |  5 +++++
 s390x/Makefile          | 18 +++++++++++++++++-
 scripts/mkstandalone.sh |  2 +-
 x86/Makefile.common     |  5 +++++
 7 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/Makefile b/Makefile
index 5b7998b79..cbb2fdbf1 100644
--- a/Makefile
+++ b/Makefile
@@ -9,6 +9,11 @@ include config.mak
 # Set search path for all sources
 VPATH = $(SRCDIR)
 
+V=0
+ifeq ($V, 0)
+.SILENT:
+endif
+
 libdirs-get = $(shell [ -d "lib/$(1)" ] && echo "lib/$(1) lib/$(1)/asm")
 ARCH_LIBDIRS := $(call libdirs-get,$(ARCH_LIBDIR)) $(call libdirs-get,$(TEST_DIR))
 OBJDIRS := $(ARCH_LIBDIRS)
@@ -95,11 +100,13 @@ autodepend-flags = -MMD -MP -MF $(dir $*).$(notdir $*).d
 LDFLAGS += -nostdlib $(no_pie) -z noexecstack
 
 $(libcflat): $(cflatobjs)
+	@echo " [AR]      $@"
 	$(AR) rcs $@ $^
 
 include $(LIBFDT_srcdir)/Makefile.libfdt
 $(LIBFDT_archive): CFLAGS += -ffreestanding -I $(SRCDIR)/lib -I $(SRCDIR)/lib/libfdt -Wno-sign-compare
 $(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
+	@echo " [AR]      $@"
 	$(AR) rcs $@ $^
 
 libfdt_clean: VECHO = echo " "
@@ -112,7 +119,12 @@ libfdt_clean: SHAREDLIB_EXT = so
 directories:
 	@mkdir -p $(OBJDIRS)
 
+%.o: %.c
+	@echo " [CC]      $@"
+	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
+
 %.o: %.S
+	@echo " [AS]      $@"
 	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
 
 -include */.*.d */*/.*.d
@@ -123,6 +135,7 @@ standalone: all
 	@scripts/mkstandalone.sh
 
 install: standalone
+	@echo " [INSTALL] tests -> $(DESTDIR)"
 	mkdir -p $(DESTDIR)
 	install tests/* $(DESTDIR)
 
@@ -136,6 +149,7 @@ distclean: clean
 
 cscope: cscope_dirs = lib lib/libfdt lib/linux $(TEST_DIR) $(ARCH_LIBDIRS) lib/asm-generic
 cscope:
+	@echo " [CSCOPE]"
 	$(RM) ./cscope.*
 	find -L $(cscope_dirs) -maxdepth 1 \
 		-name '*.[chsS]' -exec realpath --relative-base=$(CURDIR) {} \; | sort -u > ./cscope.files
diff --git a/arm/Makefile.common b/arm/Makefile.common
index f828dbe01..9d6b31239 100644
--- a/arm/Makefile.common
+++ b/arm/Makefile.common
@@ -73,15 +73,18 @@ FLATLIBS = $(libcflat) $(LIBFDT_archive) $(libeabi)
 
 ifeq ($(CONFIG_EFI),y)
 %.aux.o: $(SRCDIR)/lib/auxinfo.c
+	@echo " [CC]      $@"
 	$(CC) $(CFLAGS) -c -o $@ $< \
 		-DPROGNAME=\"$(@:.aux.o=.efi)\" -DAUXFLAGS=$(AUXFLAGS)
 
 %.so: EFI_LDFLAGS += -defsym=EFI_SUBSYSTEM=0xa --no-undefined
 %.so: %.o $(FLATLIBS) $(SRCDIR)/arm/efi/elf_aarch64_efi.lds $(cstart.o) %.aux.o
+	@echo " [LD]      $@"
 	$(LD) $(EFI_LDFLAGS) -o $@ -T $(SRCDIR)/arm/efi/elf_aarch64_efi.lds \
 		$(filter %.o, $^) $(FLATLIBS) $(EFI_LIBS)
 
 %.efi: %.so
+	@echo " [OBJCOPY] $@"
 	$(call arch_elf_check, $^)
 	$(OBJCOPY) --only-keep-debug $^ $@.debug
 	$(OBJCOPY) --strip-debug $^
@@ -93,22 +96,26 @@ ifeq ($(CONFIG_EFI),y)
 		-O binary $^ $@
 else
 %.aux.o: $(SRCDIR)/lib/auxinfo.c
+	@echo " [CC]      $@"
 	$(CC) $(CFLAGS) -c -o $@ $< \
 		-DPROGNAME=\"$(@:.aux.o=.flat)\" -DAUXFLAGS=$(AUXFLAGS)
 
 %.elf: LDFLAGS += $(arch_LDFLAGS)
 %.elf: %.o $(FLATLIBS) $(SRCDIR)/arm/flat.lds $(cstart.o) %.aux.o
+	@echo " [LD]      $@"
 	$(LD) $(LDFLAGS) -o $@ -T $(SRCDIR)/arm/flat.lds \
 		$(filter %.o, $^) $(FLATLIBS)
 	@chmod a-x $@
 
 %.flat: %.elf
+	@echo " [OBJCOPY] $@"
 	$(call arch_elf_check, $^)
 	$(OBJCOPY) -O binary $^ $@
 	@chmod a-x $@
 endif
 
 $(libeabi): $(eabiobjs)
+	@echo " [AR]      $@"
 	$(AR) rcs $@ $^
 
 arm_clean: asm_offsets_clean
diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common
index 68165fc25..b0af9fc00 100644
--- a/powerpc/Makefile.common
+++ b/powerpc/Makefile.common
@@ -51,31 +51,34 @@ cflatobjs += lib/powerpc/smp.o
 OBJDIRS += lib/powerpc
 
 %.aux.o: $(SRCDIR)/lib/auxinfo.c
+	@echo " [LD]      $@"
 	$(CC) $(CFLAGS) -c -o $@ $< -DPROGNAME=\"$(@:.aux.o=.elf)\"
 
 FLATLIBS = $(libcflat) $(LIBFDT_archive)
 %.elf: CFLAGS += $(arch_CFLAGS)
 %.elf: LDFLAGS += $(arch_LDFLAGS) -pie -n
 %.elf: %.o $(FLATLIBS) $(SRCDIR)/powerpc/flat.lds $(cstart.o) $(reloc.o) %.aux.o
+	@echo " [LD]      $@"
 	$(LD) $(LDFLAGS) -o $@ \
 		-T $(SRCDIR)/powerpc/flat.lds --build-id=none \
 		$(filter %.o, $^) $(FLATLIBS)
 	@chmod a-x $@
-	@echo -n Checking $@ for unsupported reloc types...
 	@if $(OBJDUMP) -R $@ | grep R_ | grep -v R_PPC64_RELATIVE; then	\
+		@echo "Unsupported reloc types in $@"			\
 		false;							\
-	else								\
-		echo " looks good.";					\
 	fi
 
 $(TEST_DIR)/boot_rom.bin: $(TEST_DIR)/boot_rom.elf
-	dd if=/dev/zero of=$@ bs=256 count=1
+	@echo " [DD]      $@"
+	dd if=/dev/zero of=$@ bs=256 count=1 status=none
+	@echo " [OBJCOPY] $@"
 	$(OBJCOPY) -O binary $^ $@.tmp
 	cat $@.tmp >> $@
 	$(RM) $@.tmp
 
 $(TEST_DIR)/boot_rom.elf: CFLAGS = -mbig-endian
 $(TEST_DIR)/boot_rom.elf: $(TEST_DIR)/boot_rom.o
+	@echo " [LD]      $@"
 	$(LD) -EB -nostdlib -Ttext=0x100 --entry=start --build-id=none -o $@ $<
 	@chmod a-x $@
 
diff --git a/riscv/Makefile b/riscv/Makefile
index 919a3ebb5..ca33d4960 100644
--- a/riscv/Makefile
+++ b/riscv/Makefile
@@ -82,6 +82,7 @@ asm-offsets = lib/riscv/asm-offsets.h
 include $(SRCDIR)/scripts/asm-offsets.mak
 
 %.aux.o: $(SRCDIR)/lib/auxinfo.c
+	@echo " [CC]      $@"
 	$(CC) $(CFLAGS) -c -o $@ $< \
 		-DPROGNAME=\"$(notdir $(@:.aux.o=.$(exe)))\" -DAUXFLAGS=$(AUXFLAGS)
 
@@ -96,10 +97,12 @@ cflatobjs += lib/efi.o
 
 %.so: EFI_LDFLAGS += -defsym=EFI_SUBSYSTEM=0xa --no-undefined
 %.so: %.o $(FLATLIBS) $(SRCDIR)/riscv/efi/elf_riscv64_efi.lds $(cstart.o) %.aux.o
+	@echo " [LD]      $@"
 	$(LD) $(EFI_LDFLAGS) -o $@ -T $(SRCDIR)/riscv/efi/elf_riscv64_efi.lds \
 		$(filter %.o, $^) $(FLATLIBS) $(EFI_LIBS)
 
 %.efi: %.so
+	@echo " [OBJCOPY] $@"
 	$(call arch_elf_check, $^)
 	$(OBJCOPY) --only-keep-debug $^ $@.debug
 	$(OBJCOPY) --strip-debug $^
@@ -112,11 +115,13 @@ cflatobjs += lib/efi.o
 else
 %.elf: LDFLAGS += -pie -n -z notext
 %.elf: %.o $(FLATLIBS) $(SRCDIR)/riscv/flat.lds $(cstart.o) %.aux.o
+	@echo " [LD]      $@"
 	$(LD) $(LDFLAGS) -o $@ -T $(SRCDIR)/riscv/flat.lds \
 		$(filter %.o, $^) $(FLATLIBS)
 	@chmod a-x $@
 
 %.flat: %.elf
+	@echo " [OBJCOPY] $@"
 	$(call arch_elf_check, $^)
 	$(OBJCOPY) -O binary $^ $@
 	@chmod a-x $@
diff --git a/s390x/Makefile b/s390x/Makefile
index 8603a523c..19c41a2ec 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -148,42 +148,54 @@ endif
 
 # the asm/c snippets %.o have additional generated files as dependencies
 $(SNIPPET_DIR)/asm/%.o: $(SNIPPET_DIR)/asm/%.S $(asm-offsets)
+	@echo " [CC]      $@"
 	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
 
 $(SNIPPET_DIR)/c/%.o: $(SNIPPET_DIR)/c/%.c $(asm-offsets)
+	@echo " [CC]      $@"
 	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
 
 $(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(SNIPPET_DIR)/asm/flat.lds
+	@echo " [LD]      $@"
 	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/asm/flat.lds $<
+	@echo " [OBJCOPY] $@"
 	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
 	truncate -s '%4096' $@
 
 $(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) $(SNIPPET_DIR)/c/flat.lds
+	@echo " [LD]      $@"
 	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/c/flat.lds $< $(snippet_lib) $(FLATLIBS)
+	@echo " [OBJCOPY] $@"
 	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
 	truncate -s '%4096' $@
 
 %.hdr: %.gbin $(HOST_KEY_DOCUMENT)
+	@echo " [SEHDR  ] $@"
 	$(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x0,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@
 
 .SECONDARY:
 %.gobj: %.gbin
+	@echo " [OBJCOPY] $@"
 	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
 
 .SECONDARY:
 %.hdr.obj: %.hdr
+	@echo " [OBJCOPY] $@"
 	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
 
 lds-autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d -MT $@
 %.lds: %.lds.S $(asm-offsets)
+	@echo " [CPP]     $@"
 	$(CPP) $(lds-autodepend-flags) $(CPPFLAGS) -P -C -o $@ $<
 
 %.aux.o: $(SRCDIR)/lib/auxinfo.c
+	@echo " [CC]      $@"
 	$(CC) $(CFLAGS) -c -o $@ $< -DPROGNAME=\"$(@:.aux.o=.elf)\"
 
 .SECONDEXPANSION:
 %.elf: $(FLATLIBS) $(asmlib) $(SRCDIR)/s390x/flat.lds $$(snippets-obj) $$(snippet-hdr-obj) %.o %.aux.o
-	@$(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/flat.lds \
+	@echo " [CC]      $@"
+	$(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/flat.lds \
 		$(filter %.o, $^) $(FLATLIBS) $(snippets-obj) $(snippet-hdr-obj) || \
 		{ echo "Failure probably caused by missing definition of gen-se-header executable"; exit 1; }
 	@chmod a-x $@
@@ -192,9 +204,11 @@ lds-autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d -MT $@
 # 32 bytes of key material, uses existing one if available
 comm-key = $(TEST_DIR)/comm.key
 $(comm-key):
+	@echo " [DD]      $@"
 	dd if=/dev/urandom of=$@ bs=32 count=1 status=none
 
 %.bin: %.elf
+	@echo " [OBJCOPY] $@"
 	$(OBJCOPY) -O binary  $< $@
 
 # The genprotimg arguments for the cck changed over time so we need to
@@ -216,10 +230,12 @@ endif
 
 $(patsubst %.parmfile,%.pv.bin,$(wildcard s390x/*.parmfile)): %.pv.bin: %.parmfile
 %.pv.bin: %.bin $(HOST_KEY_DOCUMENT) $(comm-key)
+	@echo " [GENPROT] $@"
 	$(eval parmfile_args = $(if $(filter %.parmfile,$^),--parmfile $(filter %.parmfile,$^),))
 	$(GENPROTIMG) --host-key-document $(HOST_KEY_DOCUMENT) --no-verify $(GENPROTIMG_COMM_OPTION) $(comm-key) --x-pcf $(GENPROTIMG_PCF) $(parmfile_args) --image $(filter %.bin,$^) -o $@
 
 $(snippet_asmlib): $$(patsubst %.o,%.S,$$@) $(asm-offsets)
+	@echo " [CC]      $@"
 	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
 
 
diff --git a/scripts/mkstandalone.sh b/scripts/mkstandalone.sh
index 2318a85f0..3307c25b1 100755
--- a/scripts/mkstandalone.sh
+++ b/scripts/mkstandalone.sh
@@ -94,7 +94,7 @@ function mkstandalone()
 	generate_test "$@" > $standalone
 
 	chmod +x $standalone
-	echo Written $standalone.
+	echo " [WRITE]   $standalone"
 }
 
 if [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ] && [ ! -f "$ERRATATXT" ]; then
diff --git a/x86/Makefile.common b/x86/Makefile.common
index 4ae9a5579..96fb0660c 100644
--- a/x86/Makefile.common
+++ b/x86/Makefile.common
@@ -49,11 +49,13 @@ ifeq ($(CONFIG_EFI),y)
 .PRECIOUS: %.efi %.so
 
 %.so: %.o $(FLATLIBS) $(SRCDIR)/x86/efi/elf_x86_64_efi.lds $(cstart.o)
+	@echo " [LD]      $@"
 	$(LD) -T $(SRCDIR)/x86/efi/elf_x86_64_efi.lds $(EFI_LDFLAGS) -o $@ \
 		$(filter %.o, $^) $(FLATLIBS)
 	@chmod a-x $@
 
 %.efi: %.so
+	@echo " [OBJCOPY] $@"
 	$(OBJCOPY) --only-keep-debug $^ $@.debug
 	$(OBJCOPY) --strip-debug $^
 	$(OBJCOPY) --add-gnu-debuglink=$@.debug $^
@@ -67,11 +69,13 @@ else
 
 %.elf: LDFLAGS += $(arch_LDFLAGS)
 %.elf: %.o $(FLATLIBS) $(SRCDIR)/x86/flat.lds $(cstart.o)
+	@echo " [LD]      $@"
 	$(LD) $(LDFLAGS) -T $(SRCDIR)/x86/flat.lds -o $@ \
 		$(filter %.o, $^) $(FLATLIBS)
 	@chmod a-x $@
 
 %.flat: %.elf
+	@echo " [OBJCOPY] $@"
 	$(OBJCOPY) -O elf32-i386 $^ $@
 	@chmod a-x $@
 endif
@@ -104,6 +108,7 @@ test_cases: $(tests-common) $(tests)
 $(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I $(SRCDIR)/lib -I $(SRCDIR)/lib/x86 -I lib
 
 $(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o
+	@echo " [LD]      $@"
 	$(LD) -m elf_i386 -nostdlib -o $@ \
 	      -T $(SRCDIR)/$(TEST_DIR)/realmode.lds $^
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [kvm-unit-tests PATCH 4/4] gitlab-ci: Always save artifacts
  2024-06-02 12:25 [kvm-unit-tests PATCH 0/4] powerpc fix and misc docs/build/CI improvements Nicholas Piggin
                   ` (2 preceding siblings ...)
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 3/4] build: Make build output pretty Nicholas Piggin
@ 2024-06-02 12:25 ` Nicholas Piggin
  2024-06-03  4:29   ` Thomas Huth
  3 siblings, 1 reply; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-02 12:25 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Nicholas Piggin, Andrew Jones, kvm

The unit test logs are important to have when a test fails so
mark these as always save.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 .gitlab-ci.yml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 23bb69e24..c58dcc46c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,14 +4,19 @@ before_script:
  - dnf update -y
  - dnf install -y make python
 
+# Always save logs even for build failure, because the tests are actually
+# run as part of the test step (because there is little need for an
+# additional build step.
 .intree_template:
  artifacts:
+  when: always
   expire_in: 2 days
   paths:
    - logs
 
 .outoftree_template:
  artifacts:
+  when: always
   expire_in: 2 days
   paths:
    - build/logs
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 1/4] powerpc/sprs: Fix report_kfail call
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 1/4] powerpc/sprs: Fix report_kfail call Nicholas Piggin
@ 2024-06-03  4:22   ` Thomas Huth
  0 siblings, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-06-03  4:22 UTC (permalink / raw)
  To: Nicholas Piggin; +Cc: Andrew Jones, kvm

On 02/06/2024 14.25, Nicholas Piggin wrote:
> Parameters to report_kfail are wrong. String to bool conversion is not
> warned by gcc, and printf format did not catch it due to string variable
> being passed at the format location.
> 
> Fixes: 8f6290f0e6 ("powerpc/sprs: Specify SPRs with data rather than code")
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>   powerpc/sprs.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/powerpc/sprs.c b/powerpc/sprs.c
> index de9e87a21..33872136d 100644
> --- a/powerpc/sprs.c
> +++ b/powerpc/sprs.c
> @@ -590,7 +590,7 @@ int main(int argc, char **argv)
>   
>   		if (sprs[i].width == 32 && !(before[i] >> 32) && !(after[i] >> 32)) {
>   			/* known failure KVM migration of CTRL */
> -			report_kfail(true && i == 136,
> +			report_kfail(i == 136, pass,
>   				"%-10s(%4d):\t        0x%08lx <==>         0x%08lx",
>   				sprs[i].name, i,
>   				before[i], after[i]);

Reviewed-by: Thomas Huth <thuth@redhat.com>


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 2/4] doc: update unittests doc
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 2/4] doc: update unittests doc Nicholas Piggin
@ 2024-06-03  4:24   ` Thomas Huth
  2024-06-03  6:47   ` Andrew Jones
  1 sibling, 0 replies; 19+ messages in thread
From: Thomas Huth @ 2024-06-03  4:24 UTC (permalink / raw)
  To: Nicholas Piggin; +Cc: Andrew Jones, kvm

On 02/06/2024 14.25, Nicholas Piggin wrote:
> Document the special groups, check path restrictions, and a small fix
> for check option syntax.
> 
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>   docs/unittests.txt | 11 ++++++++---
>   1 file changed, 8 insertions(+), 3 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 4/4] gitlab-ci: Always save artifacts
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 4/4] gitlab-ci: Always save artifacts Nicholas Piggin
@ 2024-06-03  4:29   ` Thomas Huth
  2024-06-03  8:17     ` Nicholas Piggin
  0 siblings, 1 reply; 19+ messages in thread
From: Thomas Huth @ 2024-06-03  4:29 UTC (permalink / raw)
  To: Nicholas Piggin; +Cc: Andrew Jones, kvm

On 02/06/2024 14.25, Nicholas Piggin wrote:
> The unit test logs are important to have when a test fails so
> mark these as always save.
> 
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>   .gitlab-ci.yml | 5 +++++
>   1 file changed, 5 insertions(+)
> 
> diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
> index 23bb69e24..c58dcc46c 100644
> --- a/.gitlab-ci.yml
> +++ b/.gitlab-ci.yml
> @@ -4,14 +4,19 @@ before_script:
>    - dnf update -y
>    - dnf install -y make python
>   
> +# Always save logs even for build failure, because the tests are actually
> +# run as part of the test step (because there is little need for an
> +# additional build step.
>   .intree_template:
>    artifacts:
> +  when: always
>     expire_in: 2 days
>     paths:
>      - logs
>   
>   .outoftree_template:
>    artifacts:
> +  when: always
>     expire_in: 2 days
>     paths:
>      - build/logs

Reviewed-by: Thomas Huth <thuth@redhat.com>


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 2/4] doc: update unittests doc
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 2/4] doc: update unittests doc Nicholas Piggin
  2024-06-03  4:24   ` Thomas Huth
@ 2024-06-03  6:47   ` Andrew Jones
  2024-06-03  8:12     ` Nicholas Piggin
  1 sibling, 1 reply; 19+ messages in thread
From: Andrew Jones @ 2024-06-03  6:47 UTC (permalink / raw)
  To: Nicholas Piggin; +Cc: Thomas Huth, kvm

On Sun, Jun 02, 2024 at 10:25:56PM GMT, Nicholas Piggin wrote:
> Document the special groups, check path restrictions, and a small fix
> for check option syntax.
> 
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>  docs/unittests.txt | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/docs/unittests.txt b/docs/unittests.txt
> index 6ff9872cf..509c529d7 100644
> --- a/docs/unittests.txt
> +++ b/docs/unittests.txt
> @@ -69,8 +69,11 @@ groups
>  groups = <group_name1> <group_name2> ...
>  
>  Used to group the test cases for the `run_tests.sh -g ...` run group
> -option. Adding a test to the nodefault group will cause it to not be
> -run by default.
> +option. The group name is arbitrary, except for these special groups:
> +- Tests in the "nodefault" group are not run by default (with no -g option).
> +- Tests in the "migration" group are run with the migration harness and
> +  expects the test to make migrate_*() calls.

expect make migrate_*() calls.

> +- Tests in the "panic" group expect QEMU to enter the GUEST_PANICKED state.
>  
>  accel
>  -----
> @@ -89,8 +92,10 @@ Optional timeout in seconds, after which the test will be killed and fail.
>  
>  check
>  -----
> -check = <path>=<<value>
> +check = <path>=<value>
>  
>  Check a file for a particular value before running a test. The check line
>  can contain multiple files to check separated by a space, but each check
>  parameter needs to be of the form <path>=<value>
> +
> +The path and value can not contain space, =, or shell wildcard characters.

cannot

Otherwise,

Reviewed-by: Andrew Jones <andrew.jones@linux.dev>

Thanks,
drew

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] build: Make build output pretty
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 3/4] build: Make build output pretty Nicholas Piggin
@ 2024-06-03  7:00   ` Andrew Jones
  2024-06-03  8:26   ` Thomas Huth
  1 sibling, 0 replies; 19+ messages in thread
From: Andrew Jones @ 2024-06-03  7:00 UTC (permalink / raw)
  To: Nicholas Piggin; +Cc: Thomas Huth, kvm

On Sun, Jun 02, 2024 at 10:25:57PM GMT, Nicholas Piggin wrote:
> Unless make V=1 is specified, silence make recipe echoing and print
> an abbreviated line for major build steps.
> 
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>  Makefile                | 14 ++++++++++++++
>  arm/Makefile.common     |  7 +++++++
>  powerpc/Makefile.common | 11 +++++++----
>  riscv/Makefile          |  5 +++++
>  s390x/Makefile          | 18 +++++++++++++++++-
>  scripts/mkstandalone.sh |  2 +-
>  x86/Makefile.common     |  5 +++++
>  7 files changed, 56 insertions(+), 6 deletions(-)

Reviewed-by: Andrew Jones <andrew.jones@linux.dev>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 2/4] doc: update unittests doc
  2024-06-03  6:47   ` Andrew Jones
@ 2024-06-03  8:12     ` Nicholas Piggin
  2024-06-03  8:45       ` Andrew Jones
  0 siblings, 1 reply; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-03  8:12 UTC (permalink / raw)
  To: Andrew Jones; +Cc: Thomas Huth, kvm

On Mon Jun 3, 2024 at 4:47 PM AEST, Andrew Jones wrote:
> On Sun, Jun 02, 2024 at 10:25:56PM GMT, Nicholas Piggin wrote:
> > Document the special groups, check path restrictions, and a small fix
> > for check option syntax.
> > 
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> >  docs/unittests.txt | 11 ++++++++---
> >  1 file changed, 8 insertions(+), 3 deletions(-)
> > 
> > diff --git a/docs/unittests.txt b/docs/unittests.txt
> > index 6ff9872cf..509c529d7 100644
> > --- a/docs/unittests.txt
> > +++ b/docs/unittests.txt
> > @@ -69,8 +69,11 @@ groups
> >  groups = <group_name1> <group_name2> ...
> >  
> >  Used to group the test cases for the `run_tests.sh -g ...` run group
> > -option. Adding a test to the nodefault group will cause it to not be
> > -run by default.
> > +option. The group name is arbitrary, except for these special groups:
> > +- Tests in the "nodefault" group are not run by default (with no -g option).
> > +- Tests in the "migration" group are run with the migration harness and
> > +  expects the test to make migrate_*() calls.
>
> expect make migrate_*() calls.

Not sure if I follow you, but the grammar does sound a bit off now that
I read it back. Is this better?

"... are run with the migration harness and are expected to make
 migrate_*() calls."

or

"... are run with the migration harness, which expects them to make
 migrate_*() calls."

>
> > +- Tests in the "panic" group expect QEMU to enter the GUEST_PANICKED state.
> >  
> >  accel
> >  -----
> > @@ -89,8 +92,10 @@ Optional timeout in seconds, after which the test will be killed and fail.
> >  
> >  check
> >  -----
> > -check = <path>=<<value>
> > +check = <path>=<value>
> >  
> >  Check a file for a particular value before running a test. The check line
> >  can contain multiple files to check separated by a space, but each check
> >  parameter needs to be of the form <path>=<value>
> > +
> > +The path and value can not contain space, =, or shell wildcard characters.
>
> cannot

Huh, seems that is the more usual and formal form. I dind't know that.

Thanks,
Nick

>
> Otherwise,
>
> Reviewed-by: Andrew Jones <andrew.jones@linux.dev>
>
> Thanks,
> drew


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 4/4] gitlab-ci: Always save artifacts
  2024-06-03  4:29   ` Thomas Huth
@ 2024-06-03  8:17     ` Nicholas Piggin
  0 siblings, 0 replies; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-03  8:17 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Andrew Jones, kvm

On Mon Jun 3, 2024 at 2:29 PM AEST, Thomas Huth wrote:
> On 02/06/2024 14.25, Nicholas Piggin wrote:
> > The unit test logs are important to have when a test fails so
> > mark these as always save.
> > 
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> >   .gitlab-ci.yml | 5 +++++
> >   1 file changed, 5 insertions(+)
> > 
> > diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
> > index 23bb69e24..c58dcc46c 100644
> > --- a/.gitlab-ci.yml
> > +++ b/.gitlab-ci.yml
> > @@ -4,14 +4,19 @@ before_script:
> >    - dnf update -y
> >    - dnf install -y make python
> >   
> > +# Always save logs even for build failure, because the tests are actually
> > +# run as part of the test step (because there is little need for an
> > +# additional build step.

This wording is a bit scrambled too, I wrote it thinking CI was using
build step by default. It seems to be test so changing the words around
didn't work (also I'll fix the closing paren). I'll fix that up.

Thanks,
Nick

> >   .intree_template:
> >    artifacts:
> > +  when: always
> >     expire_in: 2 days
> >     paths:
> >      - logs
> >   
> >   .outoftree_template:
> >    artifacts:
> > +  when: always
> >     expire_in: 2 days
> >     paths:
> >      - build/logs
>
> Reviewed-by: Thomas Huth <thuth@redhat.com>


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] build: Make build output pretty
  2024-06-02 12:25 ` [kvm-unit-tests PATCH 3/4] build: Make build output pretty Nicholas Piggin
  2024-06-03  7:00   ` Andrew Jones
@ 2024-06-03  8:26   ` Thomas Huth
  2024-06-03  8:56     ` Andrew Jones
  2024-06-04  5:05     ` Nicholas Piggin
  1 sibling, 2 replies; 19+ messages in thread
From: Thomas Huth @ 2024-06-03  8:26 UTC (permalink / raw)
  To: Nicholas Piggin; +Cc: Andrew Jones, kvm

On 02/06/2024 14.25, Nicholas Piggin wrote:
> Unless make V=1 is specified, silence make recipe echoing and print
> an abbreviated line for major build steps.
> 
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>   Makefile                | 14 ++++++++++++++
>   arm/Makefile.common     |  7 +++++++
>   powerpc/Makefile.common | 11 +++++++----
>   riscv/Makefile          |  5 +++++
>   s390x/Makefile          | 18 +++++++++++++++++-
>   scripts/mkstandalone.sh |  2 +-
>   x86/Makefile.common     |  5 +++++
>   7 files changed, 56 insertions(+), 6 deletions(-)

The short lines look superfluous in verbose mode, e.g.:

  [OBJCOPY] s390x/memory-verify.bin
objcopy -O binary  s390x/memory-verify.elf s390x/memory-verify.bin

Could we somehow suppress the echo lines in verbose mode, please?

For example in the SLOF project, it's done like this:

https://gitlab.com/slof/slof/-/blob/master/make.rules?ref_type=heads#L48

By putting the logic into $CC and friends, you also don't have to add 
"@echo" statements all over the place.

  Thomas


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 2/4] doc: update unittests doc
  2024-06-03  8:12     ` Nicholas Piggin
@ 2024-06-03  8:45       ` Andrew Jones
  0 siblings, 0 replies; 19+ messages in thread
From: Andrew Jones @ 2024-06-03  8:45 UTC (permalink / raw)
  To: Nicholas Piggin; +Cc: Thomas Huth, kvm

On Mon, Jun 03, 2024 at 06:12:05PM GMT, Nicholas Piggin wrote:
> On Mon Jun 3, 2024 at 4:47 PM AEST, Andrew Jones wrote:
> > On Sun, Jun 02, 2024 at 10:25:56PM GMT, Nicholas Piggin wrote:
> > > Document the special groups, check path restrictions, and a small fix
> > > for check option syntax.
> > > 
> > > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > > ---
> > >  docs/unittests.txt | 11 ++++++++---
> > >  1 file changed, 8 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/docs/unittests.txt b/docs/unittests.txt
> > > index 6ff9872cf..509c529d7 100644
> > > --- a/docs/unittests.txt
> > > +++ b/docs/unittests.txt
> > > @@ -69,8 +69,11 @@ groups
> > >  groups = <group_name1> <group_name2> ...
> > >  
> > >  Used to group the test cases for the `run_tests.sh -g ...` run group
> > > -option. Adding a test to the nodefault group will cause it to not be
> > > -run by default.
> > > +option. The group name is arbitrary, except for these special groups:
> > > +- Tests in the "nodefault" group are not run by default (with no -g option).
> > > +- Tests in the "migration" group are run with the migration harness and
> > > +  expects the test to make migrate_*() calls.
> >
> > expect make migrate_*() calls.
> 
> Not sure if I follow you, but the grammar does sound a bit off now that
> I read it back. Is this better?
> 
> "... are run with the migration harness and are expected to make
>  migrate_*() calls."

This one looks good to me.

Thanks,
drew

> 
> or
> 
> "... are run with the migration harness, which expects them to make
>  migrate_*() calls."
> 
> >
> > > +- Tests in the "panic" group expect QEMU to enter the GUEST_PANICKED state.
> > >  
> > >  accel
> > >  -----
> > > @@ -89,8 +92,10 @@ Optional timeout in seconds, after which the test will be killed and fail.
> > >  
> > >  check
> > >  -----
> > > -check = <path>=<<value>
> > > +check = <path>=<value>
> > >  
> > >  Check a file for a particular value before running a test. The check line
> > >  can contain multiple files to check separated by a space, but each check
> > >  parameter needs to be of the form <path>=<value>
> > > +
> > > +The path and value can not contain space, =, or shell wildcard characters.
> >
> > cannot
> 
> Huh, seems that is the more usual and formal form. I dind't know that.
> 
> Thanks,
> Nick
> 
> >
> > Otherwise,
> >
> > Reviewed-by: Andrew Jones <andrew.jones@linux.dev>
> >
> > Thanks,
> > drew
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] build: Make build output pretty
  2024-06-03  8:26   ` Thomas Huth
@ 2024-06-03  8:56     ` Andrew Jones
  2024-06-05  0:38       ` Nicholas Piggin
  2024-06-04  5:05     ` Nicholas Piggin
  1 sibling, 1 reply; 19+ messages in thread
From: Andrew Jones @ 2024-06-03  8:56 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Nicholas Piggin, kvm

On Mon, Jun 03, 2024 at 10:26:50AM GMT, Thomas Huth wrote:
> On 02/06/2024 14.25, Nicholas Piggin wrote:
> > Unless make V=1 is specified, silence make recipe echoing and print
> > an abbreviated line for major build steps.
> > 
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> >   Makefile                | 14 ++++++++++++++
> >   arm/Makefile.common     |  7 +++++++
> >   powerpc/Makefile.common | 11 +++++++----
> >   riscv/Makefile          |  5 +++++
> >   s390x/Makefile          | 18 +++++++++++++++++-
> >   scripts/mkstandalone.sh |  2 +-
> >   x86/Makefile.common     |  5 +++++
> >   7 files changed, 56 insertions(+), 6 deletions(-)
> 
> The short lines look superfluous in verbose mode, e.g.:
> 
>  [OBJCOPY] s390x/memory-verify.bin
> objcopy -O binary  s390x/memory-verify.elf s390x/memory-verify.bin
> 
> Could we somehow suppress the echo lines in verbose mode, please?
> 
> For example in the SLOF project, it's done like this:
> 
> https://gitlab.com/slof/slof/-/blob/master/make.rules?ref_type=heads#L48
> 
> By putting the logic into $CC and friends, you also don't have to add
> "@echo" statements all over the place.

And I presume make will treat the printing and compiling as one unit, so
parallel builds still get the summary above the error messages when
compilation fails. The way this patch is now a parallel build may show
the summary for the last successful build and then error messages for
a build that hasn't output its summary yet, which can be confusing.

So I agree that something more like SLOF's approach would be better.

Thanks,
drew

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] build: Make build output pretty
  2024-06-03  8:26   ` Thomas Huth
  2024-06-03  8:56     ` Andrew Jones
@ 2024-06-04  5:05     ` Nicholas Piggin
  1 sibling, 0 replies; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-04  5:05 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Andrew Jones, kvm

On Mon Jun 3, 2024 at 6:26 PM AEST, Thomas Huth wrote:
> On 02/06/2024 14.25, Nicholas Piggin wrote:
> > Unless make V=1 is specified, silence make recipe echoing and print
> > an abbreviated line for major build steps.
> > 
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> >   Makefile                | 14 ++++++++++++++
> >   arm/Makefile.common     |  7 +++++++
> >   powerpc/Makefile.common | 11 +++++++----
> >   riscv/Makefile          |  5 +++++
> >   s390x/Makefile          | 18 +++++++++++++++++-
> >   scripts/mkstandalone.sh |  2 +-
> >   x86/Makefile.common     |  5 +++++
> >   7 files changed, 56 insertions(+), 6 deletions(-)
>
> The short lines look superfluous in verbose mode, e.g.:
>
>   [OBJCOPY] s390x/memory-verify.bin
> objcopy -O binary  s390x/memory-verify.elf s390x/memory-verify.bin
>
> Could we somehow suppress the echo lines in verbose mode, please?
>
> For example in the SLOF project, it's done like this:
>
> https://gitlab.com/slof/slof/-/blob/master/make.rules?ref_type=heads#L48
>
> By putting the logic into $CC and friends, you also don't have to add 
> "@echo" statements all over the place.

I'll could try a bit harder at it, this was a pretty quick hack.

I probably prefer the cmd_cc style that Linux uses rather than
overloading CC. But maybe that's more work.

Thanks,
Nick

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] build: Make build output pretty
  2024-06-03  8:56     ` Andrew Jones
@ 2024-06-05  0:38       ` Nicholas Piggin
  2024-06-12 10:32         ` Thomas Huth
  0 siblings, 1 reply; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-05  0:38 UTC (permalink / raw)
  To: Andrew Jones, Thomas Huth; +Cc: kvm

On Mon Jun 3, 2024 at 6:56 PM AEST, Andrew Jones wrote:
> On Mon, Jun 03, 2024 at 10:26:50AM GMT, Thomas Huth wrote:
> > On 02/06/2024 14.25, Nicholas Piggin wrote:
> > > Unless make V=1 is specified, silence make recipe echoing and print
> > > an abbreviated line for major build steps.
> > > 
> > > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > > ---
> > >   Makefile                | 14 ++++++++++++++
> > >   arm/Makefile.common     |  7 +++++++
> > >   powerpc/Makefile.common | 11 +++++++----
> > >   riscv/Makefile          |  5 +++++
> > >   s390x/Makefile          | 18 +++++++++++++++++-
> > >   scripts/mkstandalone.sh |  2 +-
> > >   x86/Makefile.common     |  5 +++++
> > >   7 files changed, 56 insertions(+), 6 deletions(-)
> > 
> > The short lines look superfluous in verbose mode, e.g.:
> > 
> >  [OBJCOPY] s390x/memory-verify.bin
> > objcopy -O binary  s390x/memory-verify.elf s390x/memory-verify.bin
> > 
> > Could we somehow suppress the echo lines in verbose mode, please?
> > 
> > For example in the SLOF project, it's done like this:
> > 
> > https://gitlab.com/slof/slof/-/blob/master/make.rules?ref_type=heads#L48
> > 
> > By putting the logic into $CC and friends, you also don't have to add
> > "@echo" statements all over the place.
>
> And I presume make will treat the printing and compiling as one unit, so
> parallel builds still get the summary above the error messages when
> compilation fails. The way this patch is now a parallel build may show
> the summary for the last successful build and then error messages for
> a build that hasn't output its summary yet, which can be confusing.
>
> So I agree that something more like SLOF's approach would be better.

Hmm... kbuild type commands is a pretty big patch. I like it though.
Thoughts?

Thanks,
Nick

---

diff --git a/Makefile b/Makefile
index 5b7998b79..56052107f 100644
--- a/Makefile
+++ b/Makefile
@@ -53,6 +53,34 @@ EFI_CFLAGS += -fPIC
 EFI_LDFLAGS := -Bsymbolic -shared -nostdlib
 endif
 
+quiet = quiet_
+quiet_echo = @echo $1
+Q = @
+ifeq ($V, 1)
+	quiet =
+	quiet_echo =
+	Q =
+endif
+
+cmd = @$(echo-cmd) $(cmd_$(1))
+echo-cmd = $(if $($(quiet)cmd_$(1)), echo ' $($(quiet)cmd_$(1))';)
+
+quiet_cmd_cc = [CC]      $@
+      cmd_cc = $(CC) $(CFLAGS) -c -nostdlib -o $@ $<
+
+quiet_cmd_cpp = [CPP]     $@
+      cmd_cpp = $(CPP) $(CPPFLAGS) -P -C -o $@ $<
+
+quiet_cmd_as = [AS]      $@
+      cmd_as = $(CC) $(CFLAGS) -c -nostdlib -o $@ $<
+
+# Link libs last
+quiet_cmd_ld = [LD]      $@
+      cmd_ld = $(LD) $(LDFLAGS) -o $@ $(filter %.o %.gobj, $^) $(filter %.a, $^)
+
+quiet_cmd_ar = [AR]      $@
+      cmd_ar = $(AR) rcs $@ $^
+
 #include architecture specific make rules
 include $(SRCDIR)/$(TEST_DIR)/Makefile
 
@@ -95,14 +123,13 @@ autodepend-flags = -MMD -MP -MF $(dir $*).$(notdir $*).d
 LDFLAGS += -nostdlib $(no_pie) -z noexecstack
 
 $(libcflat): $(cflatobjs)
-	$(AR) rcs $@ $^
+	$(call cmd,ar)
 
 include $(LIBFDT_srcdir)/Makefile.libfdt
 $(LIBFDT_archive): CFLAGS += -ffreestanding -I $(SRCDIR)/lib -I $(SRCDIR)/lib/libfdt -Wno-sign-compare
 $(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
-	$(AR) rcs $@ $^
+	$(call cmd,ar)
 
-libfdt_clean: VECHO = echo " "
 libfdt_clean: STD_CLEANFILES = *.o .*.d
 libfdt_clean: LIBFDT_dir = $(LIBFDT_objdir)
 libfdt_clean: SHAREDLIB_EXT = so
@@ -112,8 +139,11 @@ libfdt_clean: SHAREDLIB_EXT = so
 directories:
 	@mkdir -p $(OBJDIRS)
 
+%.o: %.c
+	$(call cmd,cc)
+
 %.o: %.S
-	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
+	$(call cmd,as)
 
 -include */.*.d */*/.*.d
 
@@ -123,23 +153,29 @@ standalone: all
 	@scripts/mkstandalone.sh
 
 install: standalone
-	mkdir -p $(DESTDIR)
-	install tests/* $(DESTDIR)
+	$(call quiet_echo, " [INSTALL] tests -> $(DESTDIR)")
+	$(Q)mkdir -p $(DESTDIR)
+	$(Q)install tests/* $(DESTDIR)
 
-clean: arch_clean libfdt_clean
-	$(RM) $(LIBFDT_archive)
-	$(RM) lib/.*.d $(libcflat) $(cflatobjs)
+#clean: arch_clean libfdt_clean
+clean:
+	$(call quiet_echo, " [CLEAN]")
+	$(Q)$(MAKE) --no-print-directory arch_clean libfdt_clean
+	$(Q)$(RM) $(LIBFDT_archive)
+	$(Q)$(RM) lib/.*.d $(libcflat) $(cflatobjs)
 
 distclean: clean
-	$(RM) lib/asm lib/config.h config.mak $(TEST_DIR)-run msr.out cscope.* build-head
-	$(RM) -r tests logs logs.old efi-tests
+	$(call quiet_echo, " [DISTCLEAN]")
+	$(Q)$(RM) lib/asm lib/config.h config.mak $(TEST_DIR)-run msr.out cscope.* build-head
+	$(Q)$(RM) -r tests logs logs.old efi-tests
 
 cscope: cscope_dirs = lib lib/libfdt lib/linux $(TEST_DIR) $(ARCH_LIBDIRS) lib/asm-generic
 cscope:
-	$(RM) ./cscope.*
-	find -L $(cscope_dirs) -maxdepth 1 \
+	$(Q)$(RM) ./cscope.*
+	$(Q)find -L $(cscope_dirs) -maxdepth 1 \
 		-name '*.[chsS]' -exec realpath --relative-base=$(CURDIR) {} \; | sort -u > ./cscope.files
-	cscope -bk
+	$(call quiet_echo, " [CSCOPE]")
+	$(Q)cscope -bk
 
 .PHONY: shellcheck
 shellcheck:
diff --git a/arm/Makefile.arm64 b/arm/Makefile.arm64
index 960880f1c..06e856ba1 100644
--- a/arm/Makefile.arm64
+++ b/arm/Makefile.arm64
@@ -52,4 +52,4 @@ tests += $(TEST_DIR)/debug.$(exe)
 include $(SRCDIR)/$(TEST_DIR)/Makefile.common
 
 arch_clean: arm_clean
-	$(RM) lib/arm64/.*.d
+	$(Q)$(RM) lib/arm64/.*.d
diff --git a/arm/Makefile.common b/arm/Makefile.common
index 5f22c9b08..0def9a327 100644
--- a/arm/Makefile.common
+++ b/arm/Makefile.common
@@ -72,48 +72,47 @@ eabiobjs = lib/arm/eabi_compat.o
 FLATLIBS = $(libcflat) $(LIBFDT_archive) $(libeabi)
 
 ifeq ($(CONFIG_EFI),y)
+%.aux.o: CFLAGS += -DPROGNAME=\"$(@:.aux.o=.efi)\" -DAUXFLAGS=$(AUXFLAGS)
 $(tests-all:.$(exe)=.aux.o): $(SRCDIR)/lib/auxinfo.c
-	$(CC) $(CFLAGS) -c -o $@ $< \
-		-DPROGNAME=\"$(@:.aux.o=.efi)\" -DAUXFLAGS=$(AUXFLAGS)
+	$(call cmd,cc)
 
-%.so: EFI_LDFLAGS += -defsym=EFI_SUBSYSTEM=0xa --no-undefined
-%.so: %.o $(FLATLIBS) $(SRCDIR)/arm/efi/elf_aarch64_efi.lds $(cstart.o) %.aux.o
-	$(LD) $(EFI_LDFLAGS) -o $@ -T $(SRCDIR)/arm/efi/elf_aarch64_efi.lds \
-		$(filter %.o, $^) $(FLATLIBS)
+%.so: LDFLAGS = $(EFI_LDFLAGS) -defsym=EFI_SUBSYSTEM=0xa --no-undefined -T $(SRCDIR)/arm/efi/elf_aarch64_efi.lds
+%.so: %.o $(SRCDIR)/arm/efi/elf_aarch64_efi.lds $(cstart.o) $(FLATLIBS) $(EFI_LIBS) %.aux.o
+	$(call cmd,ld)
 
 %.efi: %.so
 	$(call arch_elf_check, $^)
-	$(OBJCOPY) --only-keep-debug $^ $@.debug
-	$(OBJCOPY) --strip-debug $^
-	$(OBJCOPY) --add-gnu-debuglink=$@.debug $^
-	$(OBJCOPY) \
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) --only-keep-debug $^ $@.debug
+	$(Q)$(OBJCOPY) --strip-debug $^
+	$(Q)$(OBJCOPY) --add-gnu-debuglink=$@.debug $^
+	$(Q)$(OBJCOPY) \
 		-j .text -j .sdata -j .data -j .dynamic -j .dynsym \
 		-j .rel -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* \
 		-j .reloc \
 		-O binary $^ $@
 else
+%.aux.o: CFLAGS += -DPROGNAME=\"$(@:.aux.o=.flat)\" -DAUXFLAGS=$(AUXFLAGS)
 $(tests-all:.$(exe)=.aux.o): $(SRCDIR)/lib/auxinfo.c
-%.aux.o: $(SRCDIR)/lib/auxinfo.c
-	$(CC) $(CFLAGS) -c -o $@ $< \
-		-DPROGNAME=\"$(@:.aux.o=.flat)\" -DAUXFLAGS=$(AUXFLAGS)
+	$(call cmd,cc)
 
-%.elf: LDFLAGS += $(arch_LDFLAGS)
-%.elf: %.o $(FLATLIBS) $(SRCDIR)/arm/flat.lds $(cstart.o) %.aux.o
-	$(LD) $(LDFLAGS) -o $@ -T $(SRCDIR)/arm/flat.lds \
-		$(filter %.o, $^) $(FLATLIBS)
-	@chmod a-x $@
+%.elf: LDFLAGS += $(arch_LDFLAGS) -T $(SRCDIR)/arm/flat.lds
+%.elf: %.o $(SRCDIR)/arm/flat.lds $(cstart.o) $(FLATLIBS) %.aux.o
+	$(call cmd,ld)
+	$(Q)@chmod a-x $@
 
 %.flat: %.elf
 	$(call arch_elf_check, $^)
-	$(OBJCOPY) -O binary $^ $@
-	@chmod a-x $@
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) -O binary $^ $@
+	$(Q)chmod a-x $@
 endif
 
 $(libeabi): $(eabiobjs)
-	$(AR) rcs $@ $^
+	$(call cmd,ar)
 
 arm_clean: asm_offsets_clean
-	$(RM) $(TEST_DIR)/*.{o,flat,elf,so,efi,debug} $(libeabi) $(eabiobjs) \
+	$(Q)$(RM) $(TEST_DIR)/*.{o,flat,elf,so,efi,debug} $(libeabi) $(eabiobjs) \
 	      $(TEST_DIR)/.*.d $(TEST_DIR)/efi/.*.d lib/arm/.*.d
 
 generated-files = $(asm-offsets)
diff --git a/lib/libfdt/Makefile.libfdt b/lib/libfdt/Makefile.libfdt
index b6d8fc02d..3a1bc1128 100644
--- a/lib/libfdt/Makefile.libfdt
+++ b/lib/libfdt/Makefile.libfdt
@@ -13,6 +13,5 @@ LIBFDT_OBJS = $(LIBFDT_SRCS:%.c=%.o)
 LIBFDT_LIB = libfdt-$(DTC_VERSION).$(SHAREDLIB_EXT)
 
 libfdt_clean:
-	@$(VECHO) CLEAN "(libfdt)"
-	rm -f $(STD_CLEANFILES:%=$(LIBFDT_dir)/%)
-	rm -f $(LIBFDT_dir)/$(LIBFDT_soname)
+	$(Q)rm -f $(STD_CLEANFILES:%=$(LIBFDT_dir)/%)
+	$(Q)rm -f $(LIBFDT_dir)/$(LIBFDT_soname)
diff --git a/powerpc/Makefile.common b/powerpc/Makefile.common
index 3b219eee0..2fdf5bdae 100644
--- a/powerpc/Makefile.common
+++ b/powerpc/Makefile.common
@@ -52,37 +52,37 @@ cflatobjs += lib/powerpc/smp.o
 
 OBJDIRS += lib/powerpc
 
+%.aux.o: CFLAGS += -DPROGNAME=\"$(@:.aux.o=.elf)\"
 $(tests-all:.elf=.aux.o): $(SRCDIR)/lib/auxinfo.c
-	$(CC) $(CFLAGS) -c -o $@ $< -DPROGNAME=\"$(@:.aux.o=.elf)\"
+	$(call cmd,cc)
 
 FLATLIBS = $(libcflat) $(LIBFDT_archive)
 %.elf: CFLAGS += $(arch_CFLAGS)
-%.elf: LDFLAGS += $(arch_LDFLAGS) -pie -n
+%.elf: LDFLAGS += $(arch_LDFLAGS) -pie -n --build-id=none -T $(SRCDIR)/powerpc/flat.lds
 %.elf: %.o $(FLATLIBS) $(SRCDIR)/powerpc/flat.lds $(cstart.o) $(reloc.o) %.aux.o
-	$(LD) $(LDFLAGS) -o $@ \
-		-T $(SRCDIR)/powerpc/flat.lds --build-id=none \
-		$(filter %.o, $^) $(FLATLIBS)
-	@chmod a-x $@
-	@echo -n Checking $@ for unsupported reloc types...
+	$(call cmd,ld)
+	$(Q)chmod a-x $@
 	@if $(OBJDUMP) -R $@ | grep R_ | grep -v R_PPC64_RELATIVE; then	\
+		@echo "Unsupported reloc types in $@"			\
 		false;							\
-	else								\
-		echo " looks good.";					\
 	fi
 
 $(TEST_DIR)/boot_rom.bin: $(TEST_DIR)/boot_rom.elf
-	dd if=/dev/zero of=$@ bs=256 count=1
-	$(OBJCOPY) -O binary $^ $@.tmp
-	cat $@.tmp >> $@
-	$(RM) $@.tmp
+	$(call quiet_echo, " [DD]      $@")
+	$(Q)dd if=/dev/zero of=$@ bs=256 count=1 status=none
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) -O binary $^ $@.tmp
+	$(Q)cat $@.tmp >> $@
+	$(Q)$(RM) $@.tmp
 
 $(TEST_DIR)/boot_rom.elf: CFLAGS = -mbig-endian
+$(TEST_DIR)/boot_rom.elf: LDFLAGS = -EB -nostdlib -Ttext=0x100 --entry=start --build-id=none
 $(TEST_DIR)/boot_rom.elf: $(TEST_DIR)/boot_rom.o
-	$(LD) -EB -nostdlib -Ttext=0x100 --entry=start --build-id=none -o $@ $<
-	@chmod a-x $@
+	$(call cmd,ld)
+	$(Q)chmod a-x $@
 
 powerpc_clean: asm_offsets_clean
-	$(RM) $(TEST_DIR)/*.{o,elf} $(TEST_DIR)/boot_rom.bin \
+	$(Q)$(RM) $(TEST_DIR)/*.{o,elf} $(TEST_DIR)/boot_rom.bin \
 	      $(TEST_DIR)/.*.d lib/powerpc/.*.d
 
 generated-files = $(asm-offsets)
diff --git a/powerpc/Makefile.ppc64 b/powerpc/Makefile.ppc64
index a18a9628f..b10499229 100644
--- a/powerpc/Makefile.ppc64
+++ b/powerpc/Makefile.ppc64
@@ -27,4 +27,4 @@ tests = $(TEST_DIR)/spapr_vpa.elf
 include $(SRCDIR)/$(TEST_DIR)/Makefile.common
 
 arch_clean: powerpc_clean
-	$(RM) lib/ppc64/.*.d
+	$(Q)$(RM) lib/ppc64/.*.d
diff --git a/riscv/Makefile b/riscv/Makefile
index eacca7ce1..f6fb9488a 100644
--- a/riscv/Makefile
+++ b/riscv/Makefile
@@ -81,9 +81,9 @@ CFLAGS += -I $(SRCDIR)/lib -I $(SRCDIR)/lib/libfdt
 asm-offsets = lib/riscv/asm-offsets.h
 include $(SRCDIR)/scripts/asm-offsets.mak
 
+%.aux.o: CFLAGS += -DPROGNAME=\"$(notdir $(@:.aux.o=.$(exe)))\" -DAUXFLAGS=$(AUXFLAGS)
 $(tests:.$(exe)=.aux.o): $(SRCDIR)/lib/auxinfo.c
-	$(CC) $(CFLAGS) -c -o $@ $< \
-		-DPROGNAME=\"$(notdir $(@:.aux.o=.$(exe)))\" -DAUXFLAGS=$(AUXFLAGS)
+	$(call cmd,cc)
 
 ifeq ($(CONFIG_EFI),y)
 # avoid jump tables before all relocations have been processed
@@ -95,36 +95,37 @@ cflatobjs += lib/efi.o
 .PRECIOUS: %.so
 
 %.so: EFI_LDFLAGS += -defsym=EFI_SUBSYSTEM=0xa --no-undefined
-%.so: %.o $(FLATLIBS) $(SRCDIR)/riscv/efi/elf_riscv64_efi.lds $(cstart.o) %.aux.o
-	$(LD) $(EFI_LDFLAGS) -o $@ -T $(SRCDIR)/riscv/efi/elf_riscv64_efi.lds \
-		$(filter %.o, $^) $(FLATLIBS)
+%.so: LDFLAGS = $(EFI_LDFLAGS) -T $(SRCDIR)/riscv/efi/elf_riscv64_efi.lds
+%.so: %.o $(SRCDIR)/riscv/efi/elf_riscv64_efi.lds $(cstart.o) %.aux.o $(FLATLIBS)
+	$(call cmd,ld)
 
 %.efi: %.so
 	$(call arch_elf_check, $^)
-	$(OBJCOPY) --only-keep-debug $^ $@.debug
-	$(OBJCOPY) --strip-debug $^
-	$(OBJCOPY) --add-gnu-debuglink=$@.debug $^
-	$(OBJCOPY) \
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) --only-keep-debug $^ $@.debug
+	$(Q)$(OBJCOPY) --strip-debug $^
+	$(Q)$(OBJCOPY) --add-gnu-debuglink=$@.debug $^
+	$(Q)$(OBJCOPY) \
 		-j .text -j .sdata -j .data -j .rodata -j .dynamic -j .dynsym \
 		-j .rel -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* \
 		-j .reloc \
 		-O binary $^ $@
 else
-%.elf: LDFLAGS += -pie -n -z notext
-%.elf: %.o $(FLATLIBS) $(SRCDIR)/riscv/flat.lds $(cstart.o) %.aux.o
-	$(LD) $(LDFLAGS) -o $@ -T $(SRCDIR)/riscv/flat.lds \
-		$(filter %.o, $^) $(FLATLIBS)
-	@chmod a-x $@
+%.elf: LDFLAGS += -pie -n -z notext -T $(SRCDIR)/riscv/flat.lds
+%.elf: %.o $(SRCDIR)/riscv/flat.lds $(cstart.o) %.aux.o $(FLATLIBS)
+	$(call cmd,ld)
+	$(Q)@chmod a-x $@
 
 %.flat: %.elf
 	$(call arch_elf_check, $^)
+	$(call quiet_echo, " [OBJCOPY] $@")
 	$(OBJCOPY) -O binary $^ $@
-	@chmod a-x $@
+	$(Q)@chmod a-x $@
 endif
 
 generated-files = $(asm-offsets)
 $(tests:.$(exe)=.o) $(cstart.o) $(cflatobjs): $(generated-files)
 
 arch_clean: asm_offsets_clean
-	$(RM) $(TEST_DIR)/*.{o,flat,elf,so,efi,debug} \
+	$(Q)$(RM) $(TEST_DIR)/*.{o,flat,elf,so,efi,debug} \
 	      $(TEST_DIR)/.*.d $(TEST_DIR)/efi/.*.d lib/riscv/.*.d
diff --git a/s390x/Makefile b/s390x/Makefile
index 4c0c8085c..28d8a5b07 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -82,7 +82,7 @@ CFLAGS += -O2
 CFLAGS += -march=zEC12
 CFLAGS += -mbackchain
 CFLAGS += -fno-delete-null-pointer-checks
-LDFLAGS += -Wl,--build-id=none
+LDFLAGS += --build-id=none
 
 # We want to keep intermediate files
 .PRECIOUS: %.o %.lds
@@ -148,54 +148,65 @@ endif
 
 # the asm/c snippets %.o have additional generated files as dependencies
 $(SNIPPET_DIR)/asm/%.o: $(SNIPPET_DIR)/asm/%.S $(asm-offsets)
-	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
+	$(call cmd,cc)
 
 $(SNIPPET_DIR)/c/%.o: $(SNIPPET_DIR)/c/%.c $(asm-offsets)
-	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
+	$(call cmd,cc)
 
+$(SNIPPET_DIR)/asm/%.gbin: LDFLAGS += -T $(SNIPPET_DIR)/asm/flat.lds
 $(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(SNIPPET_DIR)/asm/flat.lds
-	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/asm/flat.lds $<
-	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
+	$(call cmd,ld)
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
 	truncate -s '%4096' $@
 
+$(SNIPPET_DIR)/c/%.gbin: LDFLAGS += -T $(SNIPPET_DIR)/c/flat.lds
 $(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) $(SNIPPET_DIR)/c/flat.lds
-	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/c/flat.lds $< $(snippet_lib) $(FLATLIBS)
-	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
-	truncate -s '%4096' $@
+	$(call cmd,ld)
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
+	$(Q)truncate -s '%4096' $@
 
 %.hdr: %.gbin $(HOST_KEY_DOCUMENT)
-	$(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x0,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@
+	$(call quiet_echo, " [SEHDR]   $@")
+	$(Q)$(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x0,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@
 
 .SECONDARY:
 %.gobj: %.gbin
-	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
 
 .SECONDARY:
 %.hdr.obj: %.hdr
-	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
 
 lds-autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d -MT $@
+%.lds: CPPFLAGS += $(lds-autodepend-flags)
 %.lds: %.lds.S $(asm-offsets)
-	$(CPP) $(lds-autodepend-flags) $(CPPFLAGS) -P -C -o $@ $<
+	$(call cmd,cpp)
 
+%.aux.o: CFLAGS += -DPROGNAME=\"$(@:.aux.o=.elf)\"
 $(tests:.elf=.aux.o): $(SRCDIR)/lib/auxinfo.c
-	$(CC) $(CFLAGS) -c -o $@ $< -DPROGNAME=\"$(@:.aux.o=.elf)\"
+	$(call cmd,cc)
 
 .SECONDEXPANSION:
-%.elf: $(FLATLIBS) $(asmlib) $(SRCDIR)/s390x/flat.lds $$(snippets-obj) $$(snippet-hdr-obj) %.o %.aux.o
-	@$(CC) $(LDFLAGS) -o $@ -T $(SRCDIR)/s390x/flat.lds \
-		$(filter %.o, $^) $(FLATLIBS) $(snippets-obj) $(snippet-hdr-obj) || \
-		{ echo "Failure probably caused by missing definition of gen-se-header executable"; exit 1; }
-	@chmod a-x $@
+%.elf: LDFLAGS += -T $(SRCDIR)/s390x/flat.lds
+%.elf: $(SRCDIR)/s390x/flat.lds $$(snippets-obj) $$(snippet-hdr-obj) %.o %.aux.o $(FLATLIBS) $(asmlib)
+	$(call cmd,ld)
+# XXX: some test for gen-se-header executable?
+	$(Q)@chmod a-x $@
 
 # Secure Execution Customer Communication Key file
 # 32 bytes of key material, uses existing one if available
 comm-key = $(TEST_DIR)/comm.key
 $(comm-key):
-	dd if=/dev/urandom of=$@ bs=32 count=1 status=none
+	$(call quiet_echo, " [DD]      $@")
+	$(Q)dd if=/dev/urandom of=$@ bs=32 count=1 status=none
 
 %.bin: %.elf
-	$(OBJCOPY) -O binary  $< $@
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) -O binary  $< $@
 
 # The genprotimg arguments for the cck changed over time so we need to
 # figure out which argument to use in order to set the cck
@@ -221,14 +232,14 @@ endif
 $(patsubst %.parmfile,%.pv.bin,$(wildcard s390x/*.parmfile)): %.pv.bin: %.parmfile
 %.pv.bin: %.bin $(HOST_KEY_DOCUMENT) $(comm-key)
 	$(eval parmfile_args = $(if $(filter %.parmfile,$^),--parmfile $(filter %.parmfile,$^),))
-	$(GENPROTIMG) --host-key-document $(HOST_KEY_DOCUMENT) --no-verify $(GENPROTIMG_COMM_OPTION) $(comm-key) --x-pcf $(GENPROTIMG_PCF) $(parmfile_args) --image $(filter %.bin,$^) -o $@
+	$(call quiet_echo, " [GENPROT] $@")
+	$(Q)$(GENPROTIMG) --host-key-document $(HOST_KEY_DOCUMENT) --no-verify $(GENPROTIMG_COMM_OPTION) $(comm-key) --x-pcf $(GENPROTIMG_PCF) $(parmfile_args) --image $(filter %.bin,$^) -o $@
 
 $(snippet_asmlib): $$(patsubst %.o,%.S,$$@) $(asm-offsets)
-	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
-
+	$(call cmd,cc)
 
 arch_clean: asm_offsets_clean
-	$(RM) $(TEST_DIR)/*.{o,elf,bin,lds} $(SNIPPET_DIR)/*/*.{o,elf,*bin,*obj,hdr,lds} $(SNIPPET_DIR)/asm/.*.d $(TEST_DIR)/.*.d lib/s390x/.*.d $(comm-key)
+	$(Q)$(RM) $(TEST_DIR)/*.{o,elf,bin,lds} $(SNIPPET_DIR)/*/*.{o,elf,*bin,*obj,hdr,lds} $(SNIPPET_DIR)/asm/.*.d $(TEST_DIR)/.*.d lib/s390x/.*.d $(comm-key)
 
 generated-files = $(asm-offsets)
 $(tests:.elf=.o) $(asmlib) $(cflatobjs): $(generated-files)
diff --git a/scripts/asm-offsets.mak b/scripts/asm-offsets.mak
index 7b64162dd..db5f741c8 100644
--- a/scripts/asm-offsets.mak
+++ b/scripts/asm-offsets.mak
@@ -16,7 +16,7 @@ define sed-y
 endef
 
 define make_asm_offsets
-	(set -e; \
+	$(Q)(set -e; \
 	 echo "#ifndef __ASM_OFFSETS_H__"; \
 	 echo "#define __ASM_OFFSETS_H__"; \
 	 echo "/*"; \
@@ -29,16 +29,17 @@ define make_asm_offsets
 	 echo "#endif" ) > $@
 endef
 
+$(asm-offsets:.h=.s): CFLAGS += -fverbose-asm -S
 $(asm-offsets:.h=.s): $(asm-offsets:.h=.c)
-	$(CC) $(CFLAGS) -fverbose-asm -S -o $@ $<
+	$(call cmd,cc)
 
 $(asm-offsets): $(asm-offsets:.h=.s)
 	$(call make_asm_offsets)
-	cp -f $(asm-offsets) lib/generated/
+	$(Q)cp -f $(asm-offsets) lib/generated/
 
 OBJDIRS += lib/generated
 
 asm_offsets_clean:
-	$(RM) $(asm-offsets) $(asm-offsets:.h=.s) \
+	$(Q)$(RM) $(asm-offsets) $(asm-offsets:.h=.s) \
 	      $(addprefix lib/generated/,$(notdir $(asm-offsets)))
 
diff --git a/scripts/mkstandalone.sh b/scripts/mkstandalone.sh
index 2318a85f0..3307c25b1 100755
--- a/scripts/mkstandalone.sh
+++ b/scripts/mkstandalone.sh
@@ -94,7 +94,7 @@ function mkstandalone()
 	generate_test "$@" > $standalone
 
 	chmod +x $standalone
-	echo Written $standalone.
+	echo " [WRITE]   $standalone"
 }
 
 if [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ] && [ ! -f "$ERRATATXT" ]; then
diff --git a/x86/Makefile.common b/x86/Makefile.common
index 4ae9a5579..7896fb6c9 100644
--- a/x86/Makefile.common
+++ b/x86/Makefile.common
@@ -48,32 +48,33 @@ FLATLIBS = lib/libcflat.a
 ifeq ($(CONFIG_EFI),y)
 .PRECIOUS: %.efi %.so
 
-%.so: %.o $(FLATLIBS) $(SRCDIR)/x86/efi/elf_x86_64_efi.lds $(cstart.o)
-	$(LD) -T $(SRCDIR)/x86/efi/elf_x86_64_efi.lds $(EFI_LDFLAGS) -o $@ \
-		$(filter %.o, $^) $(FLATLIBS)
-	@chmod a-x $@
+%.so: LDFLAGS = $(EFI_LDFLAGS) -T $(SRCDIR)/x86/efi/elf_x86_64_efi.lds
+%.so: %.o $(SRCDIR)/x86/efi/elf_x86_64_efi.lds $(cstart.o) $(FLATLIBS)
+	$(call cmd,ld)
+	$(Q)@chmod a-x $@
 
 %.efi: %.so
-	$(OBJCOPY) --only-keep-debug $^ $@.debug
-	$(OBJCOPY) --strip-debug $^
-	$(OBJCOPY) --add-gnu-debuglink=$@.debug $^
-	$(OBJCOPY) \
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) --only-keep-debug $^ $@.debug
+	$(Q)$(OBJCOPY) --strip-debug $^
+	$(Q)$(OBJCOPY) --add-gnu-debuglink=$@.debug $^
+	$(Q)$(OBJCOPY) \
 		-j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
 		-j .rela -j .reloc -S --target=$(FORMAT) $< $@
-	@chmod a-x $@
+	$(Q)chmod a-x $@
 else
 # We want to keep intermediate file: %.elf and %.o
 .PRECIOUS: %.elf %.o
 
-%.elf: LDFLAGS += $(arch_LDFLAGS)
-%.elf: %.o $(FLATLIBS) $(SRCDIR)/x86/flat.lds $(cstart.o)
-	$(LD) $(LDFLAGS) -T $(SRCDIR)/x86/flat.lds -o $@ \
-		$(filter %.o, $^) $(FLATLIBS)
-	@chmod a-x $@
+%.elf: LDFLAGS += $(arch_LDFLAGS) -T $(SRCDIR)/x86/flat.lds
+%.elf: %.o $(SRCDIR)/x86/flat.lds $(cstart.o) $(FLATLIBS)
+	$(call cmd,ld)
+	$(Q)@chmod a-x $@
 
 %.flat: %.elf
-	$(OBJCOPY) -O elf32-i386 $^ $@
-	@chmod a-x $@
+	$(call quiet_echo, " [OBJCOPY] $@")
+	$(Q)$(OBJCOPY) -O elf32-i386 $^ $@
+	$(Q)chmod a-x $@
 endif
 
 tests-common = $(TEST_DIR)/vmexit.$(exe) $(TEST_DIR)/tsc.$(exe) \
@@ -103,9 +104,9 @@ test_cases: $(tests-common) $(tests)
 
 $(TEST_DIR)/%.o: CFLAGS += -std=gnu99 -ffreestanding -I $(SRCDIR)/lib -I $(SRCDIR)/lib/x86 -I lib
 
+$(TEST_DIR)/realmode.elf: LDFLAGS = -m elf_i386 -nostdlib -T $(SRCDIR)/$(TEST_DIR)/realmode.lds
 $(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o
-	$(LD) -m elf_i386 -nostdlib -o $@ \
-	      -T $(SRCDIR)/$(TEST_DIR)/realmode.lds $^
+	$(call cmd,ld)
 
 $(TEST_DIR)/realmode.o: bits = $(if $(call cc-option,-m16,""),16,32)
 
@@ -124,7 +125,7 @@ $(TEST_DIR)/hyperv_stimer.$(bin): $(TEST_DIR)/hyperv.o
 $(TEST_DIR)/hyperv_connections.$(bin): $(TEST_DIR)/hyperv.o
 
 arch_clean:
-	$(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \
+	$(Q)$(RM) $(TEST_DIR)/*.o $(TEST_DIR)/*.flat $(TEST_DIR)/*.elf \
 	$(TEST_DIR)/.*.d lib/x86/.*.d \
 	$(TEST_DIR)/efi/*.o $(TEST_DIR)/efi/.*.d \
 	$(TEST_DIR)/*.so $(TEST_DIR)/*.efi $(TEST_DIR)/*.debug

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] build: Make build output pretty
  2024-06-05  0:38       ` Nicholas Piggin
@ 2024-06-12 10:32         ` Thomas Huth
  2024-06-14  1:07           ` Nicholas Piggin
  0 siblings, 1 reply; 19+ messages in thread
From: Thomas Huth @ 2024-06-12 10:32 UTC (permalink / raw)
  To: Nicholas Piggin, Andrew Jones; +Cc: kvm

On 05/06/2024 02.38, Nicholas Piggin wrote:
> On Mon Jun 3, 2024 at 6:56 PM AEST, Andrew Jones wrote:
>> On Mon, Jun 03, 2024 at 10:26:50AM GMT, Thomas Huth wrote:
>>> On 02/06/2024 14.25, Nicholas Piggin wrote:
>>>> Unless make V=1 is specified, silence make recipe echoing and print
>>>> an abbreviated line for major build steps.
>>>>
>>>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
>>>> ---
>>>>    Makefile                | 14 ++++++++++++++
>>>>    arm/Makefile.common     |  7 +++++++
>>>>    powerpc/Makefile.common | 11 +++++++----
>>>>    riscv/Makefile          |  5 +++++
>>>>    s390x/Makefile          | 18 +++++++++++++++++-
>>>>    scripts/mkstandalone.sh |  2 +-
>>>>    x86/Makefile.common     |  5 +++++
>>>>    7 files changed, 56 insertions(+), 6 deletions(-)
>>>
>>> The short lines look superfluous in verbose mode, e.g.:
>>>
>>>   [OBJCOPY] s390x/memory-verify.bin
>>> objcopy -O binary  s390x/memory-verify.elf s390x/memory-verify.bin
>>>
>>> Could we somehow suppress the echo lines in verbose mode, please?
>>>
>>> For example in the SLOF project, it's done like this:
>>>
>>> https://gitlab.com/slof/slof/-/blob/master/make.rules?ref_type=heads#L48
>>>
>>> By putting the logic into $CC and friends, you also don't have to add
>>> "@echo" statements all over the place.
>>
>> And I presume make will treat the printing and compiling as one unit, so
>> parallel builds still get the summary above the error messages when
>> compilation fails. The way this patch is now a parallel build may show
>> the summary for the last successful build and then error messages for
>> a build that hasn't output its summary yet, which can be confusing.
>>
>> So I agree that something more like SLOF's approach would be better.
> 
> Hmm... kbuild type commands is a pretty big patch. I like it though.
> Thoughts?

Looks pretty complex to me ... do we really need this complexity in the 
k-u-t? If not, I think I'd rather prefer to go with a more simple approach 
like the one from SLOF.

  Thomas



^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] build: Make build output pretty
  2024-06-12 10:32         ` Thomas Huth
@ 2024-06-14  1:07           ` Nicholas Piggin
  0 siblings, 0 replies; 19+ messages in thread
From: Nicholas Piggin @ 2024-06-14  1:07 UTC (permalink / raw)
  To: Thomas Huth, Andrew Jones; +Cc: kvm

On Wed Jun 12, 2024 at 8:32 PM AEST, Thomas Huth wrote:
> On 05/06/2024 02.38, Nicholas Piggin wrote:
> > On Mon Jun 3, 2024 at 6:56 PM AEST, Andrew Jones wrote:
> >> On Mon, Jun 03, 2024 at 10:26:50AM GMT, Thomas Huth wrote:
> >>> On 02/06/2024 14.25, Nicholas Piggin wrote:
> >>>> Unless make V=1 is specified, silence make recipe echoing and print
> >>>> an abbreviated line for major build steps.
> >>>>
> >>>> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> >>>> ---
> >>>>    Makefile                | 14 ++++++++++++++
> >>>>    arm/Makefile.common     |  7 +++++++
> >>>>    powerpc/Makefile.common | 11 +++++++----
> >>>>    riscv/Makefile          |  5 +++++
> >>>>    s390x/Makefile          | 18 +++++++++++++++++-
> >>>>    scripts/mkstandalone.sh |  2 +-
> >>>>    x86/Makefile.common     |  5 +++++
> >>>>    7 files changed, 56 insertions(+), 6 deletions(-)
> >>>
> >>> The short lines look superfluous in verbose mode, e.g.:
> >>>
> >>>   [OBJCOPY] s390x/memory-verify.bin
> >>> objcopy -O binary  s390x/memory-verify.elf s390x/memory-verify.bin
> >>>
> >>> Could we somehow suppress the echo lines in verbose mode, please?
> >>>
> >>> For example in the SLOF project, it's done like this:
> >>>
> >>> https://gitlab.com/slof/slof/-/blob/master/make.rules?ref_type=heads#L48
> >>>
> >>> By putting the logic into $CC and friends, you also don't have to add
> >>> "@echo" statements all over the place.
> >>
> >> And I presume make will treat the printing and compiling as one unit, so
> >> parallel builds still get the summary above the error messages when
> >> compilation fails. The way this patch is now a parallel build may show
> >> the summary for the last successful build and then error messages for
> >> a build that hasn't output its summary yet, which can be confusing.
> >>
> >> So I agree that something more like SLOF's approach would be better.
> > 
> > Hmm... kbuild type commands is a pretty big patch. I like it though.
> > Thoughts?
>
> Looks pretty complex to me ... do we really need this complexity in the 
> k-u-t? If not, I think I'd rather prefer to go with a more simple approach 
> like the one from SLOF.

The first patch I posted added silent to make too, but I don't love
it because it silences things that you missed or forgot about.

This way is loud by default and you have to adjust recipes to be
quiet. It caught a couple of things I missed the first time around.
I think that's a long term advantage for more short term churn.

Thanks,
Nick

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2024-06-14  1:07 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-02 12:25 [kvm-unit-tests PATCH 0/4] powerpc fix and misc docs/build/CI improvements Nicholas Piggin
2024-06-02 12:25 ` [kvm-unit-tests PATCH 1/4] powerpc/sprs: Fix report_kfail call Nicholas Piggin
2024-06-03  4:22   ` Thomas Huth
2024-06-02 12:25 ` [kvm-unit-tests PATCH 2/4] doc: update unittests doc Nicholas Piggin
2024-06-03  4:24   ` Thomas Huth
2024-06-03  6:47   ` Andrew Jones
2024-06-03  8:12     ` Nicholas Piggin
2024-06-03  8:45       ` Andrew Jones
2024-06-02 12:25 ` [kvm-unit-tests PATCH 3/4] build: Make build output pretty Nicholas Piggin
2024-06-03  7:00   ` Andrew Jones
2024-06-03  8:26   ` Thomas Huth
2024-06-03  8:56     ` Andrew Jones
2024-06-05  0:38       ` Nicholas Piggin
2024-06-12 10:32         ` Thomas Huth
2024-06-14  1:07           ` Nicholas Piggin
2024-06-04  5:05     ` Nicholas Piggin
2024-06-02 12:25 ` [kvm-unit-tests PATCH 4/4] gitlab-ci: Always save artifacts Nicholas Piggin
2024-06-03  4:29   ` Thomas Huth
2024-06-03  8:17     ` Nicholas Piggin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox