diff --git a/README.org b/README.org
index 5d7cc33..2ab2229 100644
--- a/README.org
+++ b/README.org
@@ -73,7 +73,7 @@ root with
All important packages are listed in manifest.scm.example. Test with
-: guix build -L . -m manifest.scm.example
+: guix build -L . -m manifest.scm.example --tune=native
* An important note on AI
diff --git a/gn/packages/pangenome-rust.scm b/gn/packages/pangenome-rust.scm
index 3e9d8cc..00155bd 100644
--- a/gn/packages/pangenome-rust.scm
+++ b/gn/packages/pangenome-rust.scm
@@ -34,6 +34,27 @@
(crate-source "anyhow" "1.0.66"
"1xj3ahmwjlbiqsajhkaa0q6hqwb4l3l5rkfxa7jk1498r3fn2qi1"))
+;; Phase snippet to set RUSTFLAGS for CPU tuning.
+;; Detects the tuning CPU from PATH (tuning-compiler-<cpu> directory)
+;; and sets RUSTFLAGS=-C target-cpu=<cpu>.
+(define %rust-tuning-phase
+ #~(add-before 'build 'set-rust-target-cpu
+ (lambda _
+ (let loop ((dirs (string-split (or (getenv "PATH") "") #\:)))
+ (if (null? dirs)
+ #t
+ (let ((base (basename (dirname (car dirs)))))
+ (if (string-contains base "tuning-compiler-")
+ (let ((cpu (substring base
+ (+ (string-contains base "tuning-compiler-")
+ (string-length "tuning-compiler-")))))
+ (setenv "RUSTFLAGS"
+ (string-append (or (getenv "RUSTFLAGS") "")
+ " -C target-cpu=" cpu))
+ (format #t " RUSTFLAGS set for CPU tuning: ~a~%" (getenv "RUSTFLAGS")))
+ (loop (cdr dirs)))))))))
+
+
(define rust-autocfg-1.1.0
(crate-source "autocfg" "1.1.0"
"1ylp3cb47ylzabimazvbz9ms6ap784zhb6syaz6c1jqpmcmq0s6l"))
@@ -3287,7 +3308,9 @@
(base32
"1kv1abwwj1m5d7y61ymrrj309bg543vk5dlfq56h5d4qswmb7zyv"))))
(build-system cargo-build-system)
- (arguments (list #:install-source? #f))
+ (arguments (list #:install-source? #f
+ #:phases #~(modify-phases %standard-phases
+ #$%rust-tuning-phase)))
;; No upstream test data; tests require GFA/BAM input files.
(inputs (cargo-inputs 'gfainject #:module '(gn packages pangenome-rust)))
(properties '((tunable? . #t)))
@@ -3316,7 +3339,9 @@ names must match the path names in the GFA.")
"0nzhgg7sqalrpl1mzlp0rvaj4dgcwghv1jngcsfqqk1mhx4hvj0n"))))
(build-system cargo-build-system)
(arguments
- (list #:install-source? #f))
+ (list #:install-source? #f
+ #:phases #~(modify-phases %standard-phases
+ #$%rust-tuning-phase)))
(inputs (cargo-inputs 'onecode #:module '(gn packages pangenome-rust)))
(properties '((tunable? . #t)))
(home-page "https://github.com/pangenome/onecode-rs")
@@ -3352,7 +3377,9 @@ data. The C library (ONElib) is bundled and compiled at build time.")
#:tests? #f
#:cargo-build-flags ''("--release" "--package" "ragc-cli")
;; Workspace root has no [[bin]], must specify the CLI member
- #:cargo-install-paths ''("ragc-cli")))
+ #:cargo-install-paths ''("ragc-cli")
+ #:phases #~(modify-phases %standard-phases
+ #$%rust-tuning-phase)))
(properties '((tunable? . #t)))
(home-page "https://github.com/AndreaGuarracino/ragc")
(synopsis "Genome compression tool implementing the AGC format in Rust")
@@ -3386,6 +3413,7 @@ similar genome sequences and is compatible with the C++ AGC format.")
#:tests? #f
#:phases
#~(modify-phases %standard-phases
+ #$%rust-tuning-phase
(add-after 'unpack 'fix-sources
;; Cargo.toml uses a git source for onecode but Cargo.lock
;; resolved it to the registry version 0.1.0.
@@ -3596,6 +3624,7 @@ sequences to accelerate the alignment process.")
#:install-source? #f
#:phases
#~(modify-phases %standard-phases
+ #$%rust-tuning-phase
;; The ragc workspace root has no [package] so crate-src? returns #f
;; and configure skips it. Copy it manually.
(add-before 'build 'copy-ragc-workspace
@@ -3814,7 +3843,9 @@ and alignments for analysis. It can also compute graphs for the sequences.")
(base32
"0r51kz2vwmj8kkxr1az45g68m0acn652mcddsscc78m78yxh85v1"))))
(build-system cargo-build-system)
- (arguments (list #:install-source? #f))
+ (arguments (list #:install-source? #f
+ #:phases #~(modify-phases %standard-phases
+ #$%rust-tuning-phase)))
(inputs (cargo-inputs 'gfautil #:module '(gn packages pangenome-rust)))
(properties '((tunable? . #t)))
(home-page "https://github.com/pangenome/rs-gfa-utils")
@@ -3839,7 +3870,9 @@ Graphical Fragment Assembly} files and related formats.")
(base32 "0yn8i70ww3x544qm4fwr33vklsxf3fvivpfpv46prkfz9hsmd9ps"))))
(build-system cargo-build-system)
(arguments
- `(#:install-source? #f))
+ (list #:install-source? #f
+ #:phases #~(modify-phases %standard-phases
+ #$%rust-tuning-phase)))
(inputs (cargo-inputs 'gfaffix
#:module '(gn packages pangenome-rust)))
(properties '((tunable? . #t)))
@@ -3865,7 +3898,9 @@ collapses them into a non-redundant graph structure.")
(sha256
(base32 "0di2psh0ls7jlbnqs7k71p55f73pn23a09k1h3ril7gwjcrzr3rk"))))
(build-system cargo-build-system)
- (arguments (list #:install-source? #f))
+ (arguments (list #:install-source? #f
+ #:phases #~(modify-phases %standard-phases
+ #$%rust-tuning-phase)))
(inputs (cargo-inputs 'gafpack #:module '(gn packages pangenome-rust)))
(properties '((tunable? . #t)))
(home-page "https://github.com/ekg/gafpack")
@@ -3890,7 +3925,9 @@ maps useful in haplotype-based genotyping.")
(sha256
(base32 "0sk2ab22z6qa00j1w8a8f5kbb7q2xb10fhd32zy4lh351v3mqmyg"))))
(build-system cargo-build-system)
- (arguments (list #:install-source? #f))
+ (arguments (list #:install-source? #f
+ #:phases #~(modify-phases %standard-phases
+ #$%rust-tuning-phase)))
(inputs (cargo-inputs 'vcfbub #:module '(gn packages pangenome-rust)))
(properties '((tunable? . #t)))
(home-page "https://github.com/pangenome/vcfbub")
|