diff options
Diffstat (limited to 'toolchain.txt')
| -rw-r--r-- | toolchain.txt | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/toolchain.txt b/toolchain.txt deleted file mode 100644 index d34d54b..0000000 --- a/toolchain.txt +++ /dev/null @@ -1,171 +0,0 @@ -If you wish to build the toolchain yourself, beware that this process can get -pretty tedious unless you have a powerful enough computer with plenty of -threads to spare. A system with at least 4 to 8 total threads or more is -recommended. You may have better success building the toolchain in ArchLinux -especially if you want to build the most recent versions of GCC. Debian -Buster however, may have about the same chance of success in building as -using ArchLinux. - -It is recommended to stick with GCC 7.4.0 and Binutils 2.31 as this is the -version PSn00bSDK is most tested with. Though generally, it doesn't hurt to -try out newer versions and has been known to work flawlessly without issue. - -These instructions are only for Linux, though they can be adapted for -building in Windows using MSys2 or Cygwin64. Beware that libgcc cannot -be built under Windows as the libgcc build process depends on symlinks -which is not supported by the operating system and is not wrapped by Msys2 -and Cygwin64. The only workaround is to first build GCC in Linux then copy -the libgcc.a library from it to the Windows build. - - -Make sure the following packages are installed prior to building: -* make -* build-essential or build-essentials, if you don't have GCC installed yet - (a host toolchain is required to build the rest of the SDK anyway). - - -Building binutils: - -Binutils must be built first as GCC depends on binutils built for the same -target architecture. In this case, building binutils and GCC to target -mipsel-unknown-elf. - -* Download binutils source files at ftp://ftp.gnu.org. Choose a version you - wish to use with PSn00bSDK. The reference version that PSn00bSDK is tested - with most is 2.31. - -* Extract the contents of the archive, preferably in a directory named - "toolchain" (or whatever). - -* Create a directory named binutils-build inside the toolchain directory. Do - not create it inside the binutils directory with the source files. - -* Enter the binutils-build directory and configure binutils from there - with the following command line: - -../binutils-<version>/configure --prefix=/usr/local/mipsel-unknown-elf \ ---target=mipsel-unknown-elf --disable-docs --disable-nls --with-float=soft - -Replace <version> with the version of binutils you wish to use. You may also -want to change the prefix argument to a path you prefer to have the toolchain -installed to (ie. somewhere within your home directory so you wouldn't need -root privileges to install). - -* Run `make -j 4` to compile binutils (-j specifies how many simultaneous - jobs to spawn at once, set it equal to the number of cores/threads your - system has available to speed up compiling). - -* Run `make install-strip` to install binutils to the path specified by the - --prefix argument (root privileges are required if the prefix points to - /usr/local). - - -Building gcc: - -With binutils built it should be possible to build the GCC toolchain. Since -GCC is considerably larger than binutils, compile time is going to be much -longer so it's going to take a longer while to build this. - -* Download gcc source files at ftp://ftp.gnu.org and choose the version you - wish to use with PSn00bSDK. The reference version that PSn00bSDK is tested - with most is 7.4.0. - -* Extract it to the same toolchain directory you extracted binutils in. - -* Enter the extracted "gcc-<version>" folder and run the following command - from there to download the required dependencies: - -./contrib/download_prerequisites - -* Go back and create a directory named gcc-build inside the toolchain - directory. - -* Enter the gcc-build directory and configure gcc from there with the - following command line: - -../gcc-<version>/configure --prefix=/usr/local/mipsel-unknown-elf \ ---target=mipsel-unknown-elf --disable-docs --disable-nls --disable-libada \ ---disable-libssp --disable-libquadmath --disable-libstdc++-v3 \ ---with-float=soft --enable-languages=c,c++ --with-gnu-as --with-gnu-ld - -Replace <version> with the version of gcc you downloaded. The prefix path -must match to what you've specified for binutils earlier, if you've decided -to use a different prefix path for binutils. - -When building under Windows you must additionally specify --disable-libgcc, -as libgcc cannot be built under Windows as it needs symlinks which are not -supported by the operating system. - -* Run make in the same manner you built binutils with. - -* Run `make install-strip` to install gcc to the path specified by --prefix - (root privileges are required if the prefix points to /usr/local). - -* Add a path to the bin directory of the toolchain into your PATH environment - variable by adding the following line in your .bashrc or .bash_profile file: - -export PATH=$PATH:/usr/local/mipsel-unknown-elf/bin - -Under Windows, you'll have to add the path to the PATH environment variable -through System Properties. - - -Note regarding C++ support: - -C++ support in PSn00bSDK, besides compile-time features like constexpr, only -goes as far as basic classes, namespaces and the ability to dynamically create -and delete class objects at any point of the program. The required dependencies -are supplied by libc of libpsn00b. - -Standard C++ libraries are not implemented and likely never going to be -implemented due to bloat concerns that it may introduce. Besides, the official -SDK lacks full C++ support as well. - -If you're trying to compile with C++ code and you get a linker error about -undefined vtables, try specifying --fno-rtti to the g++ command line. - ------------------------------------------------------------------------------ -Updating the ldscript (NO LONGER REQUIRED as PSn00bSDK now ships with its own -linker scripts, the section below is only kept for reference): - -The following changes used to be required in order for basic C++ functionality -to work in older PSn00bSDK versions. The changes define the constructor and -deconstructor sections which are required for the relevant support functions -in PSn00bSDK's libc library to be linked properly for C++. - -* Go to mipsel-unknown-elf/lib/ldscripts in the toolchain directory. - -* Open elf32elmip.x in any text editor. - -* Locate the .text definition (with the {} brackets) and add the following - inside the bracket block: - -__CTOR_LIST__ = .; -___CTOR_LIST__ = .; -LONG (((__CTOR_END__ - __CTOR_LIST__) / 4) - 2) -KEEP (*(SORT (.ctors.*))) -KEEP (*(.ctors)) -LONG (0x00000000) -__CTOR_END__ = .; -. = ALIGN (0x10); - -__DTOR_LIST__ = .; -___DTOR_LIST__ = .; -LONG (((__DTOR_END__ - __DTOR_LIST__) / 4) - 2) -KEEP (*(SORT (.dtors.*))) -KEEP (*(.dtors)) -LONG (0x00000000) -__DTOR_END__ = .; -. = ALIGN (0x10); - -* Save script changes. - -Since there's no known way (at least to me -Lameguy64) to configure GCC such -that it uses the modified ldscript as the default, you must specify the -modified script during the linking stage of your projects with the -T -argument, when invoking mipsel-unknown-elf-ld. - -Alternatively, you can make a copy of the ldscript file and modify it within -your project directory. This is especially useful if your project uses code -overlays. - |
