gnu: Add ISPC.

* gnu/packages/c.scm (ispc): New variable.

Signed-off-by: 宋文武 <iyzsong@member.fsf.org>
This commit is contained in:
zamfofex 2023-04-26 10:17:37 -03:00 committed by 宋文武
parent 4557c83a7d
commit af6ed2fc14
No known key found for this signature in database
GPG key ID: D415BF253B515976

View file

@ -17,6 +17,7 @@
;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
;;; Copyright © 2022 Ekaitz Zarraga <ekaitz@elenq.tech>
;;; Copyright © 2022 ( <paren@disroot.org>
;;; Copyright © 2023 zamfofex <zamfofex@twdb.moe>
;;;
;;; This file is part of GNU Guix.
;;;
@ -57,7 +58,9 @@ (define-module (gnu packages c)
#:use-module (gnu packages guile)
#:use-module (gnu packages llvm)
#:use-module (gnu packages lua)
#:use-module (gnu packages m4)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages pcre)
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
@ -1424,3 +1427,65 @@ (define-public utest-h
(description
"This package provides a header-only unit testing library for C/C++.")
(license license:unlicense))))
(define-public ispc
(package
(name "ispc")
(version "1.19.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/ispc/ispc")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0yhcgyzjlrgs920lm0l6kygj2skanfb6qkxbdgm69r8c2xkzkaa3"))))
(inputs (list ncurses))
(native-inputs (list bison clang flex m4 python))
(build-system cmake-build-system)
(supported-systems
'("x86_64-linux" "i686-linux" "aarch64-linux" "armhf-linux"))
(arguments
`(#:tests? #f
#:configure-flags
`(,,(string-append "-DCMAKE_C_COMPILER=" (cc-for-target))
,,(string-append "-DCMAKE_CXX_COMPILER=" (cxx-for-target))
,(string-append "-DCLANG_EXECUTABLE="
(assoc-ref %build-inputs "clang")
"/bin/clang")
,(string-append "-DCLANGPP_EXECUTABLE="
(assoc-ref %build-inputs "clang")
"/bin/clang++"))
#:phases
(modify-phases %standard-phases
(add-before 'configure 'patch-curses-requirement
(lambda _
(substitute* "CMakeLists.txt"
(("\\bCURSES_CURSES_LIBRARY\\b")
"CURSES_LIBRARY"))))
;; Note: This works around the following issue:
;; <https://github.com/ispc/ispc/issues/1865>
;; Because GCC in Guix does not have multilib support.
(add-before 'configure 'patch-target-archs
(lambda _
(substitute* "cmake/GenerateBuiltins.cmake"
(("\\bforeach \\(bit 32 64\\)")
,(if (target-64bit?)
"foreach (bit 64)"
"foreach (bit 32)"))
(("\\bforeach \\(arch .*?\\)")
,(if (target-x86?)
"foreach (arch \"x86\")"
"foreach (arch \"arm\")"))
(("\\bforeach \\(os_name \"windows\" .*?\\)")
"foreach (os_name \"linux\")")))))))
(synopsis "Implicit SPMD Program Compiler")
(description
"ISPC is a compiler for a variant of the C programming language, with
extensions for single program, multiple data programming. Under the SPMD
model, the programmer writes a program that generally appears to be a regular
serial program, though the execution model is actually that a number of
program instances execute in parallel on the hardware.")
(home-page "https://github.com/ispc/ispc")
(license license:bsd-3)))