Skip to content

Commit

Permalink
Add Xilinx QEMU (qemu-system-xilinx-aarch64).
Browse files Browse the repository at this point in the history
This commit adds Xilinx QEMU recipe for building AArch64 QEMU
(qemu-system-xilinx-aarch64).

The Xilinx QEMU fork is necessary because the arm-generic-fdt machine
type, required to properly emulate the Xilinx Zynq SoC, is only
availabe on it at this time.

For more details, refer to the issue zephyrproject-rtos#132.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
  • Loading branch information
stephanosio authored and galak committed Nov 4, 2019
1 parent b1afee1 commit 9bdbd6b
Show file tree
Hide file tree
Showing 3 changed files with 216 additions and 0 deletions.
4 changes: 4 additions & 0 deletions meta-zephyr-sdk/recipes-devtools/qemu/zephyr-qemu_git.bb
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,10 @@ do_configure() {
--sysconfdir=${sysconfdir} --libexecdir=${libexecdir} --localstatedir=${localstatedir}
}

do_install_append() {
ln -sf ../xilinx/bin/qemu-system-aarch64 ${D}${bindir}/qemu-system-xilinx-aarch64
}

FILES_${PN} = " \
/opt/zephyr-sdk \
"
Expand Down
211 changes: 211 additions & 0 deletions meta-zephyr-sdk/recipes-devtools/xilinx_qemu/xilinx-qemu_git.bb
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@

DEPENDS = "glib-2.0 zlib pixman gnutls dtc"
LICENSE = "GPLv2"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913"

SRCREV = "6617fbc8be3525ca524f7d4ef7fc7b14c5b0c822"
SRC_URI = "git://github.com/Xilinx/qemu.git;protocol=https \
"

BBCLASSEXTEND = "native nativesdk"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"

S = "${WORKDIR}/git"

xilinx_qemu_prefix = "${base_prefix}/usr/xilinx"

inherit autotools pkgconfig

