Commit d54927ef authored by Wei Huang's avatar Wei Huang Committed by Dr. David Alan Gilbert
Browse files

tests/migration: Support cross compilation in generating boot header file



Recently a new configure option, CROSS_CC_GUEST, was added to
$(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
patch tries to leverage this option to support cross compilation when the
migration boot block file is being re-generated:

 * The x86 related files are moved to a new sub-dir (named ./i386).
 * A new top-layer Makefile is created in tests/migration/ directory.
   This Makefile searches and parses CROSS_CC_GUEST to generate CROSS_PREFIX.
   The CROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.

Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
Signed-off-by: default avatarWei Huang <wei@redhat.com>
Message-Id: <1536174934-26022-3-git-send-email-wei@redhat.com>
Signed-off-by: default avatarJuan Quintela <quintela@redhat.com>
Signed-off-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
parent fe730774
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ static const char *tmpfs;
/* A simple PC boot sector that modifies memory (1-100MB) quickly
 * outputting a 'B' every so often if it's still running.
 */
#include "tests/migration/x86-a-b-bootblock.h"
#include "tests/migration/i386/a-b-bootblock.h"

static void init_bootfile_x86(const char *bootpath)
{
+24 −20
Original line number Diff line number Diff line
# To specify cross compiler prefix, use CROSS_PREFIX=
#   $ make CROSS_PREFIX=x86_64-linux-gnu-
#
# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
#
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.
#

TARGET_LIST = i386

SRC_PATH = ../..

override define __note
/* This file is automatically generated from
 * tests/migration/x86-a-b-bootblock.S, edit that and then run
 * tests/migration/rebuild-x86-bootblock.sh to update,
 * and then remember to send both in your patch submission.
/* This file is automatically generated from the assembly file in
 * tests/migration/$@. Edit that file and then run "make all"
 * inside tests/migration to update, and then remember to send both
 * the header and the assembler differences in your patch submission.
 */
endef
export __note

.PHONY: all clean
all: x86-a-b-bootblock.h

x86-a-b-bootblock.h: x86.bootsect
	echo "$$__note" > header.tmp
	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
	mv header.tmp $@
find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak) /dev/null))
parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call parse-cross-prefix,$(1)))

x86.bootsect: x86.boot
	dd if=$< of=$@ bs=256 count=2 skip=124
.PHONY: all $(TARGET_LIST)

x86.boot: x86.o
	$(CROSS_PREFIX)objcopy -O binary $< $@
all: $(TARGET_LIST)

x86.o: x86-a-b-bootblock.S
	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
$(TARGET_LIST):
	$(MAKE) -C $@ $(call gen-cross-prefix,$@)

clean:
	@rm -rf *.boot *.o *.bootsect
	for target in $(TARGET_LIST); do \
		$(MAKE) -C $$target clean; \
	done
+22 −0
Original line number Diff line number Diff line
# To specify cross compiler prefix, use CROSS_PREFIX=
#   $ make CROSS_PREFIX=x86_64-linux-gnu-

.PHONY: all clean
all: a-b-bootblock.h

a-b-bootblock.h: x86.bootsect
	echo "$$__note" > header.tmp
	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
	mv header.tmp $@

x86.bootsect: x86.boot
	dd if=$< of=$@ bs=256 count=2 skip=124

x86.boot: x86.o
	$(CROSS_PREFIX)objcopy -O binary $< $@

x86.o: a-b-bootblock.S
	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@

clean:
	@rm -rf *.boot *.o *.bootsect
+0 −4
Original line number Diff line number Diff line
@@ -3,10 +3,6 @@
#  range.
#  Outputs an initial 'A' on serial followed by repeated 'B's
#
# run   tests/migration/rebuild-x86-bootblock.sh
#   to regenerate the hex, and remember to include both the .h and .s
#   in any patches.
#
# Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.
+4 −4
Original line number Diff line number Diff line
/* This file is automatically generated from
 * tests/migration/x86-a-b-bootblock.s, edit that and then run
 * tests/migration/rebuild-x86-bootblock.sh to update,
 * and then remember to send both in your patch submission.
/* This file is automatically generated from the assembly file in
 * tests/migration/i386. Edit that file and then run "make all"
 * inside tests/migration to update, and then remember to send both
 * the header and the assembler differences in your patch submission.
 */
unsigned char x86_bootsect[] = {
  0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,