Skip to content

Commit 2266ada

Browse files
committed
feat: move logic into CLIBNGPlugin.cmake
1 parent 8bf3ef0 commit 2266ada

10 files changed

+410
-272
lines changed

Diff for: CMakeLists.txt

+55-141
Original file line numberDiff line numberDiff line change
@@ -1,166 +1,80 @@
11
cmake_minimum_required(VERSION 3.26)
22

3-
SET(PROJECT_AUTHOR "FlayaN")
3+
set(PROJECT_AUTHOR "FlayaN")
44
project(
5-
commonlibsse-ng-submodule-template
6-
VERSION 0.0.1
7-
LANGUAGES CXX
8-
)
5+
commonlibsse-ng-submodule-template
6+
VERSION 0.0.1
7+
LANGUAGES CXX)
98

10-
# ########################################################################################################################
11-
# ## Source build guard
12-
# ########################################################################################################################
9+
# ##############################################################################
10+
# # Source build guard
11+
# ##############################################################################
1312

1413
if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
15-
message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there.")
14+
message(
15+
FATAL_ERROR
16+
"In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there."
17+
)
1618
endif()
1719

18-
# ########################################################################################################################
19-
# ## Build options
20-
# ########################################################################################################################
20+
# ##############################################################################
21+
# # Add CommonLibNG plugin
22+
# ##############################################################################
2123

22-
macro(set_from_environment VARIABLE)
23-
if (NOT DEFINED ${VARIABLE} AND DEFINED ENV{${VARIABLE}})
24-
set(${VARIABLE} $ENV{${VARIABLE}})
25-
endif ()
26-
endmacro()
24+
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
25+
include(CLIBNGPlugin)
26+
add_simple_commonlibsse_ng_plugin(AUTHOR "${PROJECT_AUTHOR}" LICENSE
27+
"MIT License")
2728

28-
set_from_environment(OUTPUT_DIRS)
29+
# ##############################################################################
30+
# # Build options
31+
# ##############################################################################
2932

3033
message("Options:")
31-
option(COPY_BUILD "Copy the build output to the Skyrim directory, also need OUTPUT_DIRS" OFF)
3234
option(ZIP_TO_DIST "Zip the mod to 7z file in dist." ON)
33-
message("\tCopy build output: ${COPY_BUILD}")
34-
message("\t\tCopy build output path OUTPUT_DIRS: ${OUTPUT_DIRS}")
3535
message("\tZip to dist: ${ZIP_TO_DIST}")
3636

37-
# #######################################################################################################################
38-
# # Add CMake features
39-
# #######################################################################################################################
40-
41-
configure_file(
42-
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Plugin.h.in
43-
${CMAKE_CURRENT_BINARY_DIR}/cmake/Plugin.h
44-
@ONLY
45-
)
46-
47-
configure_file(
48-
${CMAKE_CURRENT_SOURCE_DIR}/cmake/Version.rc.in
49-
${CMAKE_CURRENT_BINARY_DIR}/cmake/version.rc
50-
@ONLY
51-
)
52-
53-
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
54-
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
55-
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG OFF)
56-
set(CommonLibPath "extern/CommonLibSSE-NG")
57-
58-
# #######################################################################################################################
37+
# ##############################################################################
5938
# # Find dependencies
60-
# #######################################################################################################################
39+
# ##############################################################################
6140

6241
find_path(CLIB_UTIL_INCLUDE_DIRS "ClibUtil/detail/SimpleIni.h")
6342

64-
# #######################################################################################################################
65-
# # CommonLibSSE-NG Plugin
66-
# #######################################################################################################################
67-
68-
include(${CommonLibPath}/cmake/CommonLibSSE.cmake)
69-
add_subdirectory(${CommonLibPath})
70-
add_commonlibsse_plugin(
71-
${PROJECT_NAME}
72-
AUTHOR ${PROJECT_AUTHOR}
73-
SOURCES ${INCLUDE_HEADERS} ${SOURCE_HEADERS} ${SOURCES}
74-
)
75-
76-
# #######################################################################################################################
77-
# # Headers and sources
78-
# #######################################################################################################################
79-
80-
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/AddCXXFiles.cmake)
81-
add_cxx_files("${PROJECT_NAME}")
82-
83-
# #######################################################################################################################
43+
# ##############################################################################
8444
# # Post target setup
85-
# #######################################################################################################################
45+
# ##############################################################################
8646

87-
target_precompile_headers(
88-
${PROJECT_NAME}
89-
PRIVATE
90-
include/PCH.h
91-
)
47+
target_include_directories(${PROJECT_NAME} PRIVATE ${CLIB_UTIL_INCLUDE_DIRS})
9248

