mirror of
https://github.com/cemu-project/Cemu.git
synced 2024-11-28 03:54:18 +01:00
Add coding style guidelines and clang-format file
This commit is contained in:
parent
92ab87b049
commit
14dd7a72a7
65
.clang-format
Normal file
65
.clang-format
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlinesLeft: false
|
||||||
|
AlignOperands: true
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowShortBlocksOnASingleLine: Empty
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortEnumsOnASingleLine: true
|
||||||
|
AllowShortFunctionsOnASingleLine: Empty
|
||||||
|
AllowShortIfStatementsOnASingleLine: false
|
||||||
|
AllowShortLambdasOnASingleLine: Inline
|
||||||
|
AlwaysBreakTemplateDeclarations: true
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: true
|
||||||
|
AfterControlStatement: Always
|
||||||
|
AfterEnum: true
|
||||||
|
AfterExternBlock: true
|
||||||
|
AfterFunction: true
|
||||||
|
AfterNamespace: true
|
||||||
|
AfterStruct: true
|
||||||
|
AfterUnion: true
|
||||||
|
BeforeElse: true
|
||||||
|
BeforeWhile: true
|
||||||
|
SplitEmptyFunction: false
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
ColumnLimit: 0
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
IndentWidth: 4
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
Language: Cpp
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: All
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
PointerAlignment: Left
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: false
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: false
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCaseColon: false
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceBeforeSquareBrackets: false
|
||||||
|
SpaceInEmptyBlock: false
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInConditionalStatement: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
Standard: Latest
|
||||||
|
TabWidth: 4
|
||||||
|
UseTab: Always
|
98
CODING_STYLE.md
Normal file
98
CODING_STYLE.md
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
|
||||||
|
# Coding style guidelines for Cemu
|
||||||
|
|
||||||
|
This document describes the latest version of our coding-style guidelines. Since we did not use this style from the beginning, older code may not adhere to these guidelines. Nevertheless, use these rules even if the surrounding code does not match.
|
||||||
|
|
||||||
|
Cemu comes with a `.clang-format` file which is supported by most IDEs for formatting. Avoid auto-reformatting whole files, PRs with a lot of formatting changes are difficult to review.
|
||||||
|
|
||||||
|
## Names for variables, functions and classes
|
||||||
|
|
||||||
|
- Always prefix class member variables with `m_`
|
||||||
|
- Always prefix static class variables with `s_`
|
||||||
|
- For variable names: Camel case, starting with a lower case letter after the prefix. Examples: `m_option`, `s_audioVolume`
|
||||||
|
- For functions/class names: Use camel case starting with a capital letter. Examples: `MyClass`, `SetActive`
|
||||||
|
- Avoid underscores in variable names after the prefix. Use `m_myVariable` instead of `m_my_variable`
|
||||||
|
|
||||||
|
## About types
|
||||||
|
|
||||||
|
Cemu provides it's own set of basic fixed-width types. They are:
|
||||||
|
`uint8`, `sint8`, `uint16`, `sint16`, `uint32`, `sint32`, `uint64`, `sint64`. Always use these types over something like `uint32_t`. Using `size_t` is also acceptable where suitable. Avoid C types like `int` or `long`. The only exception is when interacting with external libraries which expect these types as parameters.
|
||||||
|
|
||||||
|
## When and where to put brackets
|
||||||
|
|
||||||
|
Always put curly-brackets (`{ }`) on their own line. Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
void FooBar()
|
||||||
|
{
|
||||||
|
if (m_hasFoo)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
As an exception, you can put short lambdas onto the same line:
|
||||||
|
```
|
||||||
|
SomeFunc([]() { .... });
|
||||||
|
```
|
||||||
|
You can skip brackets for single-statement `if`. Example:
|
||||||
|
```
|
||||||
|
if (cond)
|
||||||
|
action();
|
||||||
|
```
|
||||||
|
|
||||||
|
## Printing
|
||||||
|
|
||||||
|
Avoid sprintf and similar C-style formatting API. Use `fmt::format()`.
|
||||||
|
In UI related code you can use `formatWxString`, but be aware that number formatting with this function will be locale dependent!
|
||||||
|
|
||||||
|
## Strings and encoding
|
||||||
|
|
||||||
|
We use UTF-8 encoded `std::string` where possible. Some conversations need special handling and we have helper functions for those:
|
||||||
|
```cpp
|
||||||
|
// std::filesystem::path <-> std::string (in precompiled.h)
|
||||||
|
std::string _pathToUtf8(const fs::path& path);
|
||||||
|
fs::path _utf8ToPath(std::string_view input);
|
||||||
|
|
||||||
|
// wxString <-> std::string
|
||||||
|
wxString to_wxString(std::string_view str); // in gui/helpers.h
|
||||||
|
std::string wxString::utf8_string();
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
|
||||||
|
If you want to write to log.txt use `cemuLog_log()`. The log type parameter should be mostly self-explanatory. Use `LogType::Force` if you always want to log something. For example:
|
||||||
|
`cemuLog_log(LogType::Force, "The value is {}", 123);`
|
||||||
|
|
||||||
|
## HLE and endianness
|
||||||
|
|
||||||
|
A pretty large part of Cemu's code base are re-implementations of various Cafe OS modules (e.g. `coreinit.rpl`, `gx2.rpl`...). These generally run in the context of the emulated process, thus special care has to be taken to use types with the correct size and endianness when interacting with memory.
|
||||||
|
|
||||||
|
Keep in mind that the emulated Espresso CPU is 32bit big-endian, while the host architectures targeted by Cemu are 64bit litte-endian!
|
||||||
|
|
||||||
|
To keep code simple and remove the need for manual endian-swapping, Cemu has templates and aliases of the basic types with explicit endian-ness.
|
||||||
|
For big-endian types add the suffix `be`. Example: `uint32be`
|
||||||
|
|
||||||
|
When you need to store a pointer in the guest's memory. Use `MEMPTR<T>`. It will automatically store any pointer as 32bit big-endian. The pointer you store must point to memory that is within the guest address space.
|
||||||
|
|
||||||
|
## HLE interfaces
|
||||||
|
|
||||||
|
The implementation for each HLE module is inside a namespace with a matching name. E.g. `coreinit.rpl` functions go into `coreinit` namespace.
|
||||||
|
|
||||||
|
To expose a new function as callable from within the emulated machine, use `cafeExportRegister` or `cafeExportRegisterFunc`. Here is a short example:
|
||||||
|
```cpp
|
||||||
|
namespace coreinit
|
||||||
|
{
|
||||||
|
uint32 OSGetCoreCount()
|
||||||
|
{
|
||||||
|
return Espresso::CORE_COUNT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Init()
|
||||||
|
{
|
||||||
|
cafeExportRegister("coreinit", OSGetCoreCount, LogType::CoreinitThread);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
You may also see some code which uses `osLib_addFunction` directly. This is a deprecated way of registering functions.
|
11
README.md
11
README.md
@ -5,7 +5,7 @@
|
|||||||
[![Matrix Server](https://img.shields.io/matrix/cemu:cemu.info?server_fqdn=matrix.cemu.info&label=cemu:cemu.info&logo=matrix&logoColor=FFFFFF)](https://matrix.to/#/#cemu:cemu.info)
|
[![Matrix Server](https://img.shields.io/matrix/cemu:cemu.info?server_fqdn=matrix.cemu.info&label=cemu:cemu.info&logo=matrix&logoColor=FFFFFF)](https://matrix.to/#/#cemu:cemu.info)
|
||||||
|
|
||||||
This is the code repository of Cemu, a Wii U emulator that is able to run most Wii U games and homebrew in a playable state.
|
This is the code repository of Cemu, a Wii U emulator that is able to run most Wii U games and homebrew in a playable state.
|
||||||
It's written in C/C++ and is being actively developed with new features and fixes to increase compatibility, convenience and usability.
|
It's written in C/C++ and is being actively developed with new features and fixes.
|
||||||
|
|
||||||
Cemu is currently only available for 64-bit Windows, Linux & macOS devices.
|
Cemu is currently only available for 64-bit Windows, Linux & macOS devices.
|
||||||
|
|
||||||
@ -24,11 +24,9 @@ Cemu is currently only available for 64-bit Windows, Linux & macOS devices.
|
|||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
You can download the latest Cemu releases from the [GitHub Releases](https://github.com/cemu-project/Cemu/releases/) or from [Cemu's website](https://cemu.info).
|
You can download the latest Cemu releases for Windows, Linux and Mac from the [GitHub Releases](https://github.com/cemu-project/Cemu/releases/). For Linux you can also find Cemu on [flathub](https://flathub.org/apps/info.cemu.Cemu).
|
||||||
|
|
||||||
Cemu is currently only available in a portable format so no installation is required besides extracting it in a safe place.
|
On Windows Cemu is currently only available in a portable format so no installation is required besides extracting it in a safe place.
|
||||||
|
|
||||||
The native Linux build is currently a work-in-progress. See [Current State Of Linux builds](https://github.com/cemu-project/Cemu/issues/107) for more information about the things to be aware of.
|
|
||||||
|
|
||||||
The native macOS build is currently purely experimental and should not be considered stable or ready for issue-free gameplay. There are also known issues with degraded performance due to the use of MoltenVK and Rosetta for ARM Macs. We appreciate your patience while we improve Cemu for macOS.
|
The native macOS build is currently purely experimental and should not be considered stable or ready for issue-free gameplay. There are also known issues with degraded performance due to the use of MoltenVK and Rosetta for ARM Macs. We appreciate your patience while we improve Cemu for macOS.
|
||||||
|
|
||||||
@ -36,7 +34,7 @@ Pre-2.0 releases can be found on Cemu's [changelog page](https://cemu.info/chang
|
|||||||
|
|
||||||
## Build Instructions
|
## Build Instructions
|
||||||
|
|
||||||
To compile Cemu yourself on Windows, Linux or macOS, view the [BUILD.md file](/BUILD.md).
|
To compile Cemu yourself on Windows, Linux or macOS, view [BUILD.md](/BUILD.md).
|
||||||
|
|
||||||
## Issues
|
## Issues
|
||||||
|
|
||||||
@ -46,6 +44,7 @@ The old bug tracker can be found at [bugs.cemu.info](https://bugs.cemu.info) and
|
|||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Pull requests are very welcome. For easier coordination you can visit the developer discussion channel on [Discord](https://discord.gg/5psYsup) or alternatively the [Matrix Server](https://matrix.to/#/#cemu:cemu.info).
|
Pull requests are very welcome. For easier coordination you can visit the developer discussion channel on [Discord](https://discord.gg/5psYsup) or alternatively the [Matrix Server](https://matrix.to/#/#cemu:cemu.info).
|
||||||
|
Before submitting a pull request, please read and follow our code style guidelines listed in [CODING_STYLE.md](/CODING_STYLE.md).
|
||||||
|
|
||||||
If coding isn't your thing, testing games and making detailed bug reports or updating the (usually outdated) compatibility wiki is also appreciated!
|
If coding isn't your thing, testing games and making detailed bug reports or updating the (usually outdated) compatibility wiki is also appreciated!
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user