105 lines
3.3 KiB
Common Lisp
105 lines
3.3 KiB
Common Lisp
(defparameter *root-dir* (make-pathname :directory '(:relative)))
|
|
|
|
(defun make-relative (path)
|
|
(let ((dir (pathname-directory path)))
|
|
(make-pathname :directory (append '(:relative) (nthcdr (position "src" dir :test #'string=) dir))
|
|
:defaults path)))
|
|
|
|
(defun get-source-paths (path)
|
|
(directory (merge-pathnames path *root-dir*)))
|
|
|
|
(defun default-files ()
|
|
(get-source-paths
|
|
(make-pathname :directory '(:relative "src")
|
|
:name :wild
|
|
:type "cpp")))
|
|
|
|
(defun software-renderer ()
|
|
(get-source-paths
|
|
(make-pathname :directory '(:relative "src" "Backends" "Rendering")
|
|
:name "Software"
|
|
:type "cpp")))
|
|
|
|
(defun x11-platform ()
|
|
(get-source-paths
|
|
(make-pathname :directory '(:relative "src" "Backends" "Platform")
|
|
:name "X11"
|
|
:type "cpp")))
|
|
|
|
(defun x11-window ()
|
|
(get-source-paths
|
|
(make-pathname :directory '(:relative "src" "Backends" "Rendering" "Window" "Software")
|
|
:name "X11"
|
|
:type "cpp")))
|
|
|
|
(defun solaris-audio ()
|
|
(get-source-paths
|
|
(make-pathname :directory '(:relative "src" "Backends" "Audio" "SoftwareMixer")
|
|
:name "Solaris"
|
|
:type "cpp")))
|
|
|
|
(defun null-audio ()
|
|
(get-source-paths
|
|
(make-pathname :directory '(:relative "src" "Backends" "Audio")
|
|
:name "Null"
|
|
:type "cpp")))
|
|
|
|
(defun software-mixer ()
|
|
(get-source-paths
|
|
(make-pathname :directory '(:relative "src" "Backends" "Audio")
|
|
:name "SoftwareMixer"
|
|
:type "cpp")))
|
|
|
|
(defun null-controller ()
|
|
(get-source-paths
|
|
(make-pathname :directory '(:relative "src" "Backends" "Controller")
|
|
:name "Null"
|
|
:type "cpp")))
|
|
|
|
(defun get-sources ()
|
|
(append
|
|
(software-renderer)
|
|
;;(software-mixer)
|
|
(x11-platform)
|
|
(null-controller)
|
|
(x11-window)
|
|
(null-audio)
|
|
(default-files)))
|
|
|
|
(defun get-build-path (path)
|
|
(let ((dir (pathname-directory path)))
|
|
(make-pathname :directory (append '(:relative "build")
|
|
(nthcdr (position "src" dir :test #'string=) dir))
|
|
:type "o"
|
|
:defaults path)))
|
|
|
|
(defun make-compile-command (file)
|
|
(let ((str
|
|
(format nil "g++ -O2 -c $< -o $@"
|
|
;(namestring (make-relative file))
|
|
;(get-build-path file)
|
|
)))
|
|
(when (string-equal "Bitmap" (pathname-name file))
|
|
(setf str (format nil "~A -I./fakes/" str)))
|
|
(format nil "~A: ~A~%~C~A~%~%"
|
|
(get-build-path file)
|
|
(namestring (make-relative file))
|
|
#\Tab
|
|
str)))
|
|
|
|
(defun make-link-command (sources)
|
|
(format nil "CSE2: ~{~A ~}~%~Cg++ -O2 -o $@ $^ -lX11 -lXext -lm~%"
|
|
(mapcar 'get-build-path sources)
|
|
#\Tab))
|
|
|
|
(defun make-build-script (output-path)
|
|
(with-open-file (stream output-path :direction :output :if-exists :supersede :if-does-not-exist :create)
|
|
(setf *root-dir* (make-pathname :directory '(:relative)))
|
|
;;(format stream "#!/bin/sh~%~%")
|
|
(let ((sources (get-sources)))
|
|
(loop :for file :in sources
|
|
:for build-path := (get-build-path file)
|
|
)
|
|
(dolist (file sources)
|
|
(write-string (make-compile-command file) stream))
|
|
(write-string (make-link-command sources) stream))))
|