93-
target_sources(
94-
${PROJECT_NAME}
95-
PRIVATE
96-
${CMAKE_CURRENT_BINARY_DIR}/cmake/Plugin.h
97-
${CMAKE_CURRENT_BINARY_DIR}/cmake/version.rc
98-
)
99-
100-
target_compile_features(
101-
${PROJECT_NAME}
102-
PRIVATE
103-
cxx_std_23
104-
)
105-
106-
target_include_directories(
107-
${PROJECT_NAME}
108-
PRIVATE
109-
${CMAKE_CURRENT_BINARY_DIR}/cmake
110-
${CLIB_UTIL_INCLUDE_DIRS}
111-
)
112-
113-
target_link_libraries(
114-
${PROJECT_NAME}
115-
PRIVATE
116-
CommonLibSSE::CommonLibSSE
117-
)
118-
119-
# https://gitlab.kitware.com/cmake/cmake/-/issues/24922
120-
set_target_properties(
121-
${PROJECT_NAME}
122-
PROPERTIES
123-
VS_USER_PROPS ${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_stl_modules.props
124-
)
125-
126-
# #######################################################################################################################
127-
# # Automatic deployment
128-
# #######################################################################################################################
129-
130-
if (COPY_BUILD)
131-
if (DEFINED OUTPUT_DIRS)
132-
foreach(OUTPUT_DIR OUTPUT_DIRS)
133-
message("Copying mod to ${OUTPUT_DIR}/SKSE/Plugins")
134-
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
135-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> ${OUTPUT_DIR}/SKSE/Plugins/
136-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PDB_FILE:${PROJECT_NAME}> ${OUTPUT_DIR}/SKSE/Plugins/
137-
)
138-
endforeach()
139-
else ()
140-
message(
141-
WARNING
142-
"Variable OUTPUT_DIRS is not defined. Skipping post-build copy command."
143-
)
144-
endif ()
145-
endif ()
49+
# ##############################################################################
50+
# # Generates a zip in /dist
51+
# ##############################################################################
14652

14753
if(ZIP_TO_DIST)
148-
set(ZIP_DIR "${CMAKE_CURRENT_BINARY_DIR}/zip")
149-
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
150-
COMMAND ${CMAKE_COMMAND} -E remove_directory "${ZIP_DIR}" ${CMAKE_SOURCE_DIR}/dist
151-
COMMAND ${CMAKE_COMMAND} -E make_directory "${ZIP_DIR}/SKSE/Plugins" ${CMAKE_SOURCE_DIR}/dist
152-
)
153-
154-
message("Copying mod to ${ZIP_DIR}.")
155-
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
156-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> "${ZIP_DIR}/SKSE/Plugins/"
157-
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PDB_FILE:${PROJECT_NAME}> "${ZIP_DIR}/SKSE/Plugins/"
158-
)
159-
160-
set(TARGET_ZIP "${PROJECT_NAME}${PROJECT_VERSION}.7z")
161-
message("Zipping ${ZIP_DIR} to ${CMAKE_SOURCE_DIR}/dist/${TARGET_ZIP}")
162-
ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD
163-
COMMAND ${CMAKE_COMMAND} -E tar cf ${CMAKE_SOURCE_DIR}/dist/${TARGET_ZIP} --format=7zip -- .
164-
WORKING_DIRECTORY ${ZIP_DIR}
165-
)
54+
set(ZIP_DIR "${CMAKE_CURRENT_BINARY_DIR}/zip")
55+
add_custom_command(
56+
TARGET ${PROJECT_NAME}
57+
POST_BUILD
58+
COMMAND ${CMAKE_COMMAND} -E remove_directory "${ZIP_DIR}"
59+
${CMAKE_SOURCE_DIR}/dist
60+
COMMAND ${CMAKE_COMMAND} -E make_directory "${ZIP_DIR}/SKSE/Plugins"
61+
${CMAKE_SOURCE_DIR}/dist)
62+
63+
message("Copying mod to ${ZIP_DIR}.")
64+
add_custom_command(
65+
TARGET ${PROJECT_NAME}
66+
POST_BUILD
67+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}>
68+
"${ZIP_DIR}/SKSE/Plugins/"
69+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_PDB_FILE:${PROJECT_NAME}>
70+
"${ZIP_DIR}/SKSE/Plugins/")
71+
72+
set(TARGET_ZIP "${PROJECT_NAME}${PROJECT_VERSION}.7z")
73+
message("Zipping ${ZIP_DIR} to ${CMAKE_SOURCE_DIR}/dist/${TARGET_ZIP}")
74+
add_custom_command(
75+
TARGET ${PROJECT_NAME}
76+
POST_BUILD
77+
COMMAND ${CMAKE_COMMAND} -E tar cf ${CMAKE_SOURCE_DIR}/dist/${TARGET_ZIP}
78+
--format=7zip -- .
79+
WORKING_DIRECTORY ${ZIP_DIR})
16680
endif()

