diff --git a/manual-build-maker.lisp b/manual-build-maker.lisp new file mode 100644 index 00000000..1a6207bf --- /dev/null +++ b/manual-build-maker.lisp @@ -0,0 +1,99 @@ +(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 ~A -o ~A" + (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 "echo ~A~%~A~%" str str))) + +(defun make-link-command (sources) + (format nil "echo Linking.~%g++ -O2 -o CSE2 ~{~A ~}-lX11 -lm~%" + (mapcar 'get-build-path sources))) + +(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))))