summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Langlois <pierre.langlois@gmx.com>2022-01-17 19:15:36 +0000
committerJonathan Brielmaier <jonathan.brielmaier@web.de>2022-01-23 16:14:45 +0100
commit4124d9c693605b178365d2763a5c8f5813573097 (patch)
tree92fe119dc3612ebf0dd9d1fd1fdb8a465298649a
parent5e60eec084b8812c7a5fc1ed18ec1e0cf1c6b6f6 (diff)
nongnu: Add wasm32-wasi-clang-toolchain.
* nongnu/packages/wasm.scm (wasm32-wasi-clang-toolchain): New variable. Signed-off-by: Jonathan Brielmaier <jonathan.brielmaier@web.de>
-rw-r--r--nongnu/packages/wasm.scm64
1 files changed, 64 insertions, 0 deletions
diff --git a/nongnu/packages/wasm.scm b/nongnu/packages/wasm.scm
index 910622f..85db3bb 100644
--- a/nongnu/packages/wasm.scm
+++ b/nongnu/packages/wasm.scm
@@ -24,6 +24,8 @@
#:use-module (guix git-download)
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system trivial)
+ #:use-module (gnu packages bash)
#:use-module (gnu packages llvm)
#:use-module (gnu packages python))
@@ -207,3 +209,65 @@ other APIs.")
use with Clang, targeting C++11, C++14 and above. This package targets
WebAssembly with WASI.")
(license license:expat)))
+
+(define-public wasm32-wasi-clang-toolchain
+ (package
+ (name "wasm32-wasi-clang-toolchain")
+ (version (package-version wasm32-wasi-clang))
+ (source #f)
+ (build-system trivial-build-system)
+ (arguments
+ (list
+ #:builder
+ (with-imported-modules '((guix build union)
+ (guix build utils))
+ #~(begin
+ (use-modules (guix build union)
+ (guix build utils))
+ (union-build #$output
+ (list #$wasm32-wasi-clang-runtime
+ #$wasi-libc
+ #$wasm32-wasi-libcxx))
+ (mkdir-p (string-append #$output "/bin"))
+
+ ;; We provide clang and clang++ via a wrapped program that sets
+ ;; include paths correctly so that it does not include paths from
+ ;; the host.
+
+ ;; FIXME: Review how we can provide better support for
+ ;; cross-compiling with clang in Guix, maybe adding support for
+ ;; the CROSS_C_INCLUDE_PATH and CROSS_CPLUS_INCLUDE_PATH
+ ;; environment variables like GCC.
+
+ (for-each
+ (lambda (bin)
+ (symlink (string-append #$wasm32-wasi-clang bin)
+ (string-append #$output bin))
+ (wrap-program (string-append #$output bin)
+ #:sh (string-append #$bash-minimal "/bin/bash")
+ `("C_INCLUDE_PATH" ":" =
+ (,(string-append #$output "/wasm32-wasi/include")))
+ `("CPLUS_INCLUDE_PATH" ":" =
+ ;; Make sure inclure/c++/v1 comes first for #include_next
+ ;; to work.
+ (,(string-append #$output "/wasm32-wasi/include/c++/v1")
+ ,(string-append #$output "/wasm32-wasi/include")))))
+ '("/bin/clang" "/bin/clang++"))
+
+ (symlink (string-append #$lld "/bin/wasm-ld")
+ (string-append #$output "/bin/wasm-ld"))))))
+ (inputs
+ (list bash-minimal
+ lld
+ wasi-libc
+ wasm32-wasi-clang
+ wasm32-wasi-clang-runtime
+ wasm32-wasi-libcxx))
+ (license (cons
+ (package-license wasm32-wasi-clang)
+ (package-license wasi-libc)))
+ (home-page "https://clang.llvm.org")
+ (synopsis "Complete Clang toolchain for C/C++ development, for WebAssembly.")
+ (description "This package provides a complete Clang toolchain for C/C++
+development targeting WebAssembly with WASI. This includes Clang, as well as
+libc, libc++ and wasm-ld.")))