Diff for: CMakePresets.json

+5-4
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111
"hidden": true,
1212
"cacheVariables": {
1313
"CMAKE_CXX_FLAGS": "$env{PROJECT_PLATFORM_FLAGS} $env{PROJECT_TEXT_FLAGS} $env{PROJECT_COMPILER_FLAGS} $penv{CXXFLAGS}",
14-
"CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL",
15-
"SKSE_SUPPORT_XBYAK": "ON",
16-
"BUILD_TESTS": "OFF"
14+
"SKSE_SUPPORT_XBYAK": "ON"
1715
},
1816
"binaryDir": "${sourceDir}/build"
1917
},
@@ -40,7 +38,7 @@
4038
"hidden": true,
4139
"cacheVariables": {
4240
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
43-
"CMAKE_CXX_FLAGS_RELEASE": "/fp:fast /GR- /Gw /O2 /Ob3 /Qpar",
41+
"CMAKE_CXX_FLAGS_RELEASE": "/fp:fast /GR- /Gw /O2 /Ob2 /Qpar",
4442
"CMAKE_SHARED_LINKER_FLAGS_RELEASE": "/CGTHREADS:8 /OPT:ICF=4"
4543
}
4644
},
@@ -63,6 +61,9 @@
6361
{
6462
"name": "compiler-msvc",
6563
"hidden": true,
64+
"cacheVariables": {
65+
"CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL"
66+
},
6667
"environment": {
6768
"PROJECT_COMPILER_FLAGS": "/cgthreads8 /diagnostics:caret /EHsc /fp:contract /fp:except- /guard:cf- /MP /permissive- /W4 /Zc:__cplusplus /Zc:enumTypes /Zc:lambda /Zc:preprocessor /Zc:referenceBinding /Zc:rvalueCast /Zc:templateScope /Zc:ternary /external:anglebrackets /external:W0"
6869
},

Diff for: README.md

+24-17
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,40 @@
1-
# SKSE NG Plugin template
1+
# CommonLibSSE NG Plugin template
22
Yet another Skyrim script extender plugin template using my preferred setup
33

44
## Initial setup
55

66
Set Author and Project Name here
77
https://github.com/FlayaN/commonlibsse-ng-submodule-template/blob/main/CMakeLists.txt#L3-L5
88

9-
## Build
9+
## Requirements
1010

11-
### Register Visual Studio as a Generator
11+
- [CMake](https://cmake.org/)
12+
- Add this to your `PATH`
13+
- [Vcpkg](https://github.com/microsoft/vcpkg)
14+
- Add the environment variable `VCPKG_ROOT` with the value as the path to the folder containing vcpkg
15+
- [Visual Studio Community 2022](https://visualstudio.microsoft.com/)
16+
- Desktop development with C++
17+
18+
## User Requirements
19+
20+
- [Address Library for SKSE](https://www.nexusmods.com/skyrimspecialedition/mods/32444)
21+
- Needed for SSE/AE
22+
- [VR Address Library for SKSEVR](https://www.nexusmods.com/skyrimspecialedition/mods/58101)
23+
- Needed for VR
24+
25+
## Register Visual Studio as a Generator
1226

1327
- Open `x64 Native Tools Command Prompt`
1428
- Run `cmake`
1529
- Close the cmd window
1630

17-
```bat
18-
rd /s /q "%~dp0/build"
31+
## Building
32+
33+
```
34+
# to update submodules in /extern
35+
git submodule update --init --recursive
36+
# configure cmake
1937
cmake --preset build-release-msvc-msvc
38+
# build dll
2039
cmake --build build --preset release-msvc-msvc
2140
```
22-
23-
## Dependencies SSE
24-
25-
- [Address Library for SKSE Plugins](https://www.nexusmods.com/skyrimspecialedition/mods/32444)
26-
- [SKSE64](https://skse.silverlock.org/)
27-
- [CLibUtil](https://github.com/powerof3/CLibUtil) (cmake portfile)
28-
29-
## Dependencies VR
30-
31-
- [VR Address Library for SKSEVR Plugins](https://www.nexusmods.com/skyrimspecialedition/mods/58101)
32-
- [SKSEVR](https://skse.silverlock.org/)
33-
- [CLibUtil](https://github.com/powerof3/CLibUtil) (cmake portfile)

Diff for: cmake/AddCXXFiles.cmake

-44
This file was deleted.

0 commit comments

Comments
 (0)