diff --git a/doc/CONTRIBUTING.md b/doc/CONTRIBUTING.md new file mode 100644 index 0000000..ca260d7 --- /dev/null +++ b/doc/CONTRIBUTING.md @@ -0,0 +1,71 @@ +# Contributing +## Overview +`rts` strives to run on a wide variety of platforms, including low-end +and old hardware, such as PSX or even `i486` computers. This is possible +thanks to the use of portable source code and the wide availability of +`sdl-1.2`. However, `rts` should be easy to extend to other platforms. + +## License +As stated on [the project license](../LICENSE), `rts` is licensed by +the GNU General Public License, either version 3 of the license, or +later. Anyone contributing their own source code to this project must +adhere to this license. Also, only source code from other projects +compatible with the project license is allowed. + +## C language revision +Because of C11 not being available for the `i386-mingw32` toolchain, C99 +is the selected language revision for this project. On the other hand, +feel free to use any helpful C99 features. + +## Compiler extensions +Avoid compiler-specific extensions unless absolutely needed. While this +project is currently built using the GNU toolchain, those using other +compilers might appreciate not having to deal with such extensions. + +## Platform-specific code +Separate platform-agnostic code from platform-specific code. The usual +method used by this project is to separate platform-specific code into +its own directory. Please, do not use macros for this purpose, since +they make code more difficult to read and maintain. + +This is the typical tree structure of a module: + +``` +module_name/ +├── CMakeLists.txt +├── inc +│   └── file.h +├── privinc +│   └── file.h +├── ps1 +│   ├── inc +│   │   └── module_name +│   │   └── file.h +│   ├── privinc +│   │   └── ps1 +│   │   └── file.h +│   └── src +│   └── file.c +└── sdl-1.2 + ├── inc + │   └── module_name + │   └── file.h + ├── privinc + │   └── sdl-1.2 + │   └── file.h + └── src + └── file.c +``` + +Where: + +- `src` holds the source files defining the implementation of a given module. +- `inc` holds public header files accessible to other modules. +- `privinc` holds public header files accessible to other modules. +- `ps1` and `sdl-1.2` are two of the platforms supported by this project. + +## C code conventions + +- Use Allman style for brackets. +- Strive for maximum `const`-correctness. +- Keep a hard 80-column limit.