Skip to content

Commit ade6c56

Browse files
committed
Added CI workflow and CmakePresets.json
1 parent eff74b3 commit ade6c56

File tree

7 files changed

+339
-49
lines changed

7 files changed

+339
-49
lines changed

.github/workflows/ci.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: CI
2+
3+
on: [push, pull_request]
4+
5+
defaults:
6+
run:
7+
shell: bash
8+
9+
jobs:
10+
build:
11+
name: ${{ matrix.platform.name }} ${{ matrix.config.name }}
12+
runs-on: ${{ matrix.platform.os }}
13+
14+
strategy:
15+
fail-fast: false
16+
matrix:
17+
platform:
18+
- { name: Windows VS2022, os: windows-2022 }
19+
- { name: Linux GCC, os: ubuntu-latest }
20+
- {
21+
name: Linux Clang,
22+
os: ubuntu-latest,
23+
flags: -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++,
24+
}
25+
- { name: macOS, os: macos-latest }
26+
config:
27+
- { name: Shared, flags: -DBUILD_SHARED_LIBS=TRUE }
28+
- { name: Static, flags: -DBUILD_SHARED_LIBS=FALSE }
29+
30+
steps:
31+
- name: Install Linux Dependencies
32+
if: runner.os == 'Linux'
33+
run: sudo apt-get update && sudo apt-get install libxrandr-dev libxcursor-dev libxi-dev libudev-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libfreetype-dev
34+
35+
- name: Checkout
36+
uses: actions/checkout@v4
37+
38+
- name: Configure
39+
run: cmake -B build ${{matrix.platform.flags}} ${{matrix.config.flags}}
40+
41+
- name: Build
42+
run: cmake --build build --config Release

.gitmodules

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
[submodule "vendor/imgui-sfml"]
2-
path = vendor/SFML
2+
path = vendor/imgui-sfml
33
url = https://github.com/SFML/imgui-sfml.git
44
[submodule "vendor/imgui"]
55
path = vendor/imgui
66
url = [email protected]:ocornut/imgui.git
7-
[submodule "vendor/imgui-sfml"]
8-
path = vendor/SFML
9-
url = https://github.com/SFML/SFML.git
107
[submodule "vendor/sfml"]
118
path = vendor/sfml
12-
url = [email protected]:sfml/sfml.git
9+
url = [email protected]:sfml/sfml.git

.vscode/tasks.json

Whitespace-only changes.

