123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203 |
- ;;; GNU Guix --- Functional package management for GNU
- ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
- ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
- ;;; Copyright © 2014, 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
- ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
- ;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
- ;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com>
- ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
- ;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
- ;;; Copyright © 2020 Joseph LaFreniere <joseph@lafreniere.xyz>
- ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
- ;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
- ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
- ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
- ;;;
- ;;; This file is part of GNU Guix.
- ;;;
- ;;; GNU Guix 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 <http://www.gnu.org/licenses/>.
- (define-module (gnu packages gcc)
- #:use-module ((guix licenses)
- #:select (gpl3+ gpl2+ lgpl2.1+ lgpl2.0+ fdl1.3+))
- #:use-module (gnu packages)
- #:use-module (gnu packages bootstrap)
- #:use-module (gnu packages compression)
- #:use-module (gnu packages multiprecision)
- #:use-module (gnu packages texinfo)
- #:use-module (gnu packages dejagnu)
- #:use-module (gnu packages documentation)
- #:use-module (gnu packages xml)
- #:use-module (gnu packages docbook)
- #:use-module (gnu packages graphviz)
- #:use-module (gnu packages elf)
- #:use-module (gnu packages perl)
- #:use-module (guix packages)
- #:use-module (guix download)
- #:use-module (guix build-system gnu)
- #:use-module (guix build-system trivial)
- #:use-module (guix gexp)
- #:use-module (guix utils)
- #:use-module (srfi srfi-1)
- #:use-module (ice-9 regex))
- (define %gcc-infrastructure
- ;; Base URL for GCC's infrastructure.
- "mirror://gcc/infrastructure/")
- (define (gcc-configure-flags-for-triplet target)
- "Return a list of additional GCC `configure' flags for TARGET, a GNU triplet.
- The purpose of this procedure is to translate extended GNU triplets---e.g.,
- where the OS part is overloaded to denote a specific ABI---into GCC
- `configure' options. We take extended GNU triplets that glibc recognizes."
- (cond ((string-match "^mips64el.*gnuabin?64$" target)
- ;; Triplets recognized by glibc as denoting the N64 ABI; see
- ;; ports/sysdeps/mips/preconfigure.
- '("--with-abi=64"))
- ((string-match "^arm.*-gnueabihf$" target)
- '("--with-arch=armv7-a"
- "--with-float=hard"
- "--with-mode=thumb"
- "--with-fpu=neon"))
- ((and (string-suffix? "-gnu" target)
- (not (string-contains target "-linux")))
- ;; Cross-compilation of libcilkrts in GCC 5.5.0 to GNU/Hurd fails
- ;; with:
- ;; libcilkrts/runtime/os-unix.c:388:2: error: #error "Unknown architecture"
- ;; Cilk has been removed from GCC 8 anyway.
- '("--disable-libcilkrts"))
- ;; glibc needs the 128-bit long double type on these architectures.
- ((or (string-prefix? "powerpc64le-" target)
- (string-prefix? "powerpc-" target))
- '("--with-long-double-128"))
- (else
- ;; TODO: Add `arm.*-gnueabi', etc.
- '())))
- (define-public gcc-4.7
- (let* ((stripped? #t) ;whether to strip the compiler, not the libraries
- (maybe-target-tools
- (lambda ()
- ;; Return the `_FOR_TARGET' variables that are needed when
- ;; cross-compiling GCC.
- (let ((target (%current-target-system)))
- (if target
- (map (lambda (var tool)
- (string-append (string-append var "_FOR_TARGET")
- "=" target "-" tool))
- '("CC" "CXX" "LD" "AR" "NM" "OBJDUMP" "RANLIB" "STRIP")
- '("gcc" "g++" "ld" "ar" "nm" "objdump" "ranlib" "strip"))
- '()))))
- (libdir
- (let ((base '(or (assoc-ref outputs "lib")
- (assoc-ref outputs "out"))))
- (lambda ()
- ;; Return the directory that contains lib/libgcc_s.so et al.
- (if (%current-target-system)
- `(string-append ,base "/" ,(%current-target-system))
- base))))
- (configure-flags
- (lambda ()
- ;; This is terrible. Since we have two levels of quasiquotation,
- ;; we have to do this convoluted thing just so we can insert the
- ;; contents of (maybe-target-tools).
- (list 'quasiquote
- (append
- '("--enable-plugin"
- "--enable-languages=c,c++"
- "--disable-multilib"
- "--with-system-zlib"
- ;; No pre-compiled libstdc++ headers, to save space.
- "--disable-libstdcxx-pch"
- "--with-local-prefix=/no-gcc-local-prefix"
- ;; With a separate "lib" output, the build system
- ;; incorrectly guesses GPLUSPLUS_INCLUDE_DIR, so force
- ;; it. (Don't use a versioned sub-directory, that's
- ;; unnecessary.)
- ,(string-append "--with-gxx-include-dir="
- (assoc-ref %outputs "out")
- "/include/c++")
- ,(let ((libc (assoc-ref %build-inputs "libc")))
- (if libc
- (string-append "--with-native-system-header-dir=" libc
- "/include")
- "--without-headers")))
- ;; Pass the right options for the target triplet.
- (let ((triplet
- (or (%current-target-system)
- (nix-system->gnu-triplet (%current-system)))))
- (gcc-configure-flags-for-triplet triplet))
- (maybe-target-tools))))))
- (hidden-package
- (package
- (name "gcc")
- (version "4.7.4")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.bz2"))
- (sha256
- (base32
- "10k2k71kxgay283ylbbhhs51cl55zn2q38vj5pk4k950qdnirrlj"))
- (patches (search-patches "gcc-4-compile-with-gcc-5.patch"
- "gcc-fix-texi2pod.patch"))))
- (build-system gnu-build-system)
- ;; Separate out the run-time support libraries because all the
- ;; dynamic-linked objects depend on it.
- (outputs '("out" ;commands, etc. (60+ MiB)
- "lib" ;libgcc_s, libgomp, etc. (15+ MiB)
- "debug")) ;debug symbols of run-time libraries
- (inputs `(("gmp" ,gmp)
- ("mpfr" ,mpfr)
- ("mpc" ,mpc)
- ("libelf" ,libelf)
- ("zlib" ,zlib)))
- ;; GCC < 5 is one of the few packages that doesn't ship .info files.
- ;; Newer texinfos fail to build the manual, so we use an older one.
- (native-inputs `(("perl" ,perl) ;for manpages
- ("texinfo" ,texinfo-5)))
- (arguments
- `(#:out-of-source? #t
- #:configure-flags ,(configure-flags)
- #:make-flags
- ;; None of the flags below are needed when doing a Canadian cross.
- ;; TODO: Simplify this.
- ,(if (%current-target-system)
- (if stripped?
- ''("CFLAGS=-g0 -O2")
- ''())
- `(let* ((libc (assoc-ref %build-inputs "libc"))
- (libc-native (or (assoc-ref %build-inputs "libc-native")
- libc)))
- `(,@(if libc
- (list (string-append "LDFLAGS_FOR_TARGET="
- "-B" libc "/lib "
- "-Wl,-dynamic-linker "
- "-Wl," libc
- ,(glibc-dynamic-linker)))
- '())
- ;; Native programs like 'genhooks' also need that right.
- ,(string-append "LDFLAGS="
- "-Wl,-rpath=" libc-native "/lib "
- "-Wl,-dynamic-linker "
- "-Wl," libc-native ,(glibc-dynamic-linker))
- ,(string-append "BOOT_CFLAGS=-O2 "
- ,(if stripped? "-g0" "-g")))))
- #:tests? #f
- #:phases
- (modify-phases %standard-phases
- (add-before 'configure 'pre-configure
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let ((libdir ,(libdir))
- (libc (assoc-ref inputs "libc")))
- (when libc
- ;; The following is not performed for `--without-headers'
- ;; cross-compiler builds.
- ;; Join multi-line definitions of GLIBC_DYNAMIC_LINKER* into a
- ;; single line, to allow the next step to work properly.
- (for-each
- (lambda (x)
- (substitute* (find-files "gcc/config"
- "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$")
- (("(#define (GLIBC|GNU_USER)_DYNAMIC_LINKER.*)\\\\\n$" _ line)
- line)))
- '(1 2 3))
- ;; Fix the dynamic linker's file name.
- (substitute* (find-files "gcc/config"
- "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$")
- (("#define (GLIBC|GNU_USER)_DYNAMIC_LINKER([^ \t]*).*$"
- _ gnu-user suffix)
- (format #f "#define ~a_DYNAMIC_LINKER~a \"~a\"~%"
- gnu-user suffix
- (string-append libc ,(glibc-dynamic-linker)))))
- ;; Tell where to find libstdc++, libc, and `?crt*.o', except
- ;; `crt{begin,end}.o', which come with GCC.
- (substitute* (find-files "gcc/config"
- "^gnu-user.*\\.h$")
- (("#define GNU_USER_TARGET_LIB_SPEC (.*)$" _ suffix)
- ;; Help libgcc_s.so be found (see also below.) Always use
- ;; '-lgcc_s' so that libgcc_s.so is always found by those
- ;; programs that use 'pthread_cancel' (glibc dlopens
- ;; libgcc_s.so when pthread_cancel support is needed, but
- ;; having it in the application's RUNPATH isn't enough; see
- ;; <http://sourceware.org/ml/libc-help/2013-11/msg00023.html>.)
- ;;
- ;; NOTE: The '-lgcc_s' added below needs to be removed in a
- ;; later phase of %gcc-static. If you change the string
- ;; below, make sure to update the relevant code in
- ;; %gcc-static package as needed.
- (format #f "#define GNU_USER_TARGET_LIB_SPEC \
- \"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a"
- libc libc libdir suffix))
- (("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line)
- (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
- #define STANDARD_STARTFILE_PREFIX_2 \"\"
- ~a"
- libc line)))
- ;; The rs6000 (a.k.a. powerpc) config in GCC does not use
- ;; GNU_USER_* defines. Do the above for this case.
- (substitute*
- "gcc/config/rs6000/sysv4.h"
- (("#define LIB_LINUX_SPEC (.*)$" _ suffix)
- (format #f "#define LIB_LINUX_SPEC \
- \"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a"
- libc libc libdir suffix))
- (("#define STARTFILE_LINUX_SPEC.*$" line)
- (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
- #define STANDARD_STARTFILE_PREFIX_2 \"\"
- ~a"
- libc line))))
- (when (file-exists? "gcc/config/rs6000")
- ;; Force powerpc libdir to be /lib and not /lib64
- (substitute* (find-files "gcc/config/rs6000")
- (("/lib64") "/lib")))
- ;; Don't retain a dependency on the build-time sed.
- (substitute* "fixincludes/fixincl.x"
- (("static char const sed_cmd_z\\[\\] =.*;")
- "static char const sed_cmd_z[] = \"sed\";"))
- ;; Aarch64 support didn't land in GCC until the 4.8 series.
- (when (file-exists? "gcc/config/aarch64")
- ;; Force Aarch64 libdir to be /lib and not /lib64
- (substitute* "gcc/config/aarch64/t-aarch64-linux"
- (("lib64") "lib")))
- (when (file-exists? "libbacktrace")
- ;; GCC 4.8+ comes with libbacktrace. By default it builds
- ;; with -Werror, which fails with a -Wcast-qual error in glibc
- ;; 2.21's stdlib-bsearch.h. Remove -Werror.
- (substitute* "libbacktrace/configure"
- (("WARN_FLAGS=(.*)-Werror" _ flags)
- (string-append "WARN_FLAGS=" flags)))
- (when (file-exists? "libsanitizer/libbacktrace")
- ;; Same in libsanitizer's bundled copy (!) found in 4.9+.
- (substitute* "libsanitizer/libbacktrace/Makefile.in"
- (("-Werror")
- ""))))
- ;; Add a RUNPATH to libstdc++.so so that it finds libgcc_s.
- ;; See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32354>
- ;; and <http://bugs.gnu.org/20358>.
- (substitute* "libstdc++-v3/src/Makefile.in"
- (("^OPT_LDFLAGS = ")
- "OPT_LDFLAGS = -Wl,-rpath=$(libdir) "))
- ;; Move libstdc++*-gdb.py to the "lib" output to avoid a
- ;; circularity between "out" and "lib". (Note:
- ;; --with-python-dir is useless because it imposes $(prefix) as
- ;; the parent directory.)
- (substitute* "libstdc++-v3/python/Makefile.in"
- (("pythondir = .*$")
- (string-append "pythondir = " libdir "/share"
- "/gcc-$(gcc_version)/python\n")))
- ;; Avoid another circularity between the outputs: this #define
- ;; ends up in auto-host.h in the "lib" output, referring to
- ;; "out". (This variable is used to augment cpp's search path,
- ;; but there's nothing useful to look for here.)
- (substitute* "gcc/config.in"
- (("PREFIX_INCLUDE_DIR")
- "PREFIX_INCLUDE_DIR_isnt_necessary_here")))))
- (add-after 'configure 'post-configure
- (lambda _
- ;; Don't store configure flags, to avoid retaining references to
- ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'.
- (substitute* "Makefile"
- (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
- "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))))))
- (native-search-paths
- ;; Use the language-specific variables rather than 'CPATH' because they
- ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
- ;; The intent is to allow headers that are in the search path to be
- ;; treated as "system headers" (headers exempt from warnings) just like
- ;; the typical /usr/include headers on an FHS system.
- (list (search-path-specification
- (variable "C_INCLUDE_PATH")
- (files '("include")))
- (search-path-specification
- (variable "CPLUS_INCLUDE_PATH")
- ;; Add 'include/c++' here so that <cstdlib>'s "#include_next
- ;; <stdlib.h>" finds GCC's <stdlib.h>, not libc's.
- (files '("include/c++" "include")))
- (search-path-specification
- (variable "LIBRARY_PATH")
- (files '("lib" "lib64")))))
- (properties `((gcc-libc . ,(assoc-ref inputs "libc"))))
- (synopsis "GNU Compiler Collection")
- (description
- "GCC is the GNU Compiler Collection. It provides compiler front-ends
- for several languages, including C, C++, Objective-C, Fortran, Java, Ada, and
- Go. It also includes runtime support libraries for these languages.")
- (license gpl3+)
- (supported-systems (delete "aarch64-linux" %supported-systems))
- (home-page "https://gcc.gnu.org/")))))
- (define-public gcc-4.8
- (package (inherit gcc-4.7)
- (version "4.8.5")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.bz2"))
- (sha256
- (base32
- "08yggr18v373a1ihj0rg2vd6psnic42b518xcgp3r9k81xz1xyr2"))
- (patches (search-patches "gcc-arm-link-spec-fix.patch"
- "gcc-4.8-libsanitizer-fix.patch"
- "gcc-asan-missing-include.patch"
- "gcc-fix-texi2pod.patch"))
- (modules '((guix build utils)))
- ;; This is required for building with glibc-2.26.
- ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
- (snippet
- '(for-each
- (lambda (dir)
- (substitute* (string-append "libgcc/config/"
- dir "/linux-unwind.h")
- (("struct ucontext") "ucontext_t")))
- '("aarch64" "alpha" "bfin" "i386" "m68k"
- "pa" "sh" "tilepro" "xtensa")))))
- (supported-systems %supported-systems)
- (inputs
- `(("isl" ,isl-0.11)
- ("cloog" ,cloog)
- ,@(package-inputs gcc-4.7)))))
- (define-public gcc-4.9
- (package (inherit gcc-4.8)
- (version "4.9.4")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.bz2"))
- (sha256
- (base32
- "14l06m7nvcvb0igkbip58x59w3nq6315k6jcz3wr9ch1rn9d44bc"))
- (patches (search-patches "gcc-4.9-libsanitizer-fix.patch"
- "gcc-4.9-libsanitizer-ustat.patch"
- "gcc-4.9-libsanitizer-mode-size.patch"
- "gcc-arm-bug-71399.patch"
- "gcc-asan-missing-include.patch"
- "gcc-libvtv-runpath.patch"
- "gcc-fix-texi2pod.patch"))
- (modules '((guix build utils)))
- ;; This is required for building with glibc-2.26.
- ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
- (snippet
- '(for-each
- (lambda (dir)
- (substitute* (string-append "libgcc/config/"
- dir "/linux-unwind.h")
- (("struct ucontext") "ucontext_t")))
- '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
- "pa" "sh" "tilepro" "xtensa")))))
- ;; Override inherited texinfo-5 with latest version.
- (native-inputs `(("perl" ,perl) ;for manpages
- ("texinfo" ,texinfo)))
- (arguments
- (if (%current-target-system)
- (package-arguments gcc-4.8)
- ;; For native builds of GCC 4.9 and GCC 5, the C++ include path needs
- ;; to be adjusted so it does not interfere with GCC's own build processes.
- (substitute-keyword-arguments (package-arguments gcc-4.8)
- ((#:modules modules %gnu-build-system-modules)
- `((srfi srfi-1)
- ,@modules))
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'set-paths 'adjust-CPLUS_INCLUDE_PATH
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((libc (assoc-ref inputs "libc"))
- (gcc (assoc-ref inputs "gcc")))
- (setenv "CPLUS_INCLUDE_PATH"
- (string-join (fold delete
- (string-split (getenv "CPLUS_INCLUDE_PATH")
- #\:)
- (list (string-append libc "/include")
- (string-append gcc "/include/c++")))
- ":"))
- (format #t
- "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
- (getenv "CPLUS_INCLUDE_PATH"))))))))))))
- (define gcc-canadian-cross-objdump-snippet
- ;; Fix 'libcc1/configure' error when cross-compiling GCC. Without that,
- ;; 'libcc1/configure' wrongfully determines that '-rdynamic' support is
- ;; missing because $gcc_cv_objdump is empty:
- ;;
- ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590
- ;; http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077
- #~(substitute* "libcc1/configure"
- (("\\$gcc_cv_objdump -T")
- "$OBJDUMP_FOR_TARGET -T")))
- (define-public gcc-5
- ;; Note: GCC >= 5 ships with .info files but 'make install' fails to install
- ;; them in a VPATH build.
- (package (inherit gcc-4.9)
- (version "5.5.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.xz"))
- (sha256
- (base32
- "11zd1hgzkli3b2v70qsm2hyqppngd4616qc96lmm9zl2kl9yl32k"))
- (patches (search-patches "gcc-arm-bug-71399.patch"
- "gcc-libsanitizer-ustat.patch"
- "gcc-strmov-store-file-names.patch"
- "gcc-5.0-libvtv-runpath.patch"
- "gcc-5-source-date-epoch-1.patch"
- "gcc-5-source-date-epoch-2.patch"
- "gcc-6-libsanitizer-mode-size.patch"
- "gcc-fix-texi2pod.patch"
- "gcc-5-hurd.patch"))
- (modules '((guix build utils)))
- (snippet gcc-canadian-cross-objdump-snippet)))
- (inputs
- `(;; GCC5 needs <isl/band.h> which is removed in later versions.
- ("isl" ,isl-0.18)
- ,@(package-inputs gcc-4.7)))))
- (define-public gcc-6
- (package
- (inherit gcc-5)
- (version "6.5.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.xz"))
- (sha256
- (base32
- "0i89fksfp6wr1xg9l8296aslcymv2idn60ip31wr9s4pwin7kwby"))
- (patches (search-patches "gcc-strmov-store-file-names.patch"
- "gcc-6-libsanitizer-mode-size.patch"
- "gcc-6-source-date-epoch-1.patch"
- "gcc-6-source-date-epoch-2.patch"
- "gcc-5.0-libvtv-runpath.patch"))))
- ;; GCC 4.9 and 5 has a workaround that is not needed for GCC 6 and later.
- (arguments (package-arguments gcc-4.8))
- (inputs
- `(("isl" ,isl)
- ;; XXX: This gross hack allows us to have libstdc++'s <bits/c++config.h>
- ;; in the search path, thereby avoiding misconfiguration of libstdc++:
- ;; <https://bugs.gnu.org/42392>.
- ("libstdc++" ,libstdc++-headers)
- ,@(package-inputs gcc-4.7)))))
- (define-public gcc-7
- (package
- (inherit gcc-6)
- (version "7.5.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.xz"))
- (sha256
- (base32
- "0qg6kqc5l72hpnj4vr6l0p69qav0rh4anlkk3y55540zy3klc6dq"))
- (patches (search-patches "gcc-strmov-store-file-names.patch"
- "gcc-7-libsanitizer-mode-size.patch"
- "gcc-5.0-libvtv-runpath.patch"))))
- (description
- "GCC is the GNU Compiler Collection. It provides compiler front-ends
- for several languages, including C, C++, Objective-C, Fortran, Ada, and Go.
- It also includes runtime support libraries for these languages.")))
- (define-public gcc-8
- (package
- (inherit gcc-7)
- (version "8.5.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.xz"))
- (sha256
- (base32
- "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"))
- (patches (search-patches "gcc-8-strmov-store-file-names.patch"
- "gcc-5.0-libvtv-runpath.patch"
- "gcc-8-sort-libtool-find-output.patch"))
- (modules '((guix build utils)))
- (snippet gcc-canadian-cross-objdump-snippet)))))
- (define-public gcc-9
- (package
- (inherit gcc-8)
- (version "9.4.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.xz"))
- (sha256
- (base32
- "13l3p6g2krilaawbapmn9zmmrh3zdwc36mfr3msxfy038hps6pf9"))
- (patches (search-patches "gcc-9-strmov-store-file-names.patch"
- "gcc-9-asan-fix-limits-include.patch"
- "gcc-5.0-libvtv-runpath.patch"))
- (modules '((guix build utils)))
- (snippet gcc-canadian-cross-objdump-snippet)))))
- (define-public gcc-10
- (package
- (inherit gcc-8)
- (version "10.3.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.xz"))
- (sha256
- (base32
- "0i6378ig6h397zkhd7m4ccwjx5alvzrf2hm27p1pzwjhlv0h9x34"))
- (patches (search-patches "gcc-9-strmov-store-file-names.patch"
- "gcc-5.0-libvtv-runpath.patch"))
- (modules '((guix build utils)))
- (snippet gcc-canadian-cross-objdump-snippet)))))
- (define-public gcc-11
- (package
- (inherit gcc-8)
- (version "11.2.0")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gcc/gcc-"
- version "/gcc-" version ".tar.xz"))
- (sha256
- (base32
- "12zs6vd2rapp42x154m479hg3h3lsafn3xhg06hp5hsldd9xr3nh"))
- (patches (search-patches "gcc-9-strmov-store-file-names.patch"
- "gcc-5.0-libvtv-runpath.patch"))
- (modules '((guix build utils)))
- (snippet gcc-canadian-cross-objdump-snippet)))))
- ;; Note: When changing the default gcc version, update
- ;; the gcc-toolchain-* definitions.
- (define-public gcc gcc-10)
- (define-public (make-libstdc++ gcc)
- "Return a libstdc++ package based on GCC. The primary use case is when
- using compilers other than GCC."
- (package
- (inherit gcc)
- (name "libstdc++")
- (arguments
- `(#:out-of-source? #t
- #:phases
- (modify-phases %standard-phases
- ;; Force rs6000 (i.e., powerpc) libdir to be /lib and not /lib64.
- (add-before 'chdir 'fix-rs6000-libdir
- (lambda _
- (when (file-exists? "gcc/config/rs6000")
- (substitute* (find-files "gcc/config/rs6000")
- (("/lib64") "/lib")))))
- (add-before 'configure 'chdir
- (lambda _
- (chdir "libstdc++-v3"))))
- #:configure-flags `("--disable-libstdcxx-pch"
- ,(string-append "--with-gxx-include-dir="
- (assoc-ref %outputs "out")
- "/include"))))
- (outputs '("out" "debug"))
- (inputs '())
- (native-inputs '())
- (propagated-inputs '())
- (synopsis "GNU C++ standard library")))
- (define libstdc++
- ;; Libstdc++ matching the default GCC.
- (make-libstdc++ gcc))
- (define libstdc++-headers
- ;; XXX: This package is for internal use to work around
- ;; <https://bugs.gnu.org/42392> (see above). The main difference compared
- ;; to the libstdc++ headers that come with 'gcc' is that <bits/c++config.h>
- ;; is right under include/c++ and not under
- ;; include/c++/x86_64-unknown-linux-gnu (aka. GPLUSPLUS_TOOL_INCLUDE_DIR).
- (package
- (inherit libstdc++)
- (name "libstdc++-headers")
- (outputs '("out"))
- (build-system trivial-build-system)
- (arguments
- '(#:builder (let* ((out (assoc-ref %outputs "out"))
- (libstdc++ (assoc-ref %build-inputs "libstdc++")))
- (mkdir out)
- (mkdir (string-append out "/include"))
- (symlink (string-append libstdc++ "/include")
- (string-append out "/include/c++")))))
- (inputs `(("libstdc++" ,libstdc++)))
- (synopsis "Headers of GNU libstdc++")))
- (define-public libstdc++-4.9
- (make-libstdc++ gcc-4.9))
- (define (make-libiberty gcc)
- "Return a libiberty package based on GCC."
- (package
- (inherit gcc)
- (name "libiberty")
- (arguments
- `(#:out-of-source? #t
- #:phases
- (modify-phases %standard-phases
- (add-before 'configure 'chdir
- (lambda _
- (chdir "libiberty")))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (lib (string-append out "/lib/"))
- (include (string-append out "/include/")))
- (install-file "libiberty.a" lib)
- (install-file "../include/libiberty.h" include)))))))
- (inputs '())
- (outputs '("out"))
- (native-inputs '())
- (propagated-inputs '())
- (properties '())
- (synopsis "Collection of subroutines used by various GNU programs")))
- (define-public libiberty
- (make-libiberty gcc))
- (define* (custom-gcc gcc name languages
- #:optional
- (search-paths (package-native-search-paths gcc))
- #:key (separate-lib-output? #t))
- "Return a custom version of GCC that supports LANGUAGES. Use SEARCH-PATHS
- as the 'native-search-paths' field."
- (package (inherit gcc)
- (name name)
- (outputs (if separate-lib-output?
- (package-outputs gcc)
- (delete "lib" (package-outputs gcc))))
- (native-search-paths search-paths)
- (properties (alist-delete 'hidden? (package-properties gcc)))
- (arguments
- (substitute-keyword-arguments (package-arguments gcc)
- ((#:modules modules %gnu-build-system-modules)
- `(,@modules
- (srfi srfi-1)
- (srfi srfi-26)
- (ice-9 regex)))
- ((#:configure-flags flags)
- `(cons (string-append "--enable-languages="
- ,(string-join languages ","))
- (remove (cut string-match "--enable-languages.*" <>)
- ,flags)))
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'install 'remove-broken-or-conflicting-files
- (lambda* (#:key outputs #:allow-other-keys)
- (for-each
- delete-file
- (find-files (string-append (assoc-ref outputs "out") "/bin")
- ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
- (define* (custom-gcc-gccgo gcc name languages
- #:optional
- (search-paths (package-native-search-paths gcc))
- #:key (separate-lib-output? #t))
- ;; TODO: remove CUSTOM-GCC-GCCGO when regex changes for CUSTOM-GCC are
- ;; merged into master <https://issues.guix.gnu.org/49010>
- "Return a custom version of GCC that supports LANGUAGES. Use SEARCH-PATHS
- as the 'native-search-paths' field."
- (package (inherit gcc)
- (name name)
- (outputs (if separate-lib-output?
- (package-outputs gcc)
- (delete "lib" (package-outputs gcc))))
- (native-search-paths search-paths)
- (properties (alist-delete 'hidden? (package-properties gcc)))
- (arguments
- (substitute-keyword-arguments (package-arguments gcc)
- ((#:modules modules %gnu-build-system-modules)
- `(,@modules
- (srfi srfi-1)
- (srfi srfi-26)
- (ice-9 regex)))
- ((#:configure-flags flags)
- `(cons (string-append "--enable-languages="
- ,(string-join languages ","))
- (remove (cut string-match "--enable-languages.*" <>)
- ,flags)))
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'install 'remove-broken-or-conflicting-files
- (lambda* (#:key outputs #:allow-other-keys)
- (for-each
- delete-file
- (find-files (string-append (assoc-ref outputs "out") "/bin")
- ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
- (define %generic-search-paths
- ;; This is the language-neutral search path for GCC. Entries in $CPATH are
- ;; not considered "system headers", which means GCC can raise warnings for
- ;; issues in those headers. 'CPATH' is the only one that works for
- ;; front-ends not in the C family.
- (list (search-path-specification
- (variable "CPATH")
- (files '("include")))
- (search-path-specification
- (variable "LIBRARY_PATH")
- (files '("lib" "lib64")))))
- (define-public gfortran
- (hidden-package
- (custom-gcc gcc
- "gfortran" '("fortran")
- %generic-search-paths)))
- (define-public gdc-10
- (hidden-package
- (custom-gcc gcc-10 "gdc" '("d")
- %generic-search-paths)))
- (define-public gdc-11
- (hidden-package
- (custom-gcc gcc-11 "gdc" '("d")
- %generic-search-paths)))
- (define-public libgccjit
- (package
- (inherit gcc-9)
- (name "libgccjit")
- (outputs (delete "lib" (package-outputs gcc)))
- (properties (alist-delete 'hidden? (package-properties gcc)))
- (arguments
- (substitute-keyword-arguments `(#:modules ((guix build gnu-build-system)
- (guix build utils)
- (ice-9 regex)
- (srfi srfi-1)
- (srfi srfi-26))
- ,@(package-arguments gcc))
- ((#:configure-flags flags)
- `(append `("--enable-host-shared"
- ,(string-append "--enable-languages=jit"))
- (remove (cut string-match "--enable-languages.*" <>)
- ,flags)))
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'install 'remove-broken-or-conflicting-files
- (lambda* (#:key outputs #:allow-other-keys)
- (for-each delete-file
- (find-files (string-append (assoc-ref outputs "out") "/bin")
- ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))))))))
- (synopsis "GCC library generating machine code on-the-fly at runtime")
- (description
- "This package is part of the GNU Compiler Collection and provides an
- embeddable library for generating machine code on-the-fly at runtime. This
- shared library can then be dynamically-linked into bytecode interpreters and
- other such programs that want to generate machine code on-the-fly at run-time.
- It can also be used for ahead-of-time code generation for building standalone
- compilers. The just-in-time (jit) part of the name is now something of a
- misnomer.")))
- (define (make-gccgo gcc)
- "Return a gccgo package based on GCC."
- (let ((gccgo (custom-gcc-gccgo gcc "gccgo" '("go") %generic-search-paths)))
- (package
- (inherit gccgo)
- (synopsis "Go frontend to GCC")
- (description
- "This package is part of the GNU Compiler Collection and
- provides the GNU compiler for the Go programming language.")
- (arguments
- (substitute-keyword-arguments (package-arguments gccgo)
- ((#:phases phases)
- `(modify-phases ,phases
- (add-after 'install 'wrap-go-with-tool-path
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (exedir (string-append out "/libexec/gcc"))
- (tooldir (dirname (car (find-files exedir "^cgo$")))))
- (wrap-program (string-append out "/bin/go")
- `("GCCGOTOOLDIR" =
- (,(string-append "${GCCGOTOOLDIR-" tooldir "}")))
- `("GOROOT" =
- (,(string-append "${GOROOT-" out "}")))))))
- (add-before 'configure 'fix-gotools-runpath
- (lambda _
- (substitute* "gotools/Makefile.in"
- (("AM_LDFLAGS =" all)
- (string-append all " -Wl,-rpath=$(libdir) ")))))
- (add-before 'configure 'remove-tool-reference-from-libgo
- (lambda _
- (substitute* "libgo/Makefile.in"
- (("(GccgoToolDir = \\\")[^\\\"]+" _ start)
- (string-append start "/nonexistent"))
- (("(DefaultGoroot = \\\")[^\\\"]+" _ start)
- (string-append start "/nonexistent"))
- (("(defaultGOROOTValue.*?return `)[^`]+" _ start)
- (string-append start "/nonexistent"))))))))))))
- (define-public gccgo-4.9
- (custom-gcc (package
- (inherit gcc-4.9)
- (synopsis "Go frontend to GCC")
- (description
- "This package is part of the GNU Compiler Collection and
- provides the GNU compiler for the Go programming language."))
- "gccgo" '("go")
- %generic-search-paths
- ;; Suppress the separate "lib" output, because otherwise the
- ;; "lib" and "out" outputs would refer to each other, creating
- ;; a cyclic dependency. <http://debbugs.gnu.org/18101>
- #:separate-lib-output? #f))
- (define-public gccgo-10
- (make-gccgo gcc-10))
- (define %objc-search-paths
- (list (search-path-specification
- (variable "OBJC_INCLUDE_PATH")
- (files '("include")))
- (search-path-specification
- (variable "LIBRARY_PATH")
- (files '("lib" "lib64")))))
- (define-public gcc-objc-4.8
- (custom-gcc gcc-4.8 "gcc-objc" '("objc")
- %objc-search-paths))
- (define-public gcc-objc-4.9
- (custom-gcc gcc-4.9 "gcc-objc" '("objc")
- %objc-search-paths))
- (define-public gcc-objc-5
- (custom-gcc gcc-5 "gcc-objc" '("objc")
- %objc-search-paths))
- (define-public gcc-objc-6
- (custom-gcc gcc-6 "gcc-objc" '("objc")
- %objc-search-paths))
- (define-public gcc-objc-7
- (custom-gcc gcc-7 "gcc-objc" '("objc")
- %objc-search-paths))
- (define-public gcc-objc-8
- (custom-gcc gcc-8 "gcc-objc" '("objc")
- %objc-search-paths))
- (define-public gcc-objc-9
- (custom-gcc gcc-9 "gcc-objc" '("objc")
- %objc-search-paths))
- (define-public gcc-objc-10
- (custom-gcc gcc-10 "gcc-objc" '("objc")
- %objc-search-paths))
- (define-public gcc-objc gcc-objc-10)
- (define %objc++-search-paths
- (list (search-path-specification
- (variable "OBJCPLUS_INCLUDE_PATH")
- (files '("include")))
- (search-path-specification
- (variable "LIBRARY_PATH")
- (files '("lib" "lib64")))))
- (define-public gcc-objc++-4.8
- (custom-gcc gcc-4.8 "gcc-objc++" '("obj-c++")
- %objc++-search-paths))
- (define-public gcc-objc++-4.9
- (custom-gcc gcc-4.9 "gcc-objc++" '("obj-c++")
- %objc++-search-paths))
- (define-public gcc-objc++-5
- (custom-gcc gcc-5 "gcc-objc++" '("obj-c++")
- %objc++-search-paths))
- (define-public gcc-objc++-6
- (custom-gcc gcc-6 "gcc-objc++" '("obj-c++")
- %objc++-search-paths))
- (define-public gcc-objc++-7
- (custom-gcc gcc-7 "gcc-objc++" '("obj-c++")
- %objc++-search-paths))
- (define-public gcc-objc++-8
- (custom-gcc gcc-8 "gcc-objc++" '("obj-c++")
- %objc++-search-paths))
- (define-public gcc-objc++-9
- (custom-gcc gcc-9 "gcc-objc++" '("obj-c++")
- %objc++-search-paths))
- (define-public gcc-objc++-10
- (custom-gcc gcc-10 "gcc-objc++" '("obj-c++")
- %objc++-search-paths))
- (define-public gcc-objc++ gcc-objc++-10)
- (define (make-libstdc++-doc gcc)
- "Return a package with the libstdc++ documentation for GCC."
- (package
- (inherit gcc)
- (name "libstdc++-doc")
- (version (package-version gcc))
- (synopsis "GNU libstdc++ documentation")
- (outputs '("out"))
- (native-inputs `(("doxygen" ,doxygen)
- ("texinfo" ,texinfo)
- ("libxml2" ,libxml2)
- ("libxslt" ,libxslt)
- ("docbook-xml" ,docbook-xml)
- ("docbook-xsl" ,docbook-xsl)
- ("graphviz" ,graphviz))) ;for 'dot', invoked by 'doxygen'
- (inputs '())
- (propagated-inputs '())
- (arguments
- '(#:out-of-source? #t
- #:tests? #f ;it's just documentation
- #:phases (modify-phases %standard-phases
- (add-before 'configure 'chdir
- (lambda _
- (chdir "libstdc++-v3")))
- (add-before 'configure 'set-xsl-directory
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((docbook (assoc-ref inputs "docbook-xsl")))
- (substitute* (find-files "doc"
- "^Makefile\\.in$")
- (("@XSL_STYLE_DIR@")
- (string-append
- docbook "/xml/xsl/"
- (strip-store-file-name docbook)))))))
- (replace 'build
- (lambda _
- ;; XXX: There's also a 'doc-info' target, but it
- ;; relies on docbook2X, which itself relies on
- ;; DocBook 4.1.2, which is not really usable
- ;; (lacks a catalog.xml.)
- (invoke "make"
- "doc-html"
- "doc-man")))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (invoke "make"
- "doc-install-html"
- "doc-install-man")))))))
- (properties (alist-delete 'hidden? (package-properties gcc)))))
- (define-public libstdc++-doc-5
- (make-libstdc++-doc gcc-5))
- (define-public libstdc++-doc-9
- (make-libstdc++-doc gcc-9))
- (define-public isl
- (package
- (name "isl")
- (version "0.23")
- (source (origin
- (method url-fetch)
- (uri (list (string-append
- "http://isl.gforge.inria.fr/isl-"
- version
- ".tar.bz2")
- (string-append %gcc-infrastructure
- name "-" version ".tar.bz2")))
- (sha256
- (base32
- "0k91zck10zxs9sk3yrbb92y1j3w981w3fbwkfwd7kl779b0j52f5"))))
- (build-system gnu-build-system)
- (outputs '("out" "static"))
- (arguments
- '(#:phases (modify-phases %standard-phases
- (add-after 'install 'move-static-library
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (static (assoc-ref outputs "static"))
- (source (string-append out "/lib/libisl.a"))
- (target (string-append static "/lib/libisl.a")))
- (mkdir-p (dirname target))
- (link source target)
- (delete-file source)
- ;; Remove reference to libisl.a from the .la file so
- ;; libtool looks for it in the usual locations.
- (substitute* (string-append out "/lib/libisl.la")
- (("^old_library=.*")
- "old_library=''\n"))))))))
- (inputs `(("gmp" ,gmp)))
- (home-page "http://isl.gforge.inria.fr/")
- (synopsis
- "Manipulating sets and relations of integer points \
- bounded by linear constraints")
- (description
- "isl is a library for manipulating sets and relations of integer points
- bounded by linear constraints. Supported operations on sets include
- intersection, union, set difference, emptiness check, convex hull, (integer)
- affine hull, integer projection, computing the lexicographic minimum using
- parametric integer programming, coalescing and parametric vertex
- enumeration. It also includes an ILP solver based on generalized basis
- reduction, transitive closures on maps (which may encode infinite graphs),
- dependence analysis and bounds on piecewise step-polynomials.")
- (license lgpl2.1+)))
- (define-public isl-0.18
- (package
- (inherit isl)
- (version "0.18")
- (source (origin
- (method url-fetch)
- (uri (list (string-append "http://isl.gforge.inria.fr/isl-"
- version ".tar.bz2")
- (string-append %gcc-infrastructure
- "isl-" version ".tar.bz2")))
- (sha256
- (base32
- "06ybml6llhi4i56q90jnimbcgk1lpcdwhy9nxdxra2hxz3bhz2vb"))))))
- (define-public isl-0.11
- (package
- (inherit isl)
- (name "isl")
- (version "0.11.1")
- (source (origin
- (method url-fetch)
- (uri (list (string-append
- "http://isl.gforge.inria.fr/isl-"
- version
- ".tar.bz2")
- (string-append %gcc-infrastructure
- name "-" version ".tar.bz2")))
- (sha256
- (base32
- "13d9cqa5rzhbjq0xf0b2dyxag7pqa72xj9dhsa03m8ccr1a4npq9"))
- (patches (search-patches "isl-0.11.1-aarch64-support.patch"))))))
- (define-public cloog
- (package
- (name "cloog")
- (version "0.18.0")
- (source
- (origin
- (method url-fetch)
- (uri (list (string-append
- "http://www.bastoul.net/cloog/pages/download/count.php3?url=cloog-"
- version
- ".tar.gz")
- (string-append %gcc-infrastructure
- name "-" version ".tar.gz")))
- (sha256
- (base32
- "0a12rwfwp22zd0nlld0xyql11cj390rrq1prw35yjsw8wzfshjhw"))
- (file-name (string-append name "-" version ".tar.gz"))))
- (build-system gnu-build-system)
- (inputs `(("gmp" ,gmp)
- ("isl" ,isl-0.11)))
- (arguments '(#:configure-flags '("--with-isl=system")))
- (home-page "http://www.cloog.org/")
- (synopsis "Library to generate code for scanning Z-polyhedra")
- (description
- "CLooG is a free software library to generate code for scanning
- Z-polyhedra. That is, it finds a code (e.g., in C, FORTRAN...) that
- reaches each integral point of one or more parameterized polyhedra.
- CLooG has been originally written to solve the code generation problem
- for optimizing compilers based on the polytope model. Nevertheless it
- is used now in various area e.g., to build control automata for
- high-level synthesis or to find the best polynomial approximation of a
- function. CLooG may help in any situation where scanning polyhedra
- matters. While the user has full control on generated code quality,
- CLooG is designed to avoid control overhead and to produce a very
- effective code.")
- (license gpl2+)))
- (define-public gnu-c-manual
- (package
- (name "gnu-c-manual")
- (version "0.2.5")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gnu-c-manual/gnu-c-manual-"
- version ".tar.gz"))
- (sha256
- (base32
- "1sfsj9256w18qzylgag2h5h377aq8in8929svblfnj9svfriqcys"))))
- (build-system gnu-build-system)
- (native-inputs `(("texinfo" ,texinfo)))
- (arguments
- '(#:phases (modify-phases %standard-phases
- (delete 'configure)
- (delete 'check)
- (replace 'build
- (lambda _
- (invoke "make"
- "gnu-c-manual.info"
- "gnu-c-manual.html")))
- (replace 'install
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (info (string-append out "/share/info"))
- (html (string-append
- out "/share/doc/gnu-c-manual")))
- (mkdir-p info)
- (mkdir-p html)
- (for-each (lambda (file)
- (copy-file file
- (string-append info "/"
- file)))
- (find-files "." "\\.info(-[0-9])?$"))
- (for-each (lambda (file)
- (copy-file file
- (string-append html "/"
- file)))
- (find-files "." "\\.html$"))))))))
- (synopsis "Reference manual for the C programming language")
- (description
- "This is a reference manual for the C programming language, as
- implemented by the GNU C Compiler (gcc). As a reference, it is not intended
- to be a tutorial of the language. Rather, it outlines all of the constructs
- of the language. Library functions are not included.")
- (home-page "https://www.gnu.org/software/gnu-c-manual/")
- (license fdl1.3+)))
|