xref: /qemu/target/xtensa/import_core.sh (revision 2557c3adf07ffcf12316afdbdecedfd260c77853)
19bea2e91SMax Filippov#! /bin/bash -e
29bea2e91SMax Filippov
39bea2e91SMax FilippovOVERLAY="$1"
49bea2e91SMax FilippovNAME="$2"
59bea2e91SMax FilippovFREQ=40000
69bea2e91SMax FilippovBASE=$(dirname "$0")
79bea2e91SMax FilippovTARGET="$BASE"/core-$NAME
89bea2e91SMax Filippov
99bea2e91SMax Filippov[ $# -ge 2 -a -f "$OVERLAY" ] || { cat <<EOF
109bea2e91SMax FilippovUsage: $0 overlay-archive-to-import core-name [frequency-in-KHz]
119bea2e91SMax Filippov    overlay-archive-to-import:  file name of xtensa-config-overlay.tar.gz
129bea2e91SMax Filippov                                to import configuration from.
139bea2e91SMax Filippov    core-name:                  QEMU name of the imported core. Must be valid
149bea2e91SMax Filippov                                C identifier.
159bea2e91SMax Filippov    frequency-in-KHz:           core frequency (40MHz if not specified).
169bea2e91SMax FilippovEOF
179bea2e91SMax Filippovexit
189bea2e91SMax Filippov}
199bea2e91SMax Filippov
209bea2e91SMax Filippov[ $# -ge 3 ] && FREQ="$3"
219bea2e91SMax Filippovmkdir -p "$TARGET"
229bea2e91SMax Filippovtar -xf "$OVERLAY" -C "$TARGET" --strip-components=1 \
239bea2e91SMax Filippov    --xform='s/core/core-isa/' config/core.h
249bea2e91SMax Filippovtar -xf "$OVERLAY" -O gdb/xtensa-config.c | \
251479073bSMax Filippov    sed -n '1,/*\//p;/XTREG/,/XTREG_END/p' > "$TARGET"/gdb-config.c
26*2557c3adSMax Filippov#
27*2557c3adSMax Filippov# Fix up known issues in the xtensa-modules.c
28*2557c3adSMax Filippov#
29*2557c3adSMax Filippovtar -xf "$OVERLAY" -O binutils/xtensa-modules.c | \
30*2557c3adSMax Filippov    sed -e 's/\(xtensa_opcode_encode_fn.*\[\] =\)/static \1/' \
31*2557c3adSMax Filippov        -e '/^int num_bypass_groups()/,/}/d' \
32*2557c3adSMax Filippov        -e '/^int num_bypass_group_chunks()/,/}/d' \
33*2557c3adSMax Filippov        -e '/^uint32 \*bypass_entry(int i)/,/}/d' \
34*2557c3adSMax Filippov        -e '/^#include "ansidecl.h"/d' \
35*2557c3adSMax Filippov        -e '/^Slot_[a-zA-Z0-9_]\+_decode (const xtensa_insnbuf insn)/,/^}/s/^  return 0;$/  return XTENSA_UNDEFINED;/' \
36*2557c3adSMax Filippov    > "$TARGET"/xtensa-modules.c
379bea2e91SMax Filippov
389bea2e91SMax Filippovcat <<EOF > "${TARGET}.c"
39cb3825b9SMax Filippov#include "qemu/osdep.h"
409bea2e91SMax Filippov#include "cpu.h"
419bea2e91SMax Filippov#include "exec/exec-all.h"
429bea2e91SMax Filippov#include "exec/gdbstub.h"
43cb3825b9SMax Filippov#include "qemu-common.h"
449bea2e91SMax Filippov#include "qemu/host-utils.h"
459bea2e91SMax Filippov
469bea2e91SMax Filippov#include "core-$NAME/core-isa.h"
479bea2e91SMax Filippov#include "overlay_tool.h"
489bea2e91SMax Filippov
49*2557c3adSMax Filippov#define xtensa_modules xtensa_modules_$NAME
50*2557c3adSMax Filippov#include "core-$NAME/xtensa-modules.c"
51*2557c3adSMax Filippov
521479073bSMax Filippovstatic XtensaConfig $NAME __attribute__((unused)) = {
539bea2e91SMax Filippov    .name = "$NAME",
549bea2e91SMax Filippov    .gdb_regmap = {
559bea2e91SMax Filippov        .reg = {
569bea2e91SMax Filippov#include "core-$NAME/gdb-config.c"
579bea2e91SMax Filippov        }
589bea2e91SMax Filippov    },
59*2557c3adSMax Filippov    .isa_internal = &xtensa_modules,
609bea2e91SMax Filippov    .clock_freq_khz = $FREQ,
619bea2e91SMax Filippov    DEFAULT_SECTIONS
629bea2e91SMax Filippov};
639bea2e91SMax Filippov
649bea2e91SMax FilippovREGISTER_CORE($NAME)
659bea2e91SMax FilippovEOF
669bea2e91SMax Filippov
679bea2e91SMax Filippovgrep -q core-${NAME}.o "$BASE"/Makefile.objs || \
689bea2e91SMax Filippov    echo "obj-y += core-${NAME}.o" >> "$BASE"/Makefile.objs
69