feat(scripting): add mono csharp runtime foundation

This commit is contained in:
2026-03-27 13:07:39 +08:00
parent 134a80b334
commit b06932724c
33 changed files with 4227 additions and 18 deletions

View File

@@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.15)
project(XCEngineLib)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(XCENGINE_VULKAN_SDK_HINT "$ENV{VULKAN_SDK}")
if(NOT EXISTS "${XCENGINE_VULKAN_SDK_HINT}/Lib/vulkan-1.lib")
file(GLOB XCENGINE_VULKAN_SDK_DIRS "D:/VulkanSDK/*")
@@ -18,8 +20,6 @@ endif()
find_package(Vulkan REQUIRED)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_library(XCEngine STATIC
# Core (Types, RefCounted, SmartPtr, Event)
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Core/Types.h
@@ -149,6 +149,7 @@ add_library(XCEngine STATIC
${CMAKE_CURRENT_SOURCE_DIR}/src/RHI/D3D12/D3D12ResourceView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/RHI/D3D12/D3D12QueryHeap.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/RHI/D3D12/D3D12RenderPass.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/RHI/D3D12/D3D12Framebuffer.cpp
# Vulkan RHI
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/RHI/Vulkan/VulkanCommon.h
@@ -171,7 +172,6 @@ add_library(XCEngine STATIC
${CMAKE_CURRENT_SOURCE_DIR}/src/RHI/Vulkan/VulkanSwapChain.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/RHI/Vulkan/VulkanDevice.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/RHI/Vulkan/VulkanScreenshot.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/RHI/D3D12/D3D12Framebuffer.cpp
# OpenGL RHI
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/RHI/OpenGL/OpenGLBuffer.h
@@ -332,8 +332,10 @@ add_library(XCEngine STATIC
# Scene
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Scene/Scene.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Scene/SceneRuntime.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Scene/SceneManager.h
${CMAKE_CURRENT_SOURCE_DIR}/src/Scene/Scene.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Scene/SceneRuntime.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Scene/SceneManager.cpp
# Platform
@@ -413,6 +415,49 @@ target_link_libraries(XCEngine PUBLIC
Vulkan::Vulkan
)
if(XCENGINE_ENABLE_MONO_SCRIPTING)
set(XCENGINE_MONO_INCLUDE_DIR "${XCENGINE_MONO_ROOT_DIR}/include")
set(XCENGINE_MONO_STATIC_LIBRARY "${XCENGINE_MONO_ROOT_DIR}/lib/libmono-static-sgen.lib")
set(XCENGINE_MONO_POSIX_HELPER_LIBRARY "${XCENGINE_MONO_ROOT_DIR}/lib/MonoPosixHelper.lib")
foreach(XCENGINE_MONO_REQUIRED_PATH
"${XCENGINE_MONO_INCLUDE_DIR}"
"${XCENGINE_MONO_STATIC_LIBRARY}"
"${XCENGINE_MONO_POSIX_HELPER_LIBRARY}")
if(NOT EXISTS "${XCENGINE_MONO_REQUIRED_PATH}")
message(FATAL_ERROR "Required Mono dependency is missing: ${XCENGINE_MONO_REQUIRED_PATH}")
endif()
endforeach()
add_library(XCEMono STATIC IMPORTED)
set_target_properties(XCEMono PROPERTIES
IMPORTED_LOCATION "${XCENGINE_MONO_STATIC_LIBRARY}"
)
target_sources(XCEngine PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Scripting/Mono/MonoScriptRuntime.h
${CMAKE_CURRENT_SOURCE_DIR}/src/Scripting/Mono/MonoScriptRuntime.cpp
)
target_include_directories(XCEngine PRIVATE
${XCENGINE_MONO_INCLUDE_DIR}
)
target_link_libraries(XCEngine PUBLIC
XCEMono
${XCENGINE_MONO_POSIX_HELPER_LIBRARY}
ws2_32
bcrypt
version
iphlpapi
winmm
)
target_compile_definitions(XCEngine PRIVATE
XCENGINE_ENABLE_MONO_SCRIPTING
)
endif()
if(MSVC)
target_compile_options(XCEngine PRIVATE /W3 /FS)
else()