CMakeLists.txt

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
cmake_minimum_required(VERSION 3.16...4.1.1 FATAL_ERROR)
2+
3+
#--------------------------------------------------------------------
4+
# Project and version.
5+
#--------------------------------------------------------------------
6+
7+
set (TEMPLATE_VERSION_MAJOR 0)
8+
set (TEMPLATE_VERSION_MINOR 1)
9+
set (TEMPLATE_VERSION_PATCH 0)
10+
set (TEMPLATE_VERSION_STRING ${TEMPLATE_VERSION_MAJOR}.${TEMPLATE_VERSION_MINOR}.${TEMPLATE_VERSION_PATCH})
11+
12+
project(SFMLTem
13+
VERSION ${TEMPLATE_VERSION_STRING}
14+
DESCRIPTION "SFML Starter Template C/C++"
15+
HOMEPAGE_URL "https://github.com/djoezeke/SFMLTem"
16+
LANGUAGES CXX
17+
)
18+
19+
#--------------------------------------------------------------------
20+
# Preparations depending on the specified build options
21+
#--------------------------------------------------------------------
22+
23+
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
24+
set(TEMPLATE_IS_TOP_LEVEL ON)
25+
else()
26+
set(TEMPLATE_IS_TOP_LEVEL OFF)
27+
endif()
28+
29+
#--------------------------------------------------------------------
30+
# Configure variables
31+
#--------------------------------------------------------------------
32+
33+
set(TEMPLATE_EXE_NAME ${PROJECT_NAME} CACHE STRING "Base name of executable output name")
34+
set(TEMPLATE_LIB_NAME ${PROJECT_NAME} CACHE STRING "Base name of library output name")
35+
36+
set(TEMPLATE_SOURCE_DIR "src" )
37+
set(TEMPLATE_TESTS_DIR "tests")
38+
set(TEMPLATE_INCLUDE_DIR "include")
39+
40+
set(TEMPLATE_SOURCE_FILES "src/main.cpp")
41+
42+
set(TEMPLATE_EXE_TARGET_NAME ${TEMPLATE_EXE_NAME})
43+
set(TEMPLATE_LIB_TARGET_NAME ${TEMPLATE_LIB_NAME})
44+
45+
option(TEMPLATE_ENABLE_DEBUG "Enable debug build" OFF)
46+
option(TEMPLATE_ENABLE_WARNINGS "Enable compiler warnings" OFF)
47+
option(TEMPLATE_BUILD_TESTS "Build the ${PROJECT_NAME} test programs" ${TEMPLATE_IS_TOP_LEVEL})
48+
49+
# Set required C/C++ standard
50+
set(CMAKE_CXX_STANDARD 17)
51+
set(CMAKE_CXX_EXTENTIONS OFF)
52+
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
53+
54+
set(SFML_BUILD_TEST_SUITE OFF CACHE BOOL "" FORCE)
55+
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
56+
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
57+
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
58+
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
59+
60+
#--------------------------------------------------------------------
61+
# Apply Microsoft C runtime library option
62+
# This is here because it also applies to tests and examples
63+
#--------------------------------------------------------------------
64+
if (MSVC AND NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
65+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Release>:Release>")
66+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
67+
endif()
68+
69+
#--------------------------------------------------------------------
70+
# Configurations
71+
#--------------------------------------------------------------------
72+
73+
# Default to build type "Release" unless debug is enabled
74+
if(NOT CMAKE_BUILD_TYPE)
75+
if (NOT TEMPLATE_ENABLE_DEBUG)
76+
message(STATUS "No build type selected, default to Release")
77+
set(CMAKE_BUILD_TYPE "Release")
78+
else()
79+
message(STATUS "No build type selected but tests are being built, default to Debug")
80+
set(CMAKE_BUILD_TYPE "Debug")
81+
endif()
82+
endif()
83+
84+
# Add compiler warnings
85+
if(TEMPLATE_ENABLE_WARNINGS)
86+
if(MSVC)
87+
set(COMPILER_WARNINGS /WX /W4 /permissive-)
88+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)")
89+
set(COMPILER_WARNINGS -Werror -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wsign-conversion)
90+
endif()
91+
endif()
92+
93+
# Output directories for a build tree
94+
if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
95+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
96+
endif()
97+
98+
#--------------------------------------------------------------------
99+
# Add Subdirectories
100+
#--------------------------------------------------------------------
101+
102+
# Add the subdirectories for the libraries
103+
add_subdirectory(vendor)
104+
105+
# Build the test apps
106+
if(TEMPLATE_BUILD_TESTS)
107+
include(CTest)
108+
enable_testing()
109+
add_subdirectory(${TEMPLATE_TESTS_DIR})
110+
111+
# Set the unit test app project as the Visual Studio startup project
112+
# if the target compiler is some version of Microsoft Visual C++ and
113+
# if this project is the main project.
114+
if(MSVC AND CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
115+
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT "${PROJECT_NAME}Test")
116+
endif()
117+
endif()
118+
119+
#--------------------------------------------------------------------
120+
# Build targets
121+
#--------------------------------------------------------------------
122+
123+
# Add executable
124+
add_executable("${TEMPLATE_EXE_TARGET_NAME}" "src/main.cpp")
125+
126+
if (CMAKE_VERSION VERSION_GREATER 3.12)
127+
set_property(TARGET "${TEMPLATE_EXE_TARGET_NAME}" PROPERTY CXX_STANDARD 20)
128+
endif()
129+
130+
# target_link_libraries (
131+
# "${TEMPLATE_EXE_TARGET_NAME}"
132+
# sfml-system sfml-window sfml-graphics sfml-network sfml-audio
133+
# ImGui-SFML::ImGui-SFML
134+
# )
135+
# target_link_libraries (
136+
# "${TEMPLATE_EXE_TARGET_NAME}"
137+
# sfml-graphics ImGui-SFML::ImGui-SFML
138+
# )
139+
140+
target_link_libraries("${TEMPLATE_EXE_TARGET_NAME}" PRIVATE SFML::Graphics)
141+
142+
# set_property(TARGET "${TEMPLATE_EXE_TARGET_NAME}" PROPERTY CXX_STANDARD 17)
143+
# # target_include_directories(${TEMPLATE_EXE_TARGET_NAME}
144+
# # PUBLIC
145+
# # $<BUILD_INTERFACE:"${CMAKE_CURRENT_SOURCE_DIR}/${TEMPLATE_INCLUDE_DIR}">
146+
# # )
147+
148+
# # MY_SOURCES is defined to be a list of all the source files for my game
149+
# file(GLOB_RECURSE TEMPLATE_SOURCE_FILES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
150+
151+
152+
# target_sources("${TEMPLATE_EXE_TARGET_NAME}" PRIVATE ${TEMPLATE_SOURCE_FILES})
153+
# target_compile_definitions("${TEMPLATE_EXE_TARGET_NAME}" PUBLIC GLFW_INCLUDE_NONE=1)
154+
# # target_include_directories("${TEMPLATE_EXE_TARGET_NAME}" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include/")
155+
# target_link_libraries("${TEMPLATE_EXE_TARGET_NAME}" imgui-sfml imgui sfml)
156+
157+
# Add Library

