From 12c49190901d5e4d65398ef64bed8815aaa4afbd Mon Sep 17 00:00:00 2001 From: Wouter Wijsman Date: Sat, 2 Mar 2024 13:51:54 +0100 Subject: [PATCH] Add contributor info --- contributing.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ images/repos.png | Bin 0 -> 21303 bytes 2 files changed, 47 insertions(+) create mode 100644 contributing.md create mode 100644 images/repos.png diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..30f5de1 --- /dev/null +++ b/contributing.md @@ -0,0 +1,47 @@ +--- +title: Contributing +layout: home +nav_order: 7 +--- + +# Contributing +{: .fs-8 .fw-700 .text-center } + +There are many ways to contribute to our efforts to make developing homebrew for the Playstation Portable easier for everyone. The first step would be to [join our Discord](https://discord.gg/bePrj9W)! + +## Ways to contribute + +Before making any contribution, it's best to talk about what you want to do on [Discord](https://discord.gg/bePrj9W). After that, here are some places you can look to contribute: + +- Found an bug or are you missing something? Report it [here](https://github.com/pspdev/pspdev/issues)! +- Want to solve a bug? Find our bug tracker [here](https://github.com/issues?q=is%3Aopen+is%3Aissue+archived%3Afalse+user%3Apspdev+)! +- Want to add a library? Find out how to [here](https://github.com/pspdev/psp-packages/blob/master/CONTRIBUTING.md)! +- Want to add a function? Look [here](https://github.com/pspdev/pspsdk)! + +Pull requests are always welcome! + +## Where can I find the code? + +The PSPDEV toolchain is build using quite a few different repositories which each add their own piece to the system. If you just want to build everything at once, the [pspdev repository](https://github.com/pspdev/pspdev) is the place to go. + +There are automated builds, which build each part individually if there are changes. Here is a basic image showing the build order: + +![Image with oder of repositories](images/repos.png) + +Lets go over what each repository in this list does and where they get the things they build from: + +- [psptoolchain-allegrex](https://github.com/pspdev/psptoolchain-allegrex) contains scripts to build the following tools: + - [binutils and gdb](https://github.com/pspdev/binutils-gdb) provide supporting tools for debugging, linking and building software. + - [gcc](https://github.com/pspdev/gcc) is the compiler used for building homebrew. + - [newlib](https://github.com/pspdev/newlib) is the C library used in PSPDEV, providing many posix functions. + - [pthread](https://github.com/pspdev/pthread-embedded) is a multithreading library used by `std::thread` in C++ among other things. +- [psptoolchain-extra](https://github.com/pspdev/psptoolchain-extra) contains scripts to build the following tools: + - [psp-pacman](https://github.com/pspdev/psp-pacman) is the package manager for installing and updating libraries. + - [psp-cmake](https://github.com/pspdev/psptoolchain-extra/blob/main/patches/psp-cmake) is a wrapper script for cmake using the psp toolchain file. + - [psp-pkg-config](https://github.com/pspdev/psptoolchain-extra/blob/main/patches/psp-pkg-config) is a wrapper script for pkg-config for libraries in PSPDEV. +- [psptoolchain](https://github.com/pspdev/psptoolchain) builds [psptoolchain-allegrex](https://github.com/pspdev/psptoolchain-allegrex) and [psptoolchain-extra](https://github.com/pspdev/psptoolchain-extra) combines them. +- [pspsdk](https://github.com/pspdev/pspsdk) contains all the PSP specific libraries that we consider to be part of the base system. A lot of functions offered by the official PSP SDK from Sony are also provided here. It also contains [samples](https://github.com/pspdev/pspsdk/tree/master/src/samples) for how to use these functions. +- [psp-packages](https://github.com/pspdev/psp-packages) contains build files for all the 3rd party libraries that are supported by PSPDEV. There are over 50 of them, including SDL2, curl, OpenGL, sqlite, lua and openal to just name a few. +- [pspdev](https://github.com/pspdev/pspdev) combines everything listed above to get the full build of the PSPDEV SDK. + +Pull requests for any repository are always appreciated! Have fun contributing and don't forget to say hi on [Discord](https://discord.gg/bePrj9W)! \ No newline at end of file diff --git a/images/repos.png b/images/repos.png new file mode 100644 index 0000000000000000000000000000000000000000..51abf256b9215b6448c2185ac08241bc492a2eb5 GIT binary patch literal 21303 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