Add assignment bootstrap script

master
John Montagu, the 4th Earl of Sandvich 2026-02-15 01:52:22 -08:00
parent 73317be9c9
commit 4cee90ee25
Signed by: sandvich
GPG Key ID: 9A39BE37E602B22D
4 changed files with 138 additions and 0 deletions

71
as-bootstrap.sh 100755
View File

@ -0,0 +1,71 @@
#!/bin/bash
set -euo pipefail
usage() {
echo "Usage: $0 [-b|--build] [-m|--make] <new-project-name>"
echo
echo "Options:"
echo " -m, --make After cmake, run 'make' inside the build directory (requires make)"
echo " -h, --help Show this help"
echo
echo "Example: $0 -b my_project"
exit 1
}
DO_MAKE=0
while [[ ${1:-} == -* ]]; do
case "$1" in
-m|--make) DO_MAKE=1; shift ;;
-h|--help) usage ;;
--) shift; break ;;
*) echo "Unknown option: $1" >&2; usage ;;
esac
done
if [ $# -ne 1 ]; then
usage
fi
raw_name="$1"
name="${raw_name#@}"
src="as_template"
dest="${name}"
if [ -e "$dest" ]; then
echo "Error: destination '$dest' already exists" >&2
exit 1
fi
echo "$0: COPY: $src -> $dest..."
cp -a -- "$src" "$dest"
echo "$0: MOVE: $src/as_template.cpp -> $dest/${name}.cpp..."
mv "$dest/as_template.cpp" "$dest/${name}.cpp"
echo "$0: REPLACE: 'as_template' -> '$name' in all files in $dest..."
sed -i "s/as_template/${name}/g" "$dest"/*
echo "Preparing build directory and running cmake..."
cd "$dest" && mkdir -p build && cd build && cmake ..
echo "CMake finished (see $dest/build)."
if [ "$DO_MAKE" -eq 1 ]; then
echo "Make option enabled. Building with make..."
if command -v nproc >/dev/null 2>&1; then
NPROCS=$(nproc)
elif getconf _NPROCESSORS_ONLN >/dev/null 2>&1; then
NPROCS=$(getconf _NPROCESSORS_ONLN)
else
NPROCS=1
fi
make -j"$NPROCS"
echo "Make finished."
fi
echo "Created new assignment '$dest'."
exit 0

View File

@ -0,0 +1,12 @@
cmake_minimum_required(VERSION 3.18)
project(as_template CXX)
set(CMAKE_CXX_STANDARD 20)
# adding this option to make clangd work
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_subdirectory(../raylib-cpp raylib)
add_executable(as_template as_template.cpp)
target_link_libraries(as_template PUBLIC raylib raylib_cpp)

View File

@ -0,0 +1,35 @@
# Building and Running
Clone the repository, navigate to the root of the project, and initialize the
submodules:
```sh
git clone https://github.com/humanoidsandvichdispenser/cs381.git
cd cs381
git submodule update --init --recursive
```
Navigate to the `as_template` directory, create a build directory, and run CMake to
generate the build files:
```sh
cd as_template
mkdir -p build
cd build
cmake ..
```
Compile the code using `make`:
```sh
make
```
This should create an executable named `as_template` in the `build` directory. You can
run the executable with the following command:
```sh
./as_template
```
# Instructions on how to use the program

View File

@ -0,0 +1,20 @@
#include "Color.hpp"
#include "raylib.h"
#include <raylib-cpp.hpp>
int main() {
raylib::Window window(800, 600, "CS381 - Assignment 0");
window.SetState(FLAG_WINDOW_RESIZABLE);
window.SetTargetFPS(60); // save cpu cycles
while (!window.ShouldClose()) {
window.BeginDrawing();
window.ClearBackground(raylib::Color::RayWhite());
window.EndDrawing();
}
return 0;
}