diff --git a/gnu/packages/rust-crates.scm b/gnu/packages/rust-crates.scm index 787589ed23..1a63f70f8d 100644 --- a/gnu/packages/rust-crates.scm +++ b/gnu/packages/rust-crates.scm @@ -752,6 +752,10 @@ (crate-source "arbitrary" "1.4.2" "1wcbi4x7i3lzcrkjda4810nqv03lpmvfhb0a85xrq1mbqjikdl63")) +(define rust-arbitrary-int-1.2.7 + (crate-source "arbitrary-int" "1.2.7" + "0vgl3n5zzpdn2hxpz6gqk8zg2psk5gwyjzsgpngzd9iqwc1w0ky8")) + (define rust-arboard-3.5.0 (crate-source "arboard" "3.5.0" "0w1yqcx51153hy5w3y0702xjc9nmlhncw9f5l0rdwbl62pvj3py1")) @@ -1476,6 +1480,10 @@ (crate-source "attribute-derive-macro" "0.10.3" "06zph2lyllkp6g1lsv7v4p84dnglbw2gw58r9fpn1d6m1ynm6fs6")) +(define rust-attrs-0.2.9 + (crate-source "attrs" "0.2.9" + "0pvy6b7arfr2f6awwkw6k1hc8sxidjxhj1fyyf2m5rixyi07s81a")) + (define rust-atty-0.2.11 (crate-source "atty" "0.2.11" "0lln6vaczj521qqjbaqnb81w5p6xk4fjfkg33r0m22cm4f3mnzcs")) @@ -2174,6 +2182,14 @@ (crate-source "bigdecimal" "0.4.10" "159nc0bs6bbzxrpfxbnn83ccyzq8bc2ia40zd22ssfjvavqnfs2d")) +(define rust-bilge-0.2.0 + (crate-source "bilge" "0.2.0" + "0mvvwq9caiq701bmmwyd4q4pc8c69i5zaj3zdk6ya7gqxgc7ww6w")) + +(define rust-bilge-impl-0.2.0 + (crate-source "bilge-impl" "0.2.0" + "1n5jml0c1z0np76ms0h5rxx19krblz46h84wycx29b9q4001xcgy")) + (define rust-binascii-0.1.4 (crate-source "binascii" "0.1.4" "0wnaglgl72pn5ilv61q6y34w76gbg7crb8ifqk6lsxnq2gajjg9q")) @@ -7405,6 +7421,10 @@ (crate-source "ego-tree" "0.10.0" "1n2csy99chk5v5vzjl0ff79vxpxhl76xmcb3aj6brrzzipmjz5xj")) +(define rust-either-1.12.0 + (crate-source "either" "1.12.0" + "12xmhlrv5gfsraimh6xaxcmb0qh6cc7w7ap4sw40ky9wfm095jix")) + (define rust-either-1.13.0 (crate-source "either" "1.13.0" "1w2c1mybrd7vljyxk77y9f4w9dyjrmp3yp82mk7bcm8848fazcb0")) @@ -8636,6 +8656,10 @@ "0aqxjgghmn8javsc5jcvx8lqpcrzajndl7v6q1j47zz87xmy2mrf" #:snippet '(delete-file-recursively "images"))) +(define rust-foreign-0.3.1 + (crate-source "foreign" "0.3.1" + "0ijqb18gllqr0319brxsrjdb036cgaf81wc6ygd21ly9x1dipjhp")) + (define rust-foreign-types-0.3.2 (crate-source "foreign-types" "0.3.2" "1cgk0vyd7r45cj769jym4a6s7vwshvd0z4bqrb92q1fwibmkkwzn")) @@ -15649,6 +15673,10 @@ (crate-source "libc" "0.2.155" "0z44c53z54znna8n322k5iwg80arxxpdzjj5260pxxzc9a58icwp")) +(define rust-libc-0.2.162 + (crate-source "libc" "0.2.162" + "1633a00yyx45kzx9r54fndvr8njsjqyr7zl12mzgsmgyczg8glhq")) + (define rust-libc-0.2.169 (crate-source "libc" "0.2.169" "02m253hs8gw0m1n8iyrsc4n15yzbqwhddi7w1l0ds7i92kdsiaxm")) @@ -30283,6 +30311,10 @@ "0jzf1znfpb2gx8nr8mvmyqs1crnv79l57nxnbiszc7xf7ynbjm1k" #:snippet '(delete-file-recursively "tests"))) +(define rust-unicode-ident-1.0.12-unpatched + (crate-source "unicode-ident" "1.0.12" + "0jzf1znfpb2gx8nr8mvmyqs1crnv79l57nxnbiszc7xf7ynbjm1k")) + (define rust-unicode-ident-1.0.13 (crate-source "unicode-ident" "1.0.13" "1zm1xylzsdfvm2a5ib9li3g5pp7qnkv4amhspydvgbmd9k6mc6z9" @@ -68185,6 +68217,43 @@ rust-windows-result-0.4.1 rust-windows-strings-0.5.1 rust-zxcvbn-3.1.0)) + (qemu => + (list rust-anyhow-1.0.98 + rust-arbitrary-int-1.2.7 + rust-attrs-0.2.9 + rust-bilge-0.2.0 + rust-bilge-impl-0.2.0 + rust-cfg-expr-0.20.3 + rust-either-1.12.0 + rust-equivalent-1.0.2 + rust-foreign-0.3.1 + rust-glib-sys-0.21.2 + rust-hashbrown-0.16.0 + rust-heck-0.5.0 + rust-indexmap-2.11.4 + rust-itertools-0.11.0 + rust-libc-0.2.162 + rust-memchr-2.7.6 + rust-pkg-config-0.3.32 + rust-proc-macro-error-1.0.4 + rust-proc-macro-error-attr-1.0.4 + rust-proc-macro2-1.0.95 + rust-quote-1.0.36 + rust-serde-1.0.226 + rust-serde-core-1.0.226 + rust-serde-derive-1.0.226 + rust-serde-spanned-0.6.9 + rust-smallvec-1.15.1 + rust-syn-2.0.104 + rust-system-deps-7.0.5 + rust-target-lexicon-0.13.2 + rust-toml-0.8.23 + rust-toml-datetime-0.6.11 + rust-toml-edit-0.22.27 + rust-unicode-ident-1.0.12-unpatched + rust-version-compare-0.2.0 + rust-version-check-0.9.4 + rust-winnow-0.7.13)) (rabbitmqadmin => (list rust-addr2line-0.24.2 rust-adler2-2.0.1 diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm index 270565bb8e..858a3fe92d 100644 --- a/gnu/packages/virtualization.scm +++ b/gnu/packages/virtualization.scm @@ -161,6 +161,8 @@ #:use-module (gnu packages ruby) #:use-module (gnu packages ruby-check) #:use-module (gnu packages ruby-xyz) + #:use-module (gnu packages rust) + #:use-module (gnu packages rust-apps) #:use-module (gnu packages rsync) #:use-module (gnu packages sdl) #:use-module (gnu packages selinux) @@ -217,6 +219,9 @@ (modules '((guix build utils))) (snippet '(begin + ;; Delete the bundled rust crates. + (delete-file-recursively "subprojects/packagecache") + (mkdir-p "subprojects/packagecache") ;; TODO: Scrub all firmwares from this directory! (with-directory-excursion "pc-bios" ;; Delete firmwares provided by SeaBIOS. @@ -261,28 +266,34 @@ "share/qemu/pxe-virtio.rom")) #~((string-append #$output "/share/qemu")))) (out #$output)) - (list (string-append "--cc=" gcc) - ;; Some architectures insist on using HOST_CC. - (string-append "--host-cc=" gcc) - (string-append "--prefix=" out) - "--sysconfdir=/etc" - "--enable-fdt=system" - (string-append "--firmwarepath=" out "/share/qemu:" - (dirname seabios) ":" - (dirname ipxe) ":" - (dirname openbios) ":" - (dirname opensbi)) - (string-append "--smbd=" out "/libexec/samba-wrapper") - "--disable-debug-info" ;for space considerations - ;; The binaries need to be linked against -lrt. - (string-append "--extra-ldflags=-lrt"))) + (cons* (string-append "--cc=" gcc) + ;; Some architectures insist on using HOST_CC. + (string-append "--host-cc=" gcc) + (string-append "--prefix=" out) + "--sysconfdir=/etc" + "--enable-fdt=system" + (string-append "--firmwarepath=" out "/share/qemu:" + (dirname seabios) ":" + (dirname ipxe) ":" + (dirname openbios) ":" + (dirname opensbi)) + (string-append "--smbd=" out "/libexec/samba-wrapper") + "--disable-debug-info" ;for space considerations + ;; The binaries need to be linked against -lrt. + (string-append "--extra-ldflags=-lrt") + #$@(if (this-package-native-input "rust") + #~((list "--enable-rust")) + #~((list))))) ;; Make build and test output verbose to facilitate investigation upon failure. #:make-flags #~'("V=1") #:modules `((srfi srfi-1) (srfi srfi-26) (ice-9 ftw) (ice-9 match) + ((guix build cargo-build-system) #:prefix cargo:) ,@%default-gnu-modules) + #:imported-modules `(,@%cargo-build-system-modules + ,@%default-gnu-imported-modules) #:phases #~(modify-phases %standard-phases ;; Since we removed the bundled firmwares above, many tests @@ -325,6 +336,29 @@ "\"~a\",~%" file)) allowed-differences) (close-port allowed-differences-whitelist)))) + #$@(if (this-package-native-input "rust") + #~((add-after 'unpack 'prepare-rust-crates + (lambda args + (apply (assoc-ref cargo:%standard-phases + 'prepare-rust-crates) + args) + ;; Use /tmp/rust-crates as the source. + (substitute* (find-files "subprojects" "-rs\\.wrap$") + (("source_url = (.*)" _ url) + (let ((split-url (string-split url #\/))) + (string-append + "source_url = file:///tmp/rust-crates/rust-" + (list-ref split-url 6) "-" + (list-ref split-url 7) ".tar.gz\n")))) + ;; "Download" the packages. + (for-each + (lambda (wrapper) + (invoke "meson" "subprojects" "download" + (string-drop-right wrapper 5))) + (scandir "subprojects" + (lambda (file) + (string-suffix? "-rs.wrap" file))))))) + #~()) ;; If the ipxe firmware isn't available, remove it from the list ;; of files expected to be available and remove some of the tests. #$@(if (not (this-package-input "ipxe-qemu")) @@ -587,27 +621,38 @@ exec smbd $@"))) zlib `(,zstd "lib")))) (native-inputs - ;; Note: acpica is here only to pretty-print firmware differences with IASL - ;; (see the replace-firmwares phase above). - (list acpica - bison - flex - gettext-minimal - `(,glib "bin") ;gtester, etc. - meson - ninja - perl - pkg-config - python-wrapper - python-sphinx - python-sphinx-rtd-theme - python-tomli - texinfo - ;; The following static libraries are required to build - ;; the static output of QEMU. - `(,glib "static") - `(,pcre2 "static") - `(,zlib "static"))) + (append + ;; The rust code doesn't seem to be in use yet. + (if #f ;(supported-package? rust) + (append + (cons* rust + rust-bindgen-cli + (cargo-inputs 'qemu)) + (or (and=> (%current-target-system) + (compose list make-rust-sysroot)) + '())) + '()) + ;; Note: acpica is here only to pretty-print firmware differences with + ;; IASL (see the replace-firmwares phase above). + (list acpica + bison + flex + gettext-minimal + `(,glib "bin") ;gtester, etc. + meson + ninja + perl + pkg-config + python-wrapper + python-sphinx + python-sphinx-rtd-theme + python-tomli + texinfo + ;; The following static libraries are required to build + ;; the static output of QEMU. + `(,glib "static") + `(,pcre2 "static") + `(,zlib "static")))) (home-page "https://www.qemu.org") (synopsis "Machine emulator and virtualizer") (description