ACE3/docs/wiki/development/extension-guidelines.md

94 lines
2.1 KiB
Markdown
Raw Normal View History

---
layout: wiki
title: Extension Guidelines
description:
group: development
parent: wiki
order: 9
---
## 1. Basics
### 1.1 Requirements
- A compiler (VS/GCC/Clang)
- If starting with Visual Studio, you need to make sure to use the Visual studio command prompt
- cmake 3.0 or later in your path
### 1.2 Cross-Platform Guidelines
### 1.3 C++ basic style and naming guide
### 1.4 ace_common cpp library
---
## 2 Building Extensions on Windows
### 2.1 Compiling
#### 2.1.1 Windows - Creating a Visual Studio Project
1. Open your compiling command prompt (which has cmake and your compiler)
2. From this directory, you need to use cmake to build the appropriate build files. Change the -G property appropriately. run cmake --help to get a list of the options.
```
cd extensions\build
cmake .. -G "Visual Studio 15 2017 Win64"
```
A Visual studio project file will now be generated in your build directory.
#### 2.1.2 Windows - Visual Studio - Compile only (nmake)
1. Open your compiling command prompt (which has cmake and your compiler)
2. From this directory, you need to use cmake to build the appropriate build files. Change the -G property appropriately. run cmake --help to get a list of the options.
```
cd extensions\build
cmake .. -G "NMake Makefiles"
nmake
```
The extensions will not be built in its appropriate project folder, for example:
```
extensions\
build\
fcs\ace_fcs.dll
somethingElse\ace_somethingElse.dll
```
### 2.2 Creating a new Extension
#### 2.2.1 Arma Config
ACE3 loads extensions defined in `ACE_Extensions` root config class and supports the following entries:
```cpp
// Platform
windows = 1; // Load on Windows
linux = 1; // Load on Linux
// Type
client = 1; // Load on Client
server = 1; // Load on Server
```
```cpp
class ACE_Extensions {
// Windows Client only extension
class tag_extension {
windows = 1;
client = 1;
};
// Any platform Server extension
class tag_extension2 {
windows = 1;
linux = 1;
server = 1;
};
};
```
Combining platform and client/server values is possible to get all combinations currently supported by the game and more.