GNU bug report logs - #72494
[PATCH 0/1] Add C3

Previous Next

Package: guix-patches;

Reported by: Ashvith Shetty <ashvithshetty10 <at> gmail.com>

Date: Tue, 6 Aug 2024 11:03:01 UTC

Severity: normal

Tags: patch

Full log


View this message in rfc822 format

From: Ashvith Shetty <ashvithshetty0010 <at> zohomail.in>
To: "72494" <72494 <at> debbugs.gnu.org>
Cc: Simon Tournier <zimon.toutoune <at> gmail.com>, Mathieu Othacehe <othacehe <at> gnu.org>, "Ludovic Courtès" <ludo <at> gnu.org>, Tobias Geerinckx-Rice <me <at> tobias.gr>, jgart <jgart <at> dismail.de>, Christopher Baines <guix <at> cbaines.net>
Subject: [bug#72494] Help with packaging c3c-lang
Date: Thu, 06 Mar 2025 13:52:20 +0530
Hello,
This is my second attempt at packaging c3-lang (https://github.com/c3lang/c3c). I am planning to refer zig to build all the way from 0.5.1 to the lastest version. In the earlier patches, miniz was unbundled and replaced with the input-provided zlib - however, this time was able to make it work with the input-provided miniz (patch not provided).

1) In the earlier patch I have worked on, I just noticed that I had to substitute ${LLVM_LIBRARY_DIRS}:

--8<---------------cut here---------------start------------->8---
+       (snippet #~(begin
+                    (use-modules (guix build utils))
+                    (substitute* "CMakeLists.txt"
+                      (("\\$\\{LLVM_LIBRARY_DIRS\\}")
+                       (string-append #$lld-18 "/lib/ "
+                                      #$llvm-18 "/lib/")))))))
--8<---------------cut here---------------start------------->8---

However, this seems to me like an improper way to deal with it.

I have a limited understanding of CMake, so please bear with me: Variable ${LLVM_LIBRARY_DIRS} (which I am assuming is a combination of variables including, but not limited to ${LLVM_DIR} and ${LLD_DIR}) seems to include only /gnu/store/z0abzsad781af8qp2wzqq8icwwyxb4ms-llvm-18.1.8/lib/ (${LLVM_DIR}?), but not /gnu/store/62jn91571kx31hqza7c9jzsc3sinkxjr-lld-18.1.8/lib/ (${LLD_DIR}?). When I try printing ${LLD_DIR} in CMakeLists.txt (patch not provided), it appears to be an empty string. Is there anything wrong with the way CMake is configured in c3c?

2) c3c assumes that there exists a compiler or an alias `cc`, but there isn't any such variable in Guix (at least to my knowledge). How do I deal with this issue? Because if not resolved, it also causes the tests to fail. Do I patch cc to gcc/clang/#$(cc-for-target)?

--8<---------------cut here---------------start------------->8---
+               (substitute* '("src/compiler/target.c"
+                              "src/compiler/linker.c")
+                 (("\"cc\"") (string-append "\"" #$(cc-for-target) "\"")))
+               (substitute* "resources/testproject/project.json"
+                 (("\"cc\" : \"cc\",") ""))))
--8<---------------cut here---------------start------------->8---

Or is there a better way to deal with this? By the way, commit 297a6c9 (https://github.com/c3lang/c3c/commit/297a6c93481e2f3b62bf0250750e20549108129d) in v0.6.3 includes support for C3C_LIB and C3C_CC - can this be re-used for earlier patches?

3) Tests in C3C don't run (or maybe I am doing something wrong), so I had to add this instead (this is specific to v0.6.1):
--8<---------------cut here---------------start------------->8---
(replace 'check
                     (lambda* (#:key tests? #:allow-other-keys)
                       (when tests?
                         ;; Compile and run some examples
                         (display "# Compile and run some examples #\n")
                         (with-directory-excursion "../source/resources"
                           (for-each (lambda (file)
                                       (invoke "../../build/c3c" "compile"
                                               file))
                                     '("examples/base64.c3"
                                       "examples/binarydigits.c3"
                                       "examples/brainfk.c3"
                                       "examples/factorial_macro.c3"
                                       "examples/fasta.c3"
                                       "examples/gameoflife.c3"
                                       "examples/hash.c3"
                                       "examples/levenshtein.c3"
                                       "examples/load_world.c3"
                                       "examples/map.c3"
                                       "examples/mandelbrot.c3"
                                       "examples/plus_minus.c3"
                                       "examples/nbodies.c3"
                                       "examples/spectralnorm.c3"
                                       "examples/swap.c3"
                                       "examples/contextfree/boolerr.c3"
                                       "examples/contextfree/dynscope.c3"
                                       "examples/contextfree/guess_number.c3"
                                       "examples/contextfree/multi.c3"
                                       "examples/contextfree/cleanup.c3"))

                           (for-each (lambda (file)
                                       (invoke "../../build/c3c" "compile-run"
                                               file))
                                     '("examples/hello_world_many.c3"
                                       "examples/time.c3"
                                       "examples/fannkuch-redux.c3"
                                       "examples/contextfree/boolerr.c3"
                                       "examples/load_world.c3"
                                       "examples/process.c3"
                                       "examples/ls.c3"
                                       "linux_stack.c3"))

                           (invoke "../../build/c3c" "compile-run"
                                   "--linker=builtin" "linux_stack.c3"))

                         ;; Compile run unit tests
                         (display "# Compile run unit tests #\n")
                         (invoke "./c3c" "compile-test" "../source/test/unit")

                         (with-directory-excursion "../source/resources/testproject"
                           ;; Build testproject
                           (display "# Build testproject #\n")
                           (invoke "../../../build/c3c" "build" "--debug-log")

                           ;; Build testproject direct linker
                           (display "# Build testproject direct linker #\n")
                           (invoke "../../../build/c3c" "build" "--debug-log"
                                   "--linker=builtin"))

                         ;; Run compiler tests
                         (display "# Run compiler tests #\n")
                         (invoke "python3" "../source/test/src/tester.py"
                                 "./c3c" "../source/test/test_suite")))))))
--8<---------------cut here---------------start------------->8---

These tests come from `.github/workflows/main.yml`. I feel like there has to be a better way to do this.

Regards,
Ashvith




This bug report was last modified 106 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.