194 lines
6.2 KiB
Markdown
194 lines
6.2 KiB
Markdown
|
# Add-on Interface (Unstable)
|
|||
|
|
|||
|
## Basic
|
|||
|
|
|||
|
- Add-on is a Lua script.
|
|||
|
- Values passed or returned to Red Panda C++ must be JSON compatible, i.e.,
|
|||
|
- `nil` (maps to `null`)
|
|||
|
- `boolean`
|
|||
|
- `number`
|
|||
|
- `string`
|
|||
|
- empty `table` (maps to `null`)
|
|||
|
- `table` with only array part (maps to `array`)
|
|||
|
- `table` with only hash part (maps to `object`)
|
|||
|
- Red Panda C++ APIs exposed to add-on are organized by groups.
|
|||
|
- Each group is a Lua table.
|
|||
|
- Each API is a function in the table.
|
|||
|
- Available API groups vary by add-on type.
|
|||
|
- Localization is handled by add-on. e.g.
|
|||
|
```lua
|
|||
|
local lang = C_Desktop.language()
|
|||
|
local localizedName = {
|
|||
|
en_US = "System",
|
|||
|
pt_BR = "Sistema",
|
|||
|
zh_CN = "系统",
|
|||
|
zh_TW = "系統",
|
|||
|
}
|
|||
|
return {
|
|||
|
name = localizedName[lang] or localizedName.en_US,
|
|||
|
-- ...
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## Simple Add-on
|
|||
|
|
|||
|
A simple add-on is a Lua script that returns a single value.
|
|||
|
|
|||
|
### Compiler Hint Add-on
|
|||
|
|
|||
|
If `$appLibexecDir/compiler_hint.lua` exists, it will be executed as compiler hint add-on when searching for compiler.
|
|||
|
|
|||
|
Available API groups:
|
|||
|
- `C_Debug`
|
|||
|
- `C_Desktop`
|
|||
|
- `C_FileSystem`
|
|||
|
- `C_System`
|
|||
|
- `C_Util`
|
|||
|
|
|||
|
Return value schema:
|
|||
|
```typescript
|
|||
|
{
|
|||
|
// found compiler sets
|
|||
|
compilerList: [compilerSet],
|
|||
|
|
|||
|
// do not search in these directories anymore
|
|||
|
noSearch: [string],
|
|||
|
|
|||
|
// prefer compiler set index (in Lua, 1-based) in compilerList
|
|||
|
// 0 for no preference
|
|||
|
preferCompiler: number,
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
`compilerSet` schema:
|
|||
|
```typescript
|
|||
|
{
|
|||
|
name: string,
|
|||
|
|
|||
|
// internal
|
|||
|
dumpMachine: string, // e.g. "x86_64-linux-gnu", "x86_64-w64-mingw32"
|
|||
|
version: string, // e.g. "13.2.1", "17.0.6"
|
|||
|
type: string, // e.g. "TDM-GCC", "MinGW"
|
|||
|
target: string, // e.g. "x86_64", "aarch64"
|
|||
|
compilerType: string, // "GCC" or "Clang"
|
|||
|
|
|||
|
// general
|
|||
|
staticLink: boolean,
|
|||
|
customCompileParams: [string], // automatically sets useCustomCompileParams
|
|||
|
customLinkParams: [string], // automatically sets useCustomLinkParams
|
|||
|
execCharset: string, // automatically sets autoAddCharsetParams
|
|||
|
|
|||
|
// setting
|
|||
|
// - code generation
|
|||
|
ccCmdOptOptimize: string,
|
|||
|
ccCmdOptStd: string,
|
|||
|
cCmdOptStd: string,
|
|||
|
ccCmdOptInstruction: string,
|
|||
|
ccCmdOptPointerSize: string,
|
|||
|
ccCmdOptDebugInfo: string,
|
|||
|
ccCmdOptProfileInfo: string,
|
|||
|
ccCmdOptSyntaxOnly: string,
|
|||
|
// - warnings
|
|||
|
ccCmdOptInhibitAllWarning: string,
|
|||
|
ccCmdOptWarningAll: string,
|
|||
|
ccCmdOptWarningExtra: string,
|
|||
|
ccCmdOptCheckIsoConformance: string,
|
|||
|
ccCmdOptWarningAsError: string,
|
|||
|
ccCmdOptAbortOnError: string,
|
|||
|
ccCmdOptStackProtector: string,
|
|||
|
ccCmdOptAddressSanitizer: string,
|
|||
|
// - linker
|
|||
|
ccCmdOptUsePipe: string,
|
|||
|
linkCmdOptNoLinkStdlib: string,
|
|||
|
linkCmdOptNoConsole: string,
|
|||
|
linkCmdOptStripExe: string,
|
|||
|
|
|||
|
// directory
|
|||
|
binDirs: [string],
|
|||
|
cIncludeDirs: [string],
|
|||
|
cxxIncludeDirs: [string],
|
|||
|
libDirs: [string],
|
|||
|
defaultLibDirs: [string],
|
|||
|
defaultCIncludeDirs: [string],
|
|||
|
defaultCxxIncludeDirs: [string],
|
|||
|
|
|||
|
// program
|
|||
|
cCompiler: string,
|
|||
|
cxxCompiler: string,
|
|||
|
make: string,
|
|||
|
debugger: string,
|
|||
|
debugServer: string,
|
|||
|
resourceCompiler: string,
|
|||
|
|
|||
|
// output
|
|||
|
preprocessingSuffix: string,
|
|||
|
compilationProperSuffix: string,
|
|||
|
assemblingSuffix: string,
|
|||
|
executableSuffix: string,
|
|||
|
compilationStage: number,
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## API Groups
|
|||
|
|
|||
|
### `C_Debug`
|
|||
|
|
|||
|
`C_Debug` is available to all add-on types.
|
|||
|
|
|||
|
- `C_Debug.debug`: `(message: string) -> ()`, print message to console (via `qDebug()`).
|
|||
|
|
|||
|
### `C_Desktop`
|
|||
|
|
|||
|
- `C_Desktop.desktopEnvironment`: `() -> string`, return desktop environment name.
|
|||
|
- `windows`: Windows (Win32 only)
|
|||
|
- `macos`: macOS
|
|||
|
- `xdg`: XDG-compliant desktop environment (e.g. GNOME, KDE Plasma)
|
|||
|
- `unknown`: other desktops or non-desktop environments (e.g. Windows UWP, Android)
|
|||
|
- `C_Desktop.language`: `() -> string`, return language code.
|
|||
|
- e.g. `en_US`, `zh_CN`
|
|||
|
- `C_Desktop.qtStyleList`: `() -> [string]`, return available Qt styles.
|
|||
|
- e.g. `{"breeze", "fusion", "windows"}`
|
|||
|
- `C_Desktop.systemAppMode`: `() -> string`, return system app mode.
|
|||
|
- `light`: light mode
|
|||
|
- `dark`: dark mode
|
|||
|
- `C_Desktop.systemStyle`: `() -> string`, return default Qt style.
|
|||
|
- e.g. `fusion`
|
|||
|
|
|||
|
### `C_FileSystem`
|
|||
|
|
|||
|
- `C_FileSystem.exists`: `(path: string) -> boolean`, return whether the path exists.
|
|||
|
- `C_FileSystem.isExecutable`: `(path: string) -> boolean`, return whether the path is executable.
|
|||
|
|
|||
|
### `C_System`
|
|||
|
|
|||
|
- `C_System.appArch`: `() -> string`, return the architecture of Red Panda C++, name following `QSysInfo`.
|
|||
|
- e.g. `i386`, `x86_64`, `arm`, `arm64`, `riscv64`, `loongarch64`
|
|||
|
- Though unsupprted, MSVC arm64ec is handled correctly (returns `arm64ec`)
|
|||
|
- `C_System.appDir`: `() -> string`, return the directory of Red Panda C++.
|
|||
|
- e.g. `/usr/bin`, `C:/Program Files/RedPanda-Cpp`
|
|||
|
- `C_System.appLibexecDir`: `() -> string`, return the libexec directory of Red Panda C++.
|
|||
|
- e.g. `/usr/libexec/RedPandaCPP`, `C:/Program Files/RedPanda-Cpp`
|
|||
|
- `C_System.appResourceDir`: `() -> string`, return the resource directory of Red Panda C++.
|
|||
|
- e.g. `/usr/share/RedPandaCPP`, `C:/Program Files/RedPanda-Cpp`
|
|||
|
- `C_System.osArch`: `() -> string`, return the architecture of the OS, name following `QSysInfo`.
|
|||
|
- e.g. `i386`, `x86_64`, `arm`, `arm64`
|
|||
|
- Windows arm64 is handled correctly even if Red Panda C++ runs under emulation
|
|||
|
- `C_System.supportedAppArchList`: `() -> [string]`, return supported application architectures by OS, name following `QSysInfo`.
|
|||
|
- e.g. `{"i386", "x86_64", "arm64"}`
|
|||
|
- Windows 10 1709 or later: accurate result
|
|||
|
- Legacy Windows: hardcoded
|
|||
|
- `{"i386", "x86_64"}` for x86_64 even though WoW64 is not available
|
|||
|
- macOS: accurate result supposed, but not tested
|
|||
|
- Linux: osArch + appArch + QEMU user mode emulation
|
|||
|
- No multilib detection. It’s packager’s responsibility to detect multilib support in `compiler_hint.lua`
|
|||
|
- other (BSD): osArch + appArch (no multilib)
|
|||
|
|
|||
|
Windows specific:
|
|||
|
|
|||
|
- `C_System.readRegistry`: `(subKey: string, name: string) -> string | nil`, read `subKey\name` from `HKEY_CURRENT_USER` and `HKEY_LOCAL_MACHINE` in order.
|
|||
|
- `name` can be empty string for default value
|
|||
|
|
|||
|
### `C_Util`
|
|||
|
|
|||
|
- `C_Util.format`: `(format: string, ...) -> string`, Qt-style string format, replace `%1`, `%2`, etc. with arguments.
|