# Standard options:
# --prefix=PREFIX install in PREFIX [$prefix]
# --interp-prefix=PREFIX where to find shared libraries, etc.
# use %M for cpu name [$interp_prefix]
# --target-list=LIST set target list (default: build everything)
# $(echo Available targets: $default_target_list | \
# fold -s -w 53 | sed -e 's/^/ /')
#
# Advanced options (experts only):
# --source-path=PATH path of source code [$source_path]
# --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
# --cc=CC use C compiler CC [$cc]
# --iasl=IASL use ACPI compiler IASL [$iasl]
# --host-cc=CC use C compiler CC [$host_cc] for code run at
# build time
# --cxx=CXX use C++ compiler CXX [$cxx]
# --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
# --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
# --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
# --make=MAKE use specified make [$make]
# --install=INSTALL use specified install [$install]
# --python=PYTHON use specified python [$python]
# --smbd=SMBD use specified smbd [$smbd]
# --static enable static build [$static]
# --mandir=PATH install man pages in PATH
# --datadir=PATH install firmware in PATH$confsuffix
# --docdir=PATH install documentation in PATH$confsuffix
# --bindir=PATH install binaries in PATH
# --libdir=PATH install libraries in PATH
# --sysconfdir=PATH install config in PATH$confsuffix
# --localstatedir=PATH install local state in PATH (set at runtime on win32)
# --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
# --enable-modules enable modules support
# --enable-debug-tcg enable TCG debugging
# --disable-debug-tcg disable TCG debugging (default)
# --enable-debug-info enable debugging information (default)
# --disable-debug-info disable debugging information
# --enable-debug enable common debug build options
# --enable-sparse enable sparse checker
# --disable-sparse disable sparse checker (default)
# --disable-strip disable stripping binaries
# --disable-werror disable compilation abort on warning
# --disable-stack-protector disable compiler-provided stack protection
# --disable-sdl disable SDL
# --enable-sdl enable SDL
# --with-sdlabi select preferred SDL ABI 1.2 or 2.0
# --disable-gtk disable gtk UI
# --enable-gtk enable gtk UI
# --with-gtkabi select preferred GTK ABI 2.0 or 3.0
# --disable-virtfs disable VirtFS
# --enable-virtfs enable VirtFS
# --disable-vnc disable VNC
# --enable-vnc enable VNC
# --disable-cocoa disable Cocoa (Mac OS X only)
# --enable-cocoa enable Cocoa (default on Mac OS X)
# --audio-drv-list=LIST set audio drivers list:
# Available drivers: $audio_possible_drivers
# --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
# --block-drv-rw-whitelist=L
# set block driver read-write whitelist
# (affects only QEMU, not qemu-img)
# --block-drv-ro-whitelist=L
# set block driver read-only whitelist
# (affects only QEMU, not qemu-img)
# --disable-xen disable xen backend driver support
# --enable-xen enable xen backend driver support
# --disable-xen-pci-passthrough
# --enable-xen-pci-passthrough
# --disable-brlapi disable BrlAPI
# --enable-brlapi enable BrlAPI
# --disable-vnc-tls disable TLS encryption for VNC server
# --enable-vnc-tls enable TLS encryption for VNC server
# --disable-vnc-sasl disable SASL encryption for VNC server
# --enable-vnc-sasl enable SASL encryption for VNC server
# --disable-vnc-jpeg disable JPEG lossy compression for VNC server
# --enable-vnc-jpeg enable JPEG lossy compression for VNC server
# --disable-vnc-png disable PNG compression for VNC server (default)
# --enable-vnc-png enable PNG compression for VNC server
# --disable-vnc-ws disable Websockets support for VNC server
# --enable-vnc-ws enable Websockets support for VNC server
# --disable-curses disable curses output
# --enable-curses enable curses output
# --disable-curl disable curl connectivity
# --enable-curl enable curl connectivity
# --disable-fdt disable fdt device tree
# --enable-fdt enable fdt device tree
# --disable-bluez disable bluez stack connectivity
# --enable-bluez enable bluez stack connectivity
# --disable-slirp disable SLIRP userspace network connectivity
# --disable-kvm disable KVM acceleration support
# --enable-kvm enable KVM acceleration support
# --disable-rdma disable RDMA-based migration support
# --enable-rdma enable RDMA-based migration support
# --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
# --enable-system enable all system emulation targets
# --disable-system disable all system emulation targets
# --enable-user enable supported user emulation targets
# --disable-user disable all user emulation targets
# --enable-linux-user enable all linux usermode emulation targets
# --disable-linux-user disable all linux usermode emulation targets
# --enable-bsd-user enable all BSD usermode emulation targets
# --disable-bsd-user disable all BSD usermode emulation targets
# --enable-guest-base enable GUEST_BASE support for usermode
# emulation targets
# --disable-guest-base disable GUEST_BASE support
# --enable-pie build Position Independent Executables
# --disable-pie do not build Position Independent Executables
# --fmod-lib path to FMOD library
# --fmod-inc path to FMOD includes
# --oss-lib path to OSS library
# --cpu=CPU Build for host CPU [$cpu]
# --enable-uuid enable uuid support
# --disable-vde disable support for vde network
# --enable-vde enable support for vde network
# --disable-netmap disable support for netmap network
# --enable-netmap enable support for netmap network
# --disable-linux-aio disable Linux AIO support
# --enable-linux-aio enable Linux AIO support
# --disable-cap-ng disable libcap-ng support
# --enable-cap-ng enable libcap-ng support
# --disable-attr disables attr and xattr support
# --enable-attr enable attr and xattr support
# --disable-blobs disable installing provided firmware blobs
# --enable-docs enable documentation build
# --disable-docs disable documentation build
# --disable-vhost-net disable vhost-net acceleration support
# --enable-vhost-net enable vhost-net acceleration support
# --enable-trace-backends=B Set trace backend
# Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
# --with-trace-file=NAME Full PATH,NAME of file to store traces
# Default:trace-<pid>
# --disable-spice disable spice
# --enable-spice enable spice
# --enable-rbd enable building the rados block device (rbd)
# --disable-libiscsi disable iscsi support
# --enable-libiscsi enable iscsi support
# --disable-libnfs disable nfs support
# --enable-libnfs enable nfs support
# --disable-smartcard-nss disable smartcard nss support
# --enable-smartcard-nss enable smartcard nss support
# --disable-libusb disable libusb (for usb passthrough)
# --enable-libusb enable libusb (for usb passthrough)
# --disable-usb-redir disable usb network redirection support
# --enable-usb-redir enable usb network redirection support
# --enable-lzo enable the support of lzo compression library
# --enable-snappy enable the support of snappy compression library
# --disable-guest-agent disable building of the QEMU Guest Agent
# --enable-guest-agent enable building of the QEMU Guest Agent
# --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
# --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
# --disable-seccomp disable seccomp support
# --enable-seccomp enables seccomp support
# --with-coroutine=BACKEND coroutine backend. Supported options:
# gthread, ucontext, sigaltstack, windows
# --disable-coroutine-pool disable coroutine freelist (worse performance)
# --enable-coroutine-pool enable coroutine freelist (better performance)
# --enable-glusterfs enable GlusterFS backend
# --disable-glusterfs disable GlusterFS backend
# --enable-gcov enable test coverage analysis with gcov
# --gcov=GCOV use specified gcov [$gcov_tool]
# --disable-tpm disable TPM support
# --enable-tpm enable TPM support
# --disable-libssh2 disable ssh block device support
# --enable-libssh2 enable ssh block device support
# --disable-vhdx disables support for the Microsoft VHDX image format
# --enable-vhdx enable support for the Microsoft VHDX image format
# --disable-quorum disable quorum block filter support
# --enable-quorum enable quorum block filter support
# --disable-numa disable libnuma support
# --enable-numa enable libnuma support

#--disable-fdt: Required for arm-generic-fdt machine type

QEMUS_BUILT = "aarch64-softmmu"
QEMU_FLAGS = "--disable-docs --disable-sdl --disable-debug-info --disable-cap-ng \
--disable-libnfs --disable-libusb --disable-libiscsi --disable-usb-redir --disable-linux-aio\
--disable-guest-agent --disable-vnc-png --disable-seccomp \
--disable-tpm --disable-numa --disable-glusterfs \
--disable-virtfs --disable-xen --disable-curl --disable-attr --disable-curses \
"

do_configure() {
${S}/configure ${QEMU_FLAGS} --target-list="${QEMUS_BUILT}" --prefix=${xilinx_qemu_prefix}
}

FILES_${PN} = " \
/opt/zephyr-sdk \
"

INSANE_SKIP_${PN} = "already-stripped"
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ TOOLCHAIN_TARGET_TASK ?= ""

TOOLCHAIN_HOST_TASK ?= "\
nativesdk-zephyr-qemu \
nativesdk-xilinx-qemu \
nativesdk-openocd \
nativesdk-bossa \
nativesdk-dtc \
Expand Down

0 comments on commit 9bdbd6b

Please sign in to comment.