;;; Copyright © 2016 Ben Woodcroft
;;;
;;; This code is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see .
(define-module (ben packages cpu-specific)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix hg-download)
#:use-module (guix build-system ant)
#:use-module (guix build-system gnu)
#:use-module (guix build-system cmake)
#:use-module (guix build-system perl)
#:use-module (guix build-system python)
#:use-module (guix build-system r)
#:use-module (guix build-system ruby)
#:use-module (guix build-system trivial)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages algebra)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages bison)
#:use-module (gnu packages boost)
#:use-module (gnu packages commencement)
#:use-module (gnu packages compression)
#:use-module (gnu packages cpio)
#:use-module (gnu packages curl)
#:use-module (gnu packages documentation)
#:use-module (gnu packages datastructures)
#:use-module (gnu packages file)
#:use-module (gnu packages gawk)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gd)
#:use-module (gnu packages gtk)
#:use-module (gnu packages glib)
#:use-module (gnu packages groff)
#:use-module (gnu packages image)
#:use-module (gnu packages imagemagick)
#:use-module (gnu packages java)
#:use-module (gnu packages linux)
#:use-module (gnu packages logging)
#:use-module (gnu packages machine-learning)
#:use-module (gnu packages man)
#:use-module (gnu packages maths)
#:use-module (gnu packages mpi)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages pcre)
#:use-module (gnu packages parallel)
#:use-module (gnu packages pdf)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages popt)
#:use-module (gnu packages protobuf)
#:use-module (gnu packages python)
#:use-module (gnu packages readline)
#:use-module (gnu packages ruby)
#:use-module (gnu packages serialization)
#:use-module (gnu packages statistics)
#:use-module (gnu packages tbb)
#:use-module (gnu packages tex)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages textutils)
#:use-module (gnu packages time)
#:use-module (gnu packages tls)
#:use-module (gnu packages vim)
#:use-module (gnu packages web)
#:use-module (gnu packages xml)
#:use-module (gnu packages xorg)
#:use-module (gnu packages zip)
#:use-module (srfi srfi-1)
#:use-module (gnu packages bioinformatics))
;; "sandybridge" for Ben's laptop
(define cpu "sandybridge")
(define-public gcc-cpu-specific
(let ((base gcc-5)) ; gcc-6 does not seem to work.
(package
(inherit base)
(name "gcc-cpu-specific")
(arguments
(substitute-keyword-arguments (package-arguments base)
((#:configure-flags configure-flags)
`(append ,configure-flags
(list (string-append
"--with-arch=" ,cpu)))))))))
(define-public (cpu-specific-package base-package)
(package
(inherit base-package)
(name (package-name base-package))
;; We must set a higher package version so this package is used instead of
;; the package in Guix proper.
(version (string-append (package-version base-package) "-cpu-specific"))
(inputs
`(,@(package-inputs base-package)
("gcc" ,((@@ (gnu packages commencement)
gcc-toolchain) gcc-cpu-specific))))))
(define-public diamond-cpu-specific (cpu-specific-package diamond))
(define-public fasttree-cpu-specific (cpu-specific-package fasttree))
(define-public blast+-cpu-specific (cpu-specific-package blast+))
(define-public bwa-cpu-specific (cpu-specific-package bwa))
(define-public metabat-cpu-specific (cpu-specific-package metabat))