CMakePresets.json

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"version": 3,
3+
"configurePresets": [
4+
{
5+
"name": "windows-base",
6+
"hidden": true,
7+
"generator": "Ninja",
8+
"binaryDir": "${sourceDir}/out/build/${presetName}",
9+
"installDir": "${sourceDir}/out/install/${presetName}",
10+
"cacheVariables": {
11+
"CMAKE_C_COMPILER": "cl.exe",
12+
"CMAKE_CXX_COMPILER": "cl.exe",
13+
"BUILD_SHARED_LIBS": "OFF"
14+
},
15+
"condition": {
16+
"type": "equals",
17+
"lhs": "${hostSystemName}",
18+
"rhs": "Windows"
19+
}
20+
},
21+
{
22+
"name": "x64-debug",
23+
"displayName": "x64 Debug",
24+
"inherits": "windows-base",
25+
"architecture": {
26+
"value": "x64",
27+
"strategy": "external"
28+
},
29+
"cacheVariables": {
30+
"CMAKE_BUILD_TYPE": "Debug"
31+
}
32+
},
33+
{
34+
"name": "x64-release",
35+
"displayName": "x64 Release",
36+
"inherits": "x64-debug",
37+
"cacheVariables": {
38+
"CMAKE_BUILD_TYPE": "Release"
39+
}
40+
},
41+
{
42+
"name": "x86-debug",
43+
"displayName": "x86 Debug",
44+
"inherits": "windows-base",
45+
"architecture": {
46+
"value": "x86",
47+
"strategy": "external"
48+
},
49+
"cacheVariables": {
50+
"CMAKE_BUILD_TYPE": "Debug"
51+
}
52+
},
53+
{
54+
"name": "x86-release",
55+
"displayName": "x86 Release",
56+
"inherits": "x86-debug",
57+
"cacheVariables": {
58+
"CMAKE_BUILD_TYPE": "Release"
59+
}
60+
}
61+
]
62+
}

0 commit comments

Comments
 (0)