diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a2a42a..cab6456 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,39 +1,71 @@ cmake_minimum_required(VERSION 3.28) project(Prog3B) -set(EXECUTABLE_NAME Prog3B) -set(OS_NAME windows) + +# Set C++ standard to C++20 +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) # Generate compile_commands.json set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_CXX_STANDARD 20) # Set the default build type if not specified if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) endif() -set(SRC_FILES - ${CMAKE_CURRENT_LIST_DIR}/main.cpp - ${CMAKE_CURRENT_LIST_DIR}/gamecube.cpp -) +# --- Sources & Include directories --- +# Automatically include all .cpp files in the src/ folder +file(GLOB SRC_FILES "src/*.cpp") +# Include directories for header files set(INCLUDE_DIRS - ${CMAKE_CURRENT_LIST_DIR}/linux + ${CMAKE_CURRENT_LIST_DIR}/includes + ${CMAKE_CURRENT_LIST_DIR}/raylib ) -add_executable(${EXECUTABLE_NAME} ${SRC_FILES}) -target_include_directories(${EXECUTABLE_NAME} PRIVATE ${INCLUDE_DIRS}) -target_link_libraries(${EXECUTABLE_NAME} PRIVATE - ${CMAKE_CURRENT_LIST_DIR}/${OS_NAME}/libgamematrix.a - ${CMAKE_CURRENT_LIST_DIR}/${OS_NAME}/libraylib.a -) +# Create the executable target +add_executable(${PROJECT_NAME} ${SRC_FILES}) + +# Add include directories to the target +target_include_directories(${PROJECT_NAME} PRIVATE ${INCLUDE_DIRS}) + + +# --- Automatic platform detection --- if (WIN32) - target_link_libraries(Prog3B PRIVATE winmm) -endif() + # Windows build + message(STATUS "Building for Windows...") + target_link_libraries(${PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/windows/libgamematrix.a + ${CMAKE_CURRENT_LIST_DIR}/windows/libraylib.a + winmm # Windows multimedia library required by Raylib + ) -# Checks if OSX and links appropriate frameworks (Only required on MacOS) -if (APPLE) - target_link_libraries(Prog3B "-framework IOKit") - target_link_libraries(Prog3B "-framework Cocoa") - target_link_libraries(Prog3B "-framework OpenGL") +elseif(APPLE) + # macOS build + message(STATUS "Building for macOS...") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64") + set(OS_FOLDER "mac_arm") + else() + set(OS_FOLDER "mac_x86") + endif() + target_link_libraries(${PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/${OS_FOLDER}/libgamematrix.a + ${CMAKE_CURRENT_LIST_DIR}/${OS_FOLDER}/libraylib.a + "-framework IOKit" # For device input + "-framework Cocoa" # For windows/UI + "-framework OpenGL" # For rendering + ) + +elseif(UNIX) + # Linux build + message(STATUS "Building for Linux...") + target_link_libraries(${PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/linux/libgamematrix.a + ${CMAKE_CURRENT_LIST_DIR}/linux/libraylib.a + m pthread dl # Standard Linux libraries + ) + +else() + # Unsupported OS + message(FATAL_ERROR "Unsupported operating system.") endif() diff --git a/gamecube.h b/includes/gamecube.h similarity index 97% rename from gamecube.h rename to includes/gamecube.h index bbe0028..4d4957c 100644 --- a/gamecube.h +++ b/includes/gamecube.h @@ -1,7 +1,7 @@ #pragma once #include "gamematrix.h" #include "raylib.h" -#include +#include "rlgl.h" struct Vec3 { diff --git a/gamematrix.h b/includes/gamematrix.h similarity index 100% rename from gamematrix.h rename to includes/gamematrix.h diff --git a/gamecube.cpp b/src/gamecube.cpp similarity index 100% rename from gamecube.cpp rename to src/gamecube.cpp diff --git a/main.cpp b/src/main.cpp similarity index 98% rename from main.cpp rename to src/main.cpp index 287251d..650003f 100644 --- a/main.cpp +++ b/src/main.cpp @@ -1,4 +1,4 @@ -#include "gamecube.h" +#include "../../prog_3/includes/gamecube.h" #include #include