diff --git a/as-bootstrap.sh b/as-bootstrap.sh new file mode 100755 index 0000000..8402f32 --- /dev/null +++ b/as-bootstrap.sh @@ -0,0 +1,71 @@ +#!/bin/bash +set -euo pipefail + +usage() { + echo "Usage: $0 [-b|--build] [-m|--make] " + 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 diff --git a/as_template/CMakeLists.txt b/as_template/CMakeLists.txt new file mode 100644 index 0000000..d77058e --- /dev/null +++ b/as_template/CMakeLists.txt @@ -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) diff --git a/as_template/README.md b/as_template/README.md new file mode 100644 index 0000000..62b7bf0 --- /dev/null +++ b/as_template/README.md @@ -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 diff --git a/as_template/as_template.cpp b/as_template/as_template.cpp new file mode 100644 index 0000000..f98e8db --- /dev/null +++ b/as_template/as_template.cpp @@ -0,0 +1,20 @@ +#include "Color.hpp" +#include "raylib.h" +#include + +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; +}