Skip to content

Commit 8f9ceee

Browse files
committed
feat!: update for a new plugify
1 parent e62ac79 commit 8f9ceee

23 files changed

+1204
-798
lines changed

.github/workflows/cmake-multiple-platform.yml

Lines changed: 365 additions & 227 deletions
Large diffs are not rendered by default.

CMakeLists.txt

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ endif()
88
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/version.txt" VERSION_FILE_CONTENTS)
99
string(STRIP "${VERSION_FILE_CONTENTS}" VERSION_FILE_CONTENTS)
1010
set(NETLM_VERSION "${VERSION_FILE_CONTENTS}" CACHE STRING "Set version name")
11-
set(NETLM_PACKAGE "plugify-module-dotnet" CACHE STRING "Set package name")
11+
set(NETLM_PACKAGE "dotnet_module" CACHE STRING "Set package name")
1212
string(REPLACE "v" "" NETLM_VERSION "${NETLM_VERSION}")
1313
string(REGEX REPLACE "[.+-]" ";" NETLM_VERSION_LIST ${NETLM_VERSION})
1414
list(GET NETLM_VERSION_LIST 0 NETLM_VERSION_MAJOR)
@@ -19,15 +19,12 @@ project(plugify-module-dotnet
1919
VERSION "${NETLM_VERSION_MAJOR}.${NETLM_VERSION_MINOR}.${NETLM_VERSION_PATCH}"
2020
DESCRIPTION "C# (.NET) Language Module"
2121
HOMEPAGE_URL "https://github.com/untrustedmodders/plugify-module-dotnet"
22-
LANGUAGES C CXX)
22+
LANGUAGES CXX)
2323

2424
set(CMAKE_CXX_STANDARD 23)
2525
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2626
set(CMAKE_CXX_EXTENSIONS OFF)
27-
set(CMAKE_C_STANDARD 11)
28-
set(CMAKE_C_STANDARD_REQUIRED ON)
29-
set(CMAKE_C_EXTENSIONS OFF)
30-
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
27+
#set(CMAKE_POSITION_INDEPENDENT_CODE ON)
3128

3229
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug|Devel|MinSizeRel|RelWithDebInfo|Release")
3330
message(STATUS "CMAKE_BUILD_TYPE not set, defaulting to Debug.")
@@ -38,17 +35,16 @@ if(UNIX AND NOT APPLE)
3835
set(LINUX TRUE)
3936
endif()
4037

38+
set(BUILD_SHARED_LIBS ON CACHE INTERNAL "")
39+
4140
#
4241
# Plugify
4342
#
4443
set(PLUGIFY_BUILD_SHARED_LIB ON CACHE INTERNAL "")
45-
set(PLUGIFY_BUILD_JIT ON CACHE INTERNAL "")
46-
set(PLUGIFY_BUILD_ASSEMBLY ON CACHE INTERNAL "")
4744
set(PLUGIFY_BUILD_TESTS OFF CACHE INTERNAL "")
48-
set(PLUGIFY_INTERFACE ON CACHE INTERNAL "")
49-
set(PLUGIFY_DOWNLOADER OFF CACHE INTERNAL "")
5045
if(LINUX)
5146
set(PLUGIFY_USE_STATIC_STDLIB ON CACHE INTERNAL "")
47+
set(PLUGIFY_USE_ABI0 OFF CACHE INTERNAL "")
5248
endif()
5349
add_subdirectory(external/plugify)
5450

@@ -60,16 +56,12 @@ set(NETLM_PCH_FILE "src/pch.hpp")
6056

6157
add_library(${PROJECT_NAME} SHARED ${NETLM_SOURCES})
6258

63-
set(NETLM_LINK_LIBRARIES plugify::plugify plugify::plugify-jit plugify::plugify-assembly asmjit::asmjit)
59+
set(NETLM_LINK_LIBRARIES plugify::plugify)
6460

6561
if(NOT COMPILER_SUPPORTS_FORMAT)
6662
set(NETLM_LINK_LIBRARIES ${NETLM_LINK_LIBRARIES} fmt::fmt-header-only)
6763
endif()
6864

69-
if(NOT COMPILER_SUPPORTS_STACKTRACE)
70-
set(NETLM_LINK_LIBRARIES ${NETLM_LINK_LIBRARIES} cpptrace::cpptrace)
71-
endif()
72-
7365
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/external/dotnet/include)
7466

7567
target_link_libraries(${PROJECT_NAME} PRIVATE ${NETLM_LINK_LIBRARIES})
@@ -78,7 +70,7 @@ target_precompile_headers(${PROJECT_NAME} PRIVATE ${NETLM_PCH_FILE})
7870
if(MSVC)
7971
target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX /Wv:18)
8072
else()
81-
target_compile_options(${PROJECT_NAME} PRIVATE -Wextra -Wconversion -Werror) # -Wshadow -Wpedantic
73+
target_compile_options(${PROJECT_NAME} PRIVATE -Wextra -Wconversion -Werror -Wshadow -Wpedantic)
8274
endif()
8375

8476
if(APPLE)
@@ -87,6 +79,10 @@ elseif(UNIX)
8779
target_link_options(${PROJECT_NAME} PRIVATE "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/sym/version_script.lds")
8880
endif()
8981

82+
if(PLUGIFY_COMPILER_GCC AND LINUX)
83+
target_link_libraries(${PROJECT_NAME} PRIVATE -lstdc++exp)
84+
endif()
85+
9086
include(GenerateExportHeader)
9187
generate_export_header(${PROJECT_NAME} EXPORT_MACRO_NAME NETLM_EXPORT EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/exports/module_export.h)
9288
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR}/exports)

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
[![Русский](https://img.shields.io/badge/Русский-%F0%9F%87%B7%F0%9F%87%BA-green?style=for-the-badge)](README_ru.md)
2+
13
# C# (.NET) Language Module for Plugify
24

35
The C# (.NET) Language Module for Plugify facilitates the development of plugins in C# for the Plugify framework. With this module, you can seamlessly integrate C# plugins, allowing dynamic loading and management by the Plugify core.

README_ru.md

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
[![English](https://img.shields.io/badge/English-%F0%9F%87%AC%F0%9F%87%A7-blue?style=for-the-badge)](README.md)
2+
3+
# Модуль языка C# (.NET) для Plugify
4+
5+
Модуль языка C# (.NET) для Plugify облегчает разработку плагинов на C# для фреймворка Plugify. С его помощью вы можете бесшовно интегрировать C# плагины, позволяя ядру Plugify динамически загружать и управлять ими.
6+
7+
## Возможности
8+
9+
- **Поддержка плагинов на C# (.NET)**: Пишите плагины на C# (.NET) и легко интегрируйте их с фреймворком Plugify.
10+
- **Автоматическая экспортируемость**: Удобный экспорт и импорт методов между плагинами и языковым модулем.
11+
- **Инициализация и завершение работы**: Обрабатывайте запуск, инициализацию и завершение плагина с помощью событий модуля.
12+
- **Взаимодействие между языками**: Общение с плагинами на других языках через автоматически сгенерированные интерфейсы.
13+
14+
**Примечание**: Все плагины на C# (.NET) размещаются в одном домене. Это обеспечивает бесшовное взаимодействие и совместную работу между C# плагинами без участия ядра Plugify.
15+
16+
## Начало работы
17+
18+
### Требования
19+
20+
- Среда выполнения .NET [(.NET 9.0.0)](https://dotnet.microsoft.com/en-us/download/dotnet/9.0)
21+
- Установленный фреймворк Plugify
22+
23+
### Установка
24+
25+
#### Вариант 1: Установка через менеджер плагинов Plugify
26+
27+
Вы можете установить модуль языка C# (.NET) с помощью менеджера плагинов Plugify, выполнив следующую команду:
28+
29+
```
30+
bash
31+
plg install plugify-module-dotnet
32+
```
33+
34+
#### Вариант 2: Ручная установка
35+
36+
1. Установите зависимости:
37+
38+
a. Windows
39+
> Настройка [CMake-инструментов через Visual Studio Installer](https://learn.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio#installation)
40+
41+
b. Linux:
42+
```sh
43+
sudo apt-get install -y build-essential cmake ninja-build
44+
```
45+
46+
c. Mac:
47+
```sh
48+
brew install cmake ninja
49+
```
50+
51+
2. Клонируйте репозиторий:
52+
53+
```bash
54+
git clone https://github.com/untrustedmodders/plugify-module-dotnet.git --recursive
55+
cd plugify-module-dotnet
56+
```
57+
58+
3. Сборка модуля языка C# (.NET):
59+
60+
```bash
61+
mkdir build && cd build
62+
cmake ..
63+
cmake --build .
64+
```
65+
66+
### Использование
67+
68+
1. **Интеграция с Plugify**
69+
70+
Убедитесь, что модуль языка C# (.NET) находится в той же директории, что и ваша установка Plugify.
71+
72+
2. **Создание плагинов на C#**
73+
74+
Разрабатывайте плагины на C# с использованием API Plugify. Подробное руководство можно найти в [документации по созданию плагина на C#](https://untrustedmodders.github.io/languages/csharp/first-plugin).
75+
76+
3. **Сборка и установка плагинов**
77+
78+
Скомпилируйте ваши C# плагины и разместите сборки (assemblies) в директории, доступной для ядра Plugify.
79+
80+
4. **Запуск Plugify**
81+
82+
Запустите фреймворк Plugify — он автоматически загрузит ваши C# плагины.
83+
84+
## Пример
85+
86+
```csharp
87+
using Plugify;
88+
89+
namespace ExamplePlugin
90+
{
91+
public class SamplePlugin : Plugin
92+
{
93+
public void OnPluginStart()
94+
{
95+
Console.WriteLine(".NET: OnPluginStart");
96+
}
97+
98+
public void OnPluginUpdate(float dt)
99+
{
100+
Console.WriteLine(".NET: OnPluginUpdate");
101+
}
102+
103+
public void OnPluginEnd()
104+
{
105+
Console.WriteLine(".NET: OnPluginEnd");
106+
}
107+
}
108+
}
109+
```
110+
111+
## Документация
112+
113+
Для получения полной документации по написанию плагинов на C# (.NET) с использованием фреймворка Plugify, см. [официальную документацию Plugify](https://untrustedmodders.github.io).
114+
115+
## Участие в разработке
116+
117+
Вы можете внести вклад, открыв issue или отправив pull request. Мы будем рады вашим идеям и предложениям!
118+
119+
## Лицензия
120+
121+
Этот модуль языка C# (.NET) для Plugify распространяется по лицензии [MIT](LICENSE).

conda/LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 untrustedmodders
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

conda/bld.bat

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
@echo off
2+
REM bld.bat - For Windows builds
3+
4+
REM Create the target directories
5+
if not exist "%PREFIX%\bin" mkdir "%PREFIX%\bin"
6+
if not exist "%PREFIX%\api" mkdir "%PREFIX%\api"
7+
if not exist "%PREFIX%\dotnet" mkdir "%PREFIX%\dotnet"
8+
if not exist "%PREFIX%" mkdir "%PREFIX%"
9+
10+
REM Copy the DLL and module file
11+
copy bin\plugify-module-dotnet.dll "%PREFIX%\bin\" || exit 1
12+
xcopy api "%PREFIX%\api" /E /Y /I
13+
xcopy dotnet "%PREFIX%\dotnet" /E /Y /I
14+
copy plugify-module-dotnet.pmodule "%PREFIX%\" || exit 1
15+
16+
REM Create activation scripts
17+
if not exist "%PREFIX%\etc\conda\activate.d" mkdir "%PREFIX%\etc\conda\activate.d"
18+
if not exist "%PREFIX%\etc\conda\deactivate.d" mkdir "%PREFIX%\etc\conda\deactivate.d"
19+
20+
REM Create activation script
21+
echo @echo off > "%PREFIX%\etc\conda\activate.d\plugify-module-dotnet.bat"
22+
echo set "PLUGIFY_NET_MODULE_PATH=%%CONDA_PREFIX%%;%%PLUGIFY_NET_MODULE_PATH%%" >> "%PREFIX%\etc\conda\activate.d\plugify-module-dotnet.bat"
23+
24+
REM Create deactivation script
25+
echo @echo off > "%PREFIX%\etc\conda\deactivate.d\plugify-module-dotnet.bat"
26+
echo set "PLUGIFY_NET_MODULE_PATH=%%PLUGIFY_NET_MODULE_PATH:%%CONDA_PREFIX%%;=%%" >> "%PREFIX%\etc\conda\deactivate.d\plugify-module-dotnet.bat"
27+
28+
exit 0

conda/build.sh

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/bin/bash
2+
# build.sh - For Linux builds
3+
4+
set -ex
5+
6+
# Create the target directories
7+
mkdir -p $PREFIX/bin
8+
mkdir -p $PREFIX/api
9+
mkdir -p $PREFIX/dotnet
10+
mkdir -p $PREFIX
11+
12+
# Copy the shared library and module file
13+
cp bin/libplugify-module-dotnet.so $PREFIX/bin/
14+
cp -r api/* $PREFIX/api/
15+
cp -r dotnet/* $PREFIX/dotnet/
16+
cp plugify-module-dotnet.pmodule $PREFIX/
17+
18+
# Set proper permissions
19+
chmod 755 $PREFIX/bin/libplugify-module-dotnet.so
20+
chmod -R 755 $PREFIX/api
21+
chmod -R 755 $PREFIX/dotnet
22+
chmod 644 $PREFIX/plugify-module-dotnet.pmodule
23+
24+
# Create activation scripts for proper library path
25+
mkdir -p $PREFIX/etc/conda/activate.d
26+
mkdir -p $PREFIX/etc/conda/deactivate.d
27+
28+
cat > $PREFIX/etc/conda/activate.d/plugify-module-dotnet.sh << EOF
29+
#!/bin/bash
30+
export PLUGIFY_NET_MODULE_PATH="\${CONDA_PREFIX}:\${PLUGIFY_NET_MODULE_PATH}"
31+
EOF
32+
33+
cat > $PREFIX/etc/conda/deactivate.d/plugify-module-dotnet.sh << EOF
34+
#!/bin/bash
35+
export PLUGIFY_NET_MODULE_PATH="\${PLUGIFY_NET_MODULE_PATH//\${CONDA_PREFIX}:/}"
36+
EOF
37+
38+
chmod +x $PREFIX/etc/conda/activate.d/plugify-module-dotnet.sh
39+
chmod +x $PREFIX/etc/conda/deactivate.d/plugify-module-dotnet.sh

conda/meta.yaml.example

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{% set name = "plugify-module-dotnet" %}
2+
{% set version = "REPLACE_VERSION" %}
3+
4+
package:
5+
name: {{ name|lower }}
6+
version: {{ version }}
7+
8+
source:
9+
path: .
10+
11+
build:
12+
number: 0
13+
string: "{{ target_platform | replace('-', '_') }}"
14+
missing_dso_whitelist:
15+
- "*/ld-linux*.so.*" # [linux]
16+
- "*/libc.so.*" # [linux]
17+
- "*/libm.so.*" # [linux]
18+
- "*/libdl.so.*" # [linux]
19+
- "*/libpthread.so.*" # [linux]
20+
- "*/librt.so.*" # [linux]
21+
- "*/libplugify.so*" # [linux]
22+
- "*/libhostfxr.so*" # [linux]
23+
- "*/plugify.dll" # [win]
24+
- "*/hostfxr.dll" # [win]
25+
26+
requirements:
27+
run:
28+
- __glibc >=2.17 # [linux64]
29+
30+
test:
31+
commands:
32+
- test -f $PREFIX/bin/libplugify-module-dotnet.so # [linux]
33+
- test -d $PREFIX/api # [linux]
34+
- test -d $PREFIX/dotnet # [linux]
35+
- test -f $PREFIX/plugify-module-dotnet.pmodule # [linux]
36+
- if not exist %PREFIX%\\bin\\plugify-module-dotnet.dll exit 1 # [win]
37+
- if not exist %PREFIX%\\api exit 1 # [win]
38+
- if not exist %PREFIX%\\dotnet exit 1 # [win]
39+
- if not exist %PREFIX%\\plugify-module-dotnet.pmodule exit 1 # [win]
40+
41+
about:
42+
home: https://github.com/{{ environ.get('GITHUB_REPOSITORY', 'your-org/your-repo') }}
43+
license: MIT
44+
license_family: MIT
45+
license_file: LICENSE
46+
summary: C# Language Module for Plugify
47+
description: |
48+
C# Language Module provides C# language support for the Plugify
49+
plugin system, enabling dynamic loading and execution of .NET plugins.
50+
doc_url: https://github.com/{{ environ.get('GITHUB_REPOSITORY', 'your-org/your-repo') }}/blob/main/README.md
51+
dev_url: https://github.com/{{ environ.get('GITHUB_REPOSITORY', 'your-org/your-repo') }}
52+
53+
extra:
54+
recipe-maintainers:
55+
- {{ environ.get('GITHUB_ACTOR', 'your-username') }}

external/plugify

Submodule plugify updated 605 files

0 commit comments

Comments
 (0)