emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/beardbolt 1916179672 166/323: Add support for Zig


From: ELPA Syncer
Subject: [elpa] externals/beardbolt 1916179672 166/323: Add support for Zig
Date: Thu, 9 Mar 2023 10:58:27 -0500 (EST)

branch: externals/beardbolt
commit 19161796720b3cff3b1e7f3424d39cec2c37e3ef
Author: Liam Powell <liam@liampwll.com>
Commit: Liam Powell <liam@liampwll.com>

    Add support for Zig
---
 doc/rmsbolt.org      |  4 ++++
 rmsbolt.el           | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 starters/rmsbolt.zig | 24 ++++++++++++++++++++++++
 3 files changed, 77 insertions(+)

diff --git a/doc/rmsbolt.org b/doc/rmsbolt.org
index a386378e99..e604d53814 100644
--- a/doc/rmsbolt.org
+++ b/doc/rmsbolt.org
@@ -170,6 +170,10 @@ Emacs 26 or the ~cl-print~ package are required.
 No support for source->asm matching or filtering. Only ~sbcl~ and ~clisp~
 supported at the moment, with ~sbcl~ giving much better results.
 
+** Zig
+
+Assembly is generated through the ~zig~ compiler.
+
 * Integrations
 This section covers integrations that RMSbolt provides, which make it easier to
 use RMSbolt with complex projects with many dependencies.
diff --git a/rmsbolt.el b/rmsbolt.el
index 404cc9ff7f..796917815f 100644
--- a/rmsbolt.el
+++ b/rmsbolt.el
@@ -617,6 +617,42 @@ https://github.com/derickr/vld";
       (rmsbolt--disassemble-file file-name (current-buffer))
       (rmsbolt--handle-finish-compile src-buffer nil :override-buffer 
(current-buffer)))))
 
+(cl-defun rmsbolt--zig-compile-cmd (&key src-buffer)
+  "Process a compile command for zig."
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((asm-format (buffer-local-value 'rmsbolt-asm-format src-buffer))
+          (predicted-asm-filename (shell-quote-argument
+                                   (concat (file-name-directory 
output-filename)
+                                           (file-name-as-directory "zig-cache")
+                                           (file-name-sans-extension 
(file-name-nondirectory (buffer-file-name)))
+                                           ".s")))
+          (disass (buffer-local-value 'rmsbolt-disassemble src-buffer))
+          (cmd (buffer-local-value 'rmsbolt-command src-buffer))
+          (cmd (mapconcat #'identity
+                          (list cmd
+                                "build-exe"
+                                src-filename
+                                "--emit"
+                                (if disass
+                                    "bin"
+                                  "asm")
+                                (when (and (not (booleanp asm-format))
+                                           (not disass))
+                                  (concat "-mllvm --x86-asm-syntax=" 
asm-format))
+                                (mapconcat #'identity
+                                           (cond
+                                            (disass
+                                             (list "--output" output-filename))
+                                            ((equal predicted-asm-filename 
output-filename)
+                                             nil)
+                                            (t
+                                             (list "&&" "mv"
+                                                   predicted-asm-filename
+                                                   output-filename)))
+                                           " "))
+                          " ")))
+     cmd)))
 
 ;;;;; Hidden Function Definitions
 
@@ -644,6 +680,13 @@ https://github.com/derickr/vld";
           ;; filter out any lowercase
           (and (1+ (1+ lower) (opt (or "64" "32" "8" "16")) (opt "_"))))
       eol))
+(defvar rmsbolt--hidden-func-zig
+  (rx bol (or (and "_" (0+ any))
+              (and (opt "de") "register_tm_clones")
+              "call_gmon_start"
+              "frame_dummy"
+              (and (0+ any) "@plt" (0+ any)))
+      eol))
 
 ;;;;; Language Integrations
 (defun rmsbolt--parse-compile-commands (comp-cmds file)
@@ -769,6 +812,12 @@ return t if successful."
                           :process-asm-custom-fn (lambda (_src-buffer lines)
                                                    lines)
                           :elisp-compile-override 
#'rmsbolt--elisp-compile-override))
+   (zig-mode
+    . ,(make-rmsbolt-lang :compile-cmd "zig"
+                          :supports-asm t
+                          :supports-disass t
+                          :objdumper 'objdump
+                          :compile-cmd-function #'rmsbolt--zig-compile-cmd))
    ))
 (make-obsolete-variable 'rmsbolt-languages
                         'rmsbolt-language-descriptor "RMSBolt-0.2")
diff --git a/starters/rmsbolt.zig b/starters/rmsbolt.zig
new file mode 100644
index 0000000000..1cfa66bd54
--- /dev/null
+++ b/starters/rmsbolt.zig
@@ -0,0 +1,24 @@
+const std = @import("std");
+
+// Zig rmsbolt starter file
+
+// Local Variables:
+// rmsbolt-command: "zig"
+// rmsbolt-disassemble: nil
+// End:
+
+fn isRMS(a: u8) u8 {
+    switch (a) {
+        'R' => {return 1;},
+        'M' => {return 2;},
+        'S' => {return 3;},
+        else => {return 0;},
+    }
+}
+
+pub fn main() void {
+    const a: u8 = 1 + 1;
+    if (isRMS(a) != 0) {
+        std.debug.warn("{c}\n", a);
+    }
+}



reply via email to

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