# If this flag is set to 1, -unknown-linux-musl target is required. %define using_musl_libc 0 # Generated by update script %global gitver 30.0 %global gitnum 0 %global gitrev gcdc05a91 Name: cloud-hypervisor Summary: Cloud Hypervisor is a Virtual Machine Monitor (VMM) that runs on top of KVM Version: %{gitver}.%{gitnum} Release: 10.1 License: ASL 2.0 or BSD-3-clause Group: Applications/System Source0: %{name}-%{version}.tar.gz Source1: %{name}-%{version}-vendor.tar.gz Source2: config.toml ExclusiveArch: x86_64 aarch64 %if 0%{?suse_version} && 0%{?sle_version} <= 150300 && 0%{?suse_version} < 1599 %global gcc_version 11 %global gcc_version override 1 %else %global gcc_version_override 0 %endif %if 0%{?gcc_version_override} BuildRequires: gcc%{gcc_version} %else BuildRequires: gcc %endif BuildRequires: glibc-devel BuildRequires: binutils BuildRequires: git BuildRequires: openssl-devel %if 0%{?centos_version} BuildRequires: rust-toolset >= 1.60.0 %else BuildRequires: rust >= 1.60.0 BuildRequires: cargo >= 1.60.0 %endif Requires: bash Requires: glibc %if 0%{?suse_version} Requires: libgcc_s1 Requires: libcap2 %else Requires: libcap Requires: libgcc %endif %ifarch x86_64 %define rust_def_target x86_64-unknown-linux-gnu %define cargo_pkg_feature_opts --no-default-features --features "mshv,kvm" %if 0%{?using_musl_libc} %define rust_musl_target x86_64-unknown-linux-musl %endif %endif %ifarch aarch64 %define rust_def_target aarch64-unknown-linux-gnu %define cargo_pkg_feature_opts --all %if 0%{?using_musl_libc} %define rust_musl_target aarch64-unknown-linux-musl %endif %endif %define cargo_offline --offline %description Cloud Hypervisor is an open source Virtual Machine Monitor (VMM) that runs on top of KVM. The project focuses on exclusively running modern, cloud workloads, on top of a limited set of hardware architectures and platforms. Cloud workloads refers to those that are usually run by customers inside a cloud provider. For our purposes this means modern Linux* distributions with most I/O handled by paravirtualised devices (i.e. virtio), no requirement for legacy devices and recent CPUs and KVM. %prep %setup -q tar xf %{SOURCE1} mkdir -p .cargo cp %{SOURCE2} .cargo/ %install rm -rf %{buildroot} install -d %{buildroot}%{_bindir} install -D -m755 ./target/%{rust_def_target}/release/cloud-hypervisor %{buildroot}%{_bindir} install -D -m755 ./target/%{rust_def_target}/release/ch-remote %{buildroot}%{_bindir} install -d %{buildroot}%{_libdir} install -d %{buildroot}%{_libdir}/cloud-hypervisor install -D -m755 target/%{rust_def_target}/release/vhost_user_block %{buildroot}%{_libdir}/cloud-hypervisor install -D -m755 target/%{rust_def_target}/release/vhost_user_net %{buildroot}%{_libdir}/cloud-hypervisor %if 0%{?using_musl_libc} install -d %{buildroot}%{_libdir}/cloud-hypervisor/static install -D -m755 target/%{rust_musl_target}/release/cloud-hypervisor %{buildroot}%{_libdir}/cloud-hypervisor/static install -D -m755 target/%{rust_musl_target}/release/vhost_user_block %{buildroot}%{_libdir}/cloud-hypervisor/static install -D -m755 target/%{rust_musl_target}/release/vhost_user_net %{buildroot}%{_libdir}/cloud-hypervisor/static install -D -m755 target/%{rust_musl_target}/release/ch-remote %{buildroot}%{_libdir}/cloud-hypervisor/static %endif %build %if 0%{?gcc_version_override} export CC=gcc%{gcc_version} export RUSTFLAGS="-Clinker=gcc-%{gcc_version}" %endif cargo_version=$(cargo --version) if [[ $? -ne 0 ]]; then echo "Cargo not found, please install cargo. exiting" exit 0 fi export OPENSSL_NO_VENDOR=1 cargo build --release --target=%{rust_def_target} %{cargo_pkg_feature_opts} %{cargo_offline} cargo build --release --target=%{rust_def_target} --package vhost_user_net %{cargo_offline} cargo build --release --target=%{rust_def_target} --package vhost_user_block %{cargo_offline} %if 0%{?using_musl_libc} cargo build --release --target=%{rust_musl_target} %{cargo_pkg_feature_opts} %{cargo_offline} cargo build --release --target=%{rust_musl_target} --package vhost_user_net %{cargo_offline} cargo build --release --target=%{rust_musl_target} --package vhost_user_block %{cargo_offline} %endif %files %defattr(-,root,root,-) %{_bindir}/ch-remote %caps(cap_net_admin=ep) %{_bindir}/cloud-hypervisor %dir %{_libdir}/cloud-hypervisor %{_libdir}/cloud-hypervisor/vhost_user_block %caps(cap_net_admin=ep) %{_libdir}/cloud-hypervisor/vhost_user_net %if 0%{?using_musl_libc} %{_libdir}/cloud-hypervisor/static/ch-remote %caps(cap_net_admim=ep) %{_libdir}/cloud-hypervisor/static/cloud-hypervisor %{_libdir}/cloud-hypervisor/static/vhost_user_block %caps(cap_net_admin=ep) %{_libdir}/cloud-hypervisor/static/vhost_user_net %endif %license LICENSE-APACHE %license LICENSE-BSD-3-Clause %changelog * Sat Dec 17 2022 Anatol Belski 28.1-1 - Update to 28.1 * Sat Dec 10 2022 Anatol Belski 28.0-2 - Switch to building a unified binary on x86_64 * Fri Sep 30 2022 Anatol Belski 27.0-1 - Update to 27.0 * Mon Aug 22 2022 Anatol Belski 26.0-1 - Update to 26.0 * Sat Jul 16 2022 Anatol Belski 25.0-1 - Update to 25.0 * Sun Jul 03 2022 Anatol Belski 24.0-2 - Rework and simplify specs - Set version condition for Rust toolchain * Wed May 25 2022 Sebastien Boeuf 24.0-0 - Update to 24.0 * Wed May 18 2022 Anatol Belski - 23.1-0 - Update to 23.1 - Add support for aarch64 build - Add offline build configuration using vendored crates - Fix dependency for openssl-sys * Thu Apr 13 2022 Rob Bradford 23.0-0 - Update to 23.0 * Thu Mar 03 2022 Rob Bradford 22.0-0 - Update to 22.0 * Thu Jan 20 2022 Rob Bradford 21.0-0 - Update to 21.0 * Thu Dec 02 2021 Sebastien Boeuf 20.0-0 - Update to 20.0 * Mon Nov 08 2021 Fabiano FidĂȘncio 19.0-0 - Update to 19.0 * Fri May 28 2021 Muminul Islam 15.0-0 - Update version to 15.0 * Wed Jul 22 2020 Muminul Islam 0.8.0-0 - Initial version