From d4b77760fea1a55c3673d405879f4c20bff941de Mon Sep 17 00:00:00 2001 From: Mars Ultor Date: Sun, 21 Dec 2025 15:53:51 -0600 Subject: [PATCH] boilerplate's boilerplate --- .gitmodules | 15 ++++++ CMakeLists.txt | 123 ++++++++++++++++++++++++++++++++++++++++++ external/glad | 1 + external/glm | 1 + external/spdlog | 1 + external/stb | 1 + external/tomlplusplus | 1 + src/main.cpp | 4 ++ 8 files changed, 147 insertions(+) create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 160000 external/glad create mode 160000 external/glm create mode 160000 external/spdlog create mode 160000 external/stb create mode 160000 external/tomlplusplus create mode 100644 src/main.cpp diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f43254f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,15 @@ +[submodule "external/tomlplusplus"] + path = external/tomlplusplus + url = https://github.com/marzer/tomlplusplus +[submodule "external/spdlog"] + path = external/spdlog + url = https://github.com/gabime/spdlog +[submodule "external/glad"] + path = external/glad + url = https://github.com/Dav1dde/glad +[submodule "external/glm"] + path = external/glm + url = https://github.com/g-truc/glm +[submodule "external/stb"] + path = external/stb + url = https://github.com/nothings/stb diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6593397 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,123 @@ +cmake_minimum_required(VERSION 3.20) + +# ----------------------------- +# Force Clang before project() +# ----------------------------- +if(NOT DEFINED CMAKE_C_COMPILER) + set(CMAKE_C_COMPILER clang CACHE STRING "" FORCE) +endif() +if(NOT DEFINED CMAKE_CXX_COMPILER) + set(CMAKE_CXX_COMPILER clang++ CACHE STRING "" FORCE) +endif() + +# ----------------------------- +# Project setup +# ----------------------------- +project(exalock LANGUAGES C CXX) +set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +# ----------------------------- +# Vendored dependencies (submodules) +# ----------------------------- +add_subdirectory(external/spdlog) +add_subdirectory(external/tomlplusplus) +add_subdirectory(external/glm) + +# stb is header-only +add_library(stb INTERFACE) +target_include_directories(stb INTERFACE external/stb) + +# ----------------------------- +# GLAD (official CMake integration) +# ----------------------------- +add_subdirectory(external/glad/cmake) + +# For OpenGL ES 2.0: +glad_add_library(glad_gles2 STATIC API gles2=2.0) + +# For desktop OpenGL 3.3 core profile, you could use: +# glad_add_library(glad_gl33 STATIC API gl:core=3.3) + +# ----------------------------- +# System dependencies (ABI-bound) +# ----------------------------- +find_package(PkgConfig REQUIRED) + +pkg_check_modules(WAYLAND REQUIRED + wayland-client + wayland-egl +) +pkg_check_modules(EGL REQUIRED egl) +pkg_check_modules(GLES REQUIRED glesv2) +pkg_check_modules(XKB REQUIRED xkbcommon) +pkg_check_modules(PAM REQUIRED pam) +pkg_check_modules(FREETYPE REQUIRED freetype2) +pkg_check_modules(HARFBUZZ REQUIRED harfbuzz) +pkg_check_modules(FONTCONFIG REQUIRED fontconfig) + +# ----------------------------- +# Executable +# ----------------------------- +add_executable(${PROJECT_NAME} src/main.cpp) + +# ----------------------------- +# Auto-discover other source files +# ----------------------------- +file(GLOB_RECURSE ALL_CPP "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") +list(REMOVE_ITEM ALL_CPP "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp") +target_sources(${PROJECT_NAME} PRIVATE ${ALL_CPP}) + +# ----------------------------- +# Include directories +# ----------------------------- +target_include_directories(${PROJECT_NAME} PRIVATE + src + ${WAYLAND_INCLUDE_DIRS} + ${EGL_INCLUDE_DIRS} + ${GLES_INCLUDE_DIRS} + ${XKB_INCLUDE_DIRS} + ${PAM_INCLUDE_DIRS} + ${FREETYPE_INCLUDE_DIRS} + ${HARFBUZZ_INCLUDE_DIRS} + ${FONTCONFIG_INCLUDE_DIRS} +) + +# ----------------------------- +# Link libraries +# ----------------------------- +target_link_libraries(${PROJECT_NAME} PRIVATE + spdlog::spdlog + tomlplusplus::tomlplusplus + glm::glm + stb + glad_gles2 + ${WAYLAND_LIBRARIES} + ${EGL_LIBRARIES} + ${GLES_LIBRARIES} + ${XKB_LIBRARIES} + ${PAM_LIBRARIES} + ${FREETYPE_LIBRARIES} + ${HARFBUZZ_LIBRARIES} + ${FONTCONFIG_LIBRARIES} +) + +# ----------------------------- +# Compiler warnings +# ----------------------------- +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall + -Wextra + -Wpedantic + -Wconversion + -Wshadow + -Wnull-dereference + -Wdouble-promotion + ) +endif() diff --git a/external/glad b/external/glad new file mode 160000 index 0000000..27bed11 --- /dev/null +++ b/external/glad @@ -0,0 +1 @@ +Subproject commit 27bed1181560211b55e39a9b132fef8c5846aae5 diff --git a/external/glm b/external/glm new file mode 160000 index 0000000..8f6213d --- /dev/null +++ b/external/glm @@ -0,0 +1 @@ +Subproject commit 8f6213d379a904f5ae910e09a114e066e25faf57 diff --git a/external/spdlog b/external/spdlog new file mode 160000 index 0000000..0209b12 --- /dev/null +++ b/external/spdlog @@ -0,0 +1 @@ +Subproject commit 0209b12c502bbdd37e04d238d74af851457e8210 diff --git a/external/stb b/external/stb new file mode 160000 index 0000000..f1c79c0 --- /dev/null +++ b/external/stb @@ -0,0 +1 @@ +Subproject commit f1c79c02822848a9bed4315b12c8c8f3761e1296 diff --git a/external/tomlplusplus b/external/tomlplusplus new file mode 160000 index 0000000..e7aaccc --- /dev/null +++ b/external/tomlplusplus @@ -0,0 +1 @@ +Subproject commit e7aaccca3fa3dbde9818ab8313250f3da4976e37 diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..93d55bf --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,4 @@ +int main (int argc, char *argv[]) { + + return 0; +}