# Copyright (c) 2021 Red Hat, Inc.
#
# Author:
#  Cleber Rosa <crosa@redhat.com>
#
# This work is licensed under the terms of the GNU GPL, version 2 or
# later.  See the COPYING file in the top-level directory.
#
# This is an ansible playbook file.  Run it to set up systems with the
# environment needed to build QEMU.
---
- name: Installation of basic packages to build QEMU
  hosts: all
  tasks:
    - name: Check for suitable ansible version
      delegate_to: localhost
      assert:
        that:
          - '((ansible_version.major == 2) and (ansible_version.minor >= 8)) or (ansible_version.major >= 3)'
        msg: "Unsuitable ansible version, please use version 2.8.0 or later"

    - name: Add armhf foreign architecture to aarch64 hosts
      command: dpkg --add-architecture armhf
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['architecture'] == 'aarch64'

    - name: Update apt cache / upgrade packages via apt
      apt:
        update_cache: yes
        upgrade: yes
      when:
        - ansible_facts['distribution'] == 'Ubuntu'

    # lcitool variables -f json ubuntu-2204 qemu | jq -r '.pkgs[]' | xargs -n 1 echo "-"
    - name: Install basic packages to build QEMU on Ubuntu 22.04
      package:
        name:
          - bash
          - bc
          - bison
          - bsdextrautils
          - bzip2
          - ca-certificates
          - ccache
          - clang
          - dbus
          - debianutils
          - diffutils
          - exuberant-ctags
          - findutils
          - flex
          - g++
          - gcc
          - gcovr
          - genisoimage
          - gettext
          - git
          - hostname
          - libaio-dev
          - libasan5
          - libasound2-dev
          - libattr1-dev
          - libbpf-dev
          - libbrlapi-dev
          - libbz2-dev
          - libc6-dev
          - libcacard-dev
          - libcap-ng-dev
          - libcapstone-dev
          - libcmocka-dev
          - libcurl4-gnutls-dev
          - libdaxctl-dev
          - libdrm-dev
          - libepoxy-dev
          - libfdt-dev
          - libffi-dev
          - libgbm-dev
          - libgcrypt20-dev
          - libglib2.0-dev
          - libglusterfs-dev
          - libgnutls28-dev
          - libgtk-3-dev
          - libibumad-dev
          - libibverbs-dev
          - libiscsi-dev
          - libjemalloc-dev
          - libjpeg-turbo8-dev
          - libjson-c-dev
          - liblttng-ust-dev
          - liblzo2-dev
          - libncursesw5-dev
          - libnfs-dev
          - libnuma-dev
          - libpam0g-dev
          - libpcre2-dev
          - libpixman-1-dev
          - libpng-dev
          - libpulse-dev
          - librbd-dev
          - librdmacm-dev
          - libsasl2-dev
          - libsdl2-dev
          - libsdl2-image-dev
          - libseccomp-dev
          - libslirp-dev
          - libsnappy-dev
          - libspice-protocol-dev
          - libssh-dev
          - libsystemd-dev
          - libtasn1-6-dev
          - libubsan1
          - libudev-dev
          - liburing-dev
          - libusb-1.0-0-dev
          - libusbredirhost-dev
          - libvdeplug-dev
          - libvirglrenderer-dev
          - libvte-2.91-dev
          - libxml2-dev
          - libzstd-dev
          - llvm
          - locales
          - make
          - meson
          - multipath-tools
          - ncat
          - nettle-dev
          - ninja-build
          - openssh-client
          - pkgconf
          - python3
          - python3-numpy
          - python3-opencv
          - python3-pillow
          - python3-pip
          - python3-sphinx
          - python3-sphinx-rtd-theme
          - python3-venv
          - python3-yaml
          - rpm2cpio
          - sed
          - sparse
          - systemtap-sdt-dev
          - tar
          - tesseract-ocr
          - tesseract-ocr-eng
          - texinfo
          - xfslibs-dev
          - zlib1g-dev
        state: present
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['distribution_version'] == '22.04'

    # not all packages are available for all architectures
    - name: Install additional packages to build QEMU on Ubuntu 22.04
      package:
        name:
          - libpmem-dev
          - libspice-server-dev
          - libxen-dev
        state: present
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['distribution_version'] == '22.04'
        - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64'

    - name: Install armhf cross-compile packages to build QEMU on AArch64 Ubuntu 22.04
      package:
        name:
          - binutils-arm-linux-gnueabihf
          - gcc-arm-linux-gnueabihf
          - libblkid-dev:armhf
          - libc6-dev:armhf
          - libffi-dev:armhf
          - libglib2.0-dev:armhf
          - libmount-dev:armhf
          - libpcre2-dev:armhf
          - libpixman-1-dev:armhf
          - zlib1g-dev:armhf
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['distribution_version'] == '22.04'
        - ansible_facts['architecture'] == 'aarch64'

