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

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

[elpa] externals/beardbolt 43f0eac016 004/323: Add support for changing


From: ELPA Syncer
Subject: [elpa] externals/beardbolt 43f0eac016 004/323: Add support for changing compiler and flags
Date: Thu, 9 Mar 2023 10:57:48 -0500 (EST)

branch: externals/beardbolt
commit 43f0eac016f2d09531fdf03962bbc1768a840cc5
Author: Jay Kamat <jaygkamat@gmail.com>
Commit: Jay Kamat <jaygkamat@gmail.com>

    Add support for changing compiler and flags
---
 README.org |  2 ++
 rmsbolt.el | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 54 insertions(+), 5 deletions(-)

diff --git a/README.org b/README.org
index 11bd429529..e041f7da80 100644
--- a/README.org
+++ b/README.org
@@ -9,3 +9,5 @@ A basic implementation of the 
[[https://github.com/mattgodbolt/compiler-explorer
 - Compilation runs entirely on your machine
 - Faster results
 - Infinitely hackable!
+- Write your code in your preferred editing environment
+- Runs entirely with 0 js
diff --git a/rmsbolt.el b/rmsbolt.el
index e1b8505334..2a9aef760d 100644
--- a/rmsbolt.el
+++ b/rmsbolt.el
@@ -41,11 +41,41 @@
   "Shell rmsbolt will use to split paths.")
 (defvar rmsbolt-output-buffer "*rmsbolt-output*")
 
-(defvar rmsbolt-output-filename "rmsbolt.s")
+(defun rmsbolt-output-filename ()
+  (expand-file-name "rmsbolt.s" rmsbolt-temp-dir))
 (defvar rmsbolt-hide-compile t)
 (defvar rmsbolt-intel-x86 t)
 (defvar rmsbolt-filter-asm-directives t)
 
+;;;; Classes
+
+(cl-defstruct (rmsbolt-options
+               (:conc-name rmsbolt-o-))
+  (compile-cmd
+   ""
+   :type string
+   :documentation "The command used to compile this file")
+  )
+
+(cl-defstruct (rmsbolt-lang
+               (:conc-name rmsbolt-l-))
+  (options
+   nil
+   :type 'rmsbolt-options
+   :documentation "The default options object to use.")
+  (mode
+   'fundamental-mode
+   :type 'symbol
+   :documentation "The mode to activate this language in."))
+
+(defvar rmsbolt-languages
+  `((c-mode .
+            ,(make-rmsbolt-lang :mode 'c-mode
+                                :options (make-rmsbolt-options
+                                          :compile-cmd "gcc -g -O0")) )
+    ))
+
+
 ;;;; Macros
 
 (defmacro rmsbolt-with-display-buffer-no-window (&rest body)
@@ -80,13 +110,13 @@
 
     (with-current-buffer (get-buffer-create rmsbolt-output-buffer)
       (cond ((not compilation-fail)
-             (if (not (file-exists-p rmsbolt-output-filename))
+             (if (not (file-exists-p (rmsbolt-output-filename)))
                  (message "Error reading from output file.")
                (delete-region (point-min) (point-max))
                (insert
                 (rmsbolt--process-asm-lines
                  (with-temp-buffer
-                   (insert-file-contents rmsbolt-output-filename)
+                   (insert-file-contents (rmsbolt-output-filename))
                    (split-string (buffer-string) "\n" t))))
                (asm-mode)
                (display-buffer (current-buffer))))
@@ -94,15 +124,32 @@
              ;; Display compilation output
              (display-buffer buffer))))))
 
+(defun rmsbolt--get-cmd ()
+  "Gets the rms command from the buffer, if available."
+  (save-excursion
+    (goto-char (point-min))
+    (re-search-forward (rx "RMS:" (1+ space) (group (1+ (any "-" alnum 
space)))) nil t)
+    (match-string-no-properties 1)))
+(defun rmsbolt--parse-options ()
+  "Parse RMS options from file."
+  (let* ((lang (cdr-safe (assoc major-mode rmsbolt-languages)))
+         (options (copy-rmsbolt-options (rmsbolt-l-options lang)))
+         (cmd (rmsbolt--get-cmd)))
+    (when cmd
+      (setf (rmsbolt-ro-compile-cmd options) cmd))
+    options))
+
 (defun rmsbolt-compile ()
   "Compile the current rmsbolt buffer."
   (interactive)
   (save-some-buffers nil (lambda () rmsbolt-mode))
-  (let* ((cmd "gcc -O0")
+  (let* ((options (rmsbolt--parse-options))
+         (cmd (rmsbolt-o-compile-cmd options))
          (cmd (mapconcat 'identity
                          (list cmd
+                               "-g"
                                "-S" (buffer-file-name)
-                               "-o" rmsbolt-output-filename
+                               "-o" (rmsbolt-output-filename)
                                (when rmsbolt-intel-x86
                                  "-masm=intel"))
                          " ")))



reply via email to

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