mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-11 16:45:48 -04:00
Improve plugin compiling instructions and also document for macOS
This commit is contained in:
parent
fa456f991d
commit
431c3e427e
@ -85,16 +85,41 @@ Otherwise your plugin will not load. (you'll see `error getting plugin version`
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Linux
|
## Compiling
|
||||||
#### For Linux
|
|
||||||
**Compiling**
|
|
||||||
|
|
||||||
```gcc TestPlugin.c -o TestPlugin.so -shared -fPIC```
|
Plugin compilation instructions differs depending on the compiler and operating system
|
||||||
|
|
||||||
|
### Linux
|
||||||
|
|
||||||
|
[Compiling using gcc or clang](plugin-dev.md#using-gcc-or-clang)
|
||||||
|
|
||||||
|
[Cross compiling for Windows 32-bit](plugin-dev.md#cross-compiling-for-windows-32-bit-using-mingw-w64)
|
||||||
|
|
||||||
|
[Cross compiling for Windows 64-bit](plugin-dev.md#cross-compiling-for-windows-64-bit-using-mingw-w64)
|
||||||
|
|
||||||
|
### macOS
|
||||||
|
|
||||||
|
[Compiling using gcc or clang](plugin-dev.md#using-gcc-or-clang-1)
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
[Compiling using Visual Studio](plugin-dev.md#using-visual-studio)
|
||||||
|
|
||||||
|
[Compiling using mingw-w64](plugin-dev.md#using-mingw-w64)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Compiling - Linux
|
||||||
|
|
||||||
|
### Using gcc or clang
|
||||||
|
#### Compiling
|
||||||
|
|
||||||
|
```cc TestPlugin.c -o TestPlugin.so -shared -fPIC```
|
||||||
|
|
||||||
Then put ```TestPlugin.so``` into your game's ```plugins``` folder. Done.
|
Then put ```TestPlugin.so``` into your game's ```plugins``` folder. Done.
|
||||||
|
|
||||||
#### Cross compile for Windows 32 bit
|
### Cross compiling for Windows 32 bit using mingw-w64
|
||||||
**Prerequisites:**
|
#### Setup
|
||||||
|
|
||||||
1) Compile the game, see ```Cross compiling for windows``` in main readme
|
1) Compile the game, see ```Cross compiling for windows``` in main readme
|
||||||
2) Rename compiled executable to ClassiCube.exe
|
2) Rename compiled executable to ClassiCube.exe
|
||||||
@ -104,7 +129,7 @@ TODO: this also works for mingw. clean this up.
|
|||||||
|
|
||||||
TODO: also document alternate method of compiling the game using --out-implib
|
TODO: also document alternate method of compiling the game using --out-implib
|
||||||
|
|
||||||
**Compiling**
|
#### Compiling
|
||||||
|
|
||||||
First, generate list of exported symbols:
|
First, generate list of exported symbols:
|
||||||
|
|
||||||
@ -120,19 +145,24 @@ Finally compile the plugin:
|
|||||||
|
|
||||||
Then put ```TestPlugin.dll``` into your game's ```plugins``` folder. Done.
|
Then put ```TestPlugin.dll``` into your game's ```plugins``` folder. Done.
|
||||||
|
|
||||||
##### Ultra small dlls
|
### Cross compiling for Windows 64 bit using mingw-w64
|
||||||
If you **ONLY** use code from the game (no external libraries and no C standard library functions), add ```-nostartfiles -Wl,--entry=0``` to the compile flags
|
Repeat the steps of *Cross compiling for Windows 32 bit*, but replace ```i686-w64-mingw32``` with ```x86_64-w64-mingw32```
|
||||||
|
|
||||||
This step isn't necessary, the dll works fine without it. But it does reduce the size of the dll from 11 to 4 kb.
|
## Compiling - macOS
|
||||||
|
|
||||||
#### Cross compile for Windows 64 bit
|
### Using gcc or clang
|
||||||
Repeat the steps of *Cross compile for Windows 32 bit*, but use ```x86_64-w64-mingw32``` instead of ```i686-w64-mingw32```
|
#### Compiling
|
||||||
|
|
||||||
|
```cc TestPlugin.c -o TestPlugin.dylib -undefined dynamic_lookup```
|
||||||
|
|
||||||
### Windows
|
Then put ```TestPlugin.dylib``` into your game's ```plugins``` folder. Done.
|
||||||
TODO when I have some more time...
|
|
||||||
|
|
||||||
**Prerequisites:**
|
## Compiling - Windows
|
||||||
|
|
||||||
|
### Using Visual Studio
|
||||||
|
TODO more detailed when I have some more time...
|
||||||
|
|
||||||
|
#### Setup
|
||||||
|
|
||||||
1) Compile the game, see ```Cross compiling for windows``` in main readme
|
1) Compile the game, see ```Cross compiling for windows``` in main readme
|
||||||
2) Find the `ClassiCube.lib` that was generated when compiling the game. Usually it is in either `src\x64\Debug` or `src\x86\Debug`.
|
2) Find the `ClassiCube.lib` that was generated when compiling the game. Usually it is in either `src\x64\Debug` or `src\x86\Debug`.
|
||||||
@ -140,7 +170,25 @@ TODO when I have some more time...
|
|||||||
|
|
||||||
Note: If the plugin provides a .vcxproj file, you can skip step 2 and just open that project file instead.
|
Note: If the plugin provides a .vcxproj file, you can skip step 2 and just open that project file instead.
|
||||||
|
|
||||||
**Configuration**
|
#### Configuration - alternative #1
|
||||||
|
|
||||||
|
The simplest way of linking to the `.lib` file is simply adding the following code to one of the plugin's `.c` files
|
||||||
|
|
||||||
|
```C
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#ifdef _WIN64
|
||||||
|
#pragma comment(lib, "[GAME SOURCE]/x64/Debug/ClassiCube.lib")
|
||||||
|
#else
|
||||||
|
#pragma comment(lib, "[GAME SOURCE]/x86/Debug/ClassiCube.lib")
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
replacing `[GAME SOURCE]` with the full path of `src` folder (e.g. `C:/Dev/ClassiCube/src`)
|
||||||
|
|
||||||
|
#### Configuration - alternative #2
|
||||||
|
|
||||||
|
The more complicated way of linking to the `.lib` file is to add it to the plugin's project configuration file
|
||||||
|
|
||||||
Right click the plugin project in the `Solution Explorer` pane, then click `Properties`
|
Right click the plugin project in the `Solution Explorer` pane, then click `Properties`
|
||||||
|
|
||||||
@ -152,9 +200,36 @@ TODO: may need to configure include directories
|
|||||||
|
|
||||||
2) In `Configuration properties` -> `Linker` -> `Input`, click the dropdown button for `Additional Dependencies`, then click `Edit`. Add the full path to `ClassiCube.lib`, then click `OK`
|
2) In `Configuration properties` -> `Linker` -> `Input`, click the dropdown button for `Additional Dependencies`, then click `Edit`. Add the full path to `ClassiCube.lib`, then click `OK`
|
||||||
|
|
||||||
**Compiling**
|
#### Compiling
|
||||||
|
|
||||||
Build the project. There should be a line in the build output that tells you where you can find the .dll file like this:
|
Build the project. There should be a line in the build output that tells you where you can find the .dll file like this:
|
||||||
```
|
```
|
||||||
Project1.vcxproj -> C:\classicube-dev\testplugin\src\x64\Debug\Project1.dll
|
Project1.vcxproj -> C:\classicube-dev\testplugin\src\x64\Debug\TestPlugin.dll
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Then put ```TestPlugin.dll``` into your game's ```plugins``` folder. Done.
|
||||||
|
|
||||||
|
### Using mingw-w64
|
||||||
|
|
||||||
|
#### Setup
|
||||||
|
|
||||||
|
Generate the list of exported symbols of `ClassiCube.exe`
|
||||||
|
|
||||||
|
```gendef src/ClassiCube.exe```
|
||||||
|
|
||||||
|
Next create a linkable library from the exported symbols list:
|
||||||
|
|
||||||
|
```dlltool -d ClassiCube.def -l libClassiCube.a -D ClassiCube.exe```
|
||||||
|
|
||||||
|
#### Compiling
|
||||||
|
|
||||||
|
```gcc TestPlugin.c -o TestPlugin.dll -s -shared -L . -lClassiCube```
|
||||||
|
|
||||||
|
Then put ```TestPlugin.dll``` into your game's ```plugins``` folder. Done.
|
||||||
|
|
||||||
|
## Compiling - other notes
|
||||||
|
|
||||||
|
##### Ultra small dlls - mingw
|
||||||
|
If you **ONLY** use code from the game (no external libraries and no C standard library functions), add ```-nostartfiles -Wl,--entry=0``` to the compile flags
|
||||||
|
|
||||||
|
This step isn't necessary, the dll works fine without it. But it does reduce the size of the dll from 11 to 4 kb.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user