diff mbox series

[bug#72494,v4] gnu: Add c3c-bootstrap.

Message ID 8f0c2986-b790-86fa-7217-5491d6f7208f@disroot.org
State New
Headers show
Series [bug#72494,v4] gnu: Add c3c-bootstrap. | expand

Commit Message

Adam Faiz Aug. 11, 2024, 2:57 p.m. UTC
From 8b6035ad6587d44a9d65575b0f307820e42a402e Mon Sep 17 00:00:00 2001
Message-ID: <8b6035ad6587d44a9d65575b0f307820e42a402e.1723388041.git.adam.faiz@disroot.org>
From: AwesomeAdam54321 <adam.faiz@disroot.org>
Date: Wed, 7 Aug 2024 12:18:23 +0800
Subject: [PATCH v4] gnu: Add c3c-bootstrap.

This patch was co-authored with Ashvith Shetty.

* gnu/packages/c3.scm: New file.
* gnu/packages/c3.scm (c3c-bootstrap): New variable.
---
 gnu/packages/c3.scm | 94 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 gnu/packages/c3.scm


base-commit: b20956651a53a8f23828fdeb6945e1a31e6997a8

Comments

Ashvith Shetty Aug. 12, 2024, 6:38 p.m. UTC | #1
Hi Adam,
I've actually got my own patch ready with similar substitution and complete
set of tests, which I've not submitted yet. The reason for this is that
I've talked to the maintainer of the project, and according to them, this
substitution is a bad idea. Another reason is that it does not work in a
pure, ephemeral environment, unless `gcc` and `ld` is provided as either a
propagated input, or a side-by package. And there's also the issue with
using an alternative compiler and linker, which isn't working well.
diff mbox series

Patch

diff --git a/gnu/packages/c3.scm b/gnu/packages/c3.scm
new file mode 100644
index 0000000000..d179a30356
--- /dev/null
+++ b/gnu/packages/c3.scm
@@ -0,0 +1,94 @@ 
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2024 Ashvith Shetty <ashvithshetty10@gmail.com>
+;;; Copyright © 2024 Adam Faiz <adam.faiz@disroot.org>
+;;;
+;;; 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 c3)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages llvm)
+  #:use-module (gnu packages python)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix utils))
+
+(define-public c3c-bootstrap
+  (package
+    (name "c3c")
+    (version "0.6.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/c3lang/c3c")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0xjl3yghyqmqv9118nhcix3xywlpdirqc0dlmdaghdkja0wr19rw"))
+       (modules '((guix build utils)))
+       (snippet
+        #~(begin
+            ;; Unbundle miniz.
+            (delete-file-recursively "dependencies")
+            ;; Swap out miniz for zlib.
+            (substitute* "CMakeLists.txt"
+              (("add_library\\(miniz.*\\)\n$")
+               "find_package(ZLIB REQUIRED)\n")
+              (("target_include_directories\\(miniz PUBLIC") "")
+              (("...*/dependencies/miniz/..") "")
+              (("miniz") "z"))
+            (substitute* "src/utils/unzipper.c"
+              (("miniz\\.h") "zlib.h"))))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:configure-flags
+       #~(list "-DCMAKE_INSTALL_LIBDIR=lib")
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-before 'configure 'fix-build
+             (lambda _
+               (substitute* "CMakeLists.txt"
+                 (("\\$\\{LLVM_LIBRARY_DIRS\\}")
+                  (string-append #$lld-18 "/lib/ "
+                                 #$llvm-18 "/lib/")))
+               (substitute* '("src/compiler/target.c"
+                              "src/compiler/linker.c")
+                 (("\"cc\"") (string-append "\"" #$(cc-for-target) "\"")))
+               (substitute* "resources/testproject/project.json"
+                 (("\"cc\" : \"cc\",") ""))))
+           (replace 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (with-directory-excursion "../source/resources/testproject"
+                   (invoke "../../../build/c3c" "build"))
+                 (invoke "python3" "../source/test/src/tester.py"
+                         "./c3c" "../source/test/test_suite")
+                 (invoke "./c3c" "compile-test" "../source/test/unit")))))))
+    (native-inputs (list python))
+    (inputs (list libffi lld-18 llvm-18 zlib))
+    (synopsis "Compiler for the C3 language")
+    (description
+     "C3 is a programming language that builds on the syntax and semantics
+of the C language, with the goal of evolving it while still retaining
+familiarity for C programmers.")
+    (home-page "https://c3-lang.org/")
+    (supported-systems '("x86_64-linux" "aarch64-linux" "riscv64-linux"))
+    (license (list license:lgpl3 license:expat))))