changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/lib/cli/tools/cc.lisp

changeset 698: 96958d3eb5b0
parent: 6359b351657a
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
1 ;;; cli/tools/cc.lisp --- C Compilers
2 
3 ;; Use C Compiler tooling from Lisp.
4 
5 ;;; Commentary:
6 
7 ;;
8 
9 ;;; Code:
10 (in-package :cli/tools/cc)
11 
12 (deferror cc-error (simple-error error) ())
13 
14 (defun cc-error (fmt &rest args)
15  (error 'cc-error :format-arguments args :format-control fmt))
16 
17 (defparameter *cc* (find-exe "clang"))
18 
19 (defparameter *ld*
20  (or
21  #+unix (find-exe "ld.lld")
22  #+darwin (find-exe "ld64.lld")
23  #+windows (find-exe "lld-link")
24  (find-exe "ld")))
25 
26 (defun run-cc (&rest args)
27  (let ((proc (sb-ext:run-program *cc* (or args nil) :output :stream)))
28  (with-open-stream (s (sb-ext:process-output proc))
29  (loop for l = (read-line s nil nil)
30  while l
31  do (write-line l)))
32  (if (eq 0 (sb-ext:process-exit-code proc))
33  nil
34  (cc-error "CC command failed: ~A ~A" *cc* (or args "")))))
35 
36 (defun run-ld (&rest args)
37  (let ((proc (sb-ext:run-program *ld* (or args nil) :output :stream)))
38  (with-open-stream (s (sb-ext:process-output proc))
39  (loop for l = (read-line s nil nil)
40  while l
41  do (write-line l)))
42  (if (eq 0 (sb-ext:process-exit-code proc))
43  nil
44  (cc-error "LD command failed: ~A ~A" *ld* (or args "")))))