guix-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug#72494] Help with packaging c3c-lang


From: Ashvith Shetty
Subject: [bug#72494] Help with packaging c3c-lang
Date: Thu, 06 Mar 2025 13:52:20 +0530
User-agent: Zoho Mail

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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]