changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > infra / autogen.lisp

changeset 264: 8015880d9a0d
parent: 6d526bd63943
child: fab40b02d833
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 16 Jun 2024 02:32:25 +0000
permissions: -rw-r--r--
description: sync
1 ;;; autogen.lisp --- Setup the current directory for
2 
3 ;; sbcl --core .stash/share/lisp/user.core --load autogen.lisp
4 
5 ;;; Code:
6 (in-package :std-user)
7 
8 (defpkg :infra/autogen
9  (:use :cl :skel :log :std/named-readtables
10  :dat/json :dat/sxp :net/fetch :net/util
11  :cli/progress :cli/ansi :cli/ed :cli/prompt
12  :cli/shell :std/hash-table :std/alien :std/macs
13  :std/fmt))
14 
15 (in-package :infra/autogen)
16 
17 (in-readtable :shell)
18 
19 (defparameter *profile* (uiop:read-file-forms
20  (if-let ((profile (sb-posix:getenv "INFRA_PROFILE")))
21  profile
22  #P"default.sxp")))
23 (defparameter *core* sb-ext:*core-pathname*)
24 (defparameter *host* (uiop:read-file-forms
25  (let ((hcfg (format nil "~a.sxp" (sb-unix:unix-gethostname))))
26  (unless (probe-file hcfg)
27  (print #0$./check.sh$#))
28  hcfg)))
29 
30 (defun gethost (k) (getf *host* k))
31 (defun getprofile (k) (getf *profile* k))
32 (init-skel-vars)
33 (setq *skel-project* (find-skelfile *default-pathname-defaults* :load t))
34 (defparameter *host-env* (let ((table (make-hash-table :test 'equal))
35  (keys (list "STASH" "STORE" "DIST" "PACKY_URL" "VC_URL" "INSTALL_PREFIX"
36  "CC" "AR" "HG" "GIT" "LISP" "RUST" "LD" "SHELL" "DEV" "DEV_HOME"
37  "DEV_ID" "WORKER" "WORKER_ID" "WORKER_HOME" "CARGO_HOME" "RUSTUP_HOME"
38  "LISP_HOME" "INFRA_PROFILE")))
39  (dolist (k keys table)
40  (setf (gethash k table) (sb-posix:getenv k)))))
41 (defun getenv (k) (gethash *host-env* k))
42 
43 (defun autogen ()
44  "Auto-generate the INFRA system."
45  (info! "starting autogen.lisp" sb-ext:*core-pathname*)
46  (terpri)
47  ;; print host, env, profile
48  (format t "core: ~A~%" *core*)
49  (terpri)
50  (println "host:")
51  (loop for (k v) on *host* by 'cddr
52  do (format t " ~A = ~A~%" k v))
53  (println "env:")
54  (loop for k being the hash-key
55  using (hash-value v) of *host-env*
56  do (format t " ~A = ~:A~%" k v))
57  (println "profile:")
58  (loop for (k v) on *profile* by 'cddr
59  do (format t " ~A = ~A~%" k v))
60  ;; fresh bootstrap
61  (sk-call* *skel-project* :clean :bootstrap))
62 
63 (defun build-default ()
64  (let ((rocksdb-builder (sb-thread:make-thread (lambda () (sk-call* *skel-project* :rocksdb))))
65  (sbcl-builder (sb-thread:make-thread (lambda () (sk-call* *skel-project* :sbcl :sbcl-shared))))
66  (operator-builder (sb-thread:make-thread (lambda () (sk-call* *skel-project* :archlinux :operator))))
67  (worker-builder (sb-thread:make-thread (lambda () (sk-call* *skel-project* :alpine :worker)))))
68  (std/thread:wait-for-threads
69  (list rocksdb-builder sbcl-builder operator-builder worker-builder))))
70 
71 ;;; *host*
72 ;; The host profile is generated automatically by 'check.sh'. After running
73 ;; the script you'll have a file HOST.sxp.
74 
75 ;;; *profile*
76 ;; The default profile is defined in 'default.sxp'. You can use that as a base
77 ;; configuration and override it with INFRA_PROFILE
78 
79 ;; (sb-ext:quit)
80 (unless (probe-file #p".stash")
81  (autogen))
82 
83 ;; (build-default)
84 
85 ;; (sb-ext:quit)
86