Nintendo switch support (#8069)
* Add config section for Nintendo Switch * Add compiler configuration for Nintendo Switch and it's CPU * Add specific lib code for Nintendo Switch * Add GC support for Nintendo Switch * Update changelog for Nintendo Switch * Update changelog with more info about fixed paths * Cleaned up GC memory management a bit * Relocate docs for Switch * Rename aarch64NoneElfGcc to nintendoSwitchGCC * Remove armv8a57 * Fix installer.ini * Reuse code in linux and amd64 * Add posix defs for nintendo switch * Add more defined sections for nintendo switch * Remove old comment * Add what's not supported for Nintendo Switch docs * Make nintendoswitch == posix * Remove DEVKITPRO references from nim.cfg * Make PR extccomp changes * Remove Result type alias * Add separate switch consts file * Update docs for nintendo switch * Fix travis errors with undefined consts and add correct wait.h procs
This commit is contained in:
parent
b74b16ffde
commit
559a7615ad
21 changed files with 1352 additions and 43 deletions
46
doc/nimc.rst
46
doc/nimc.rst
|
|
@ -228,6 +228,52 @@ configuration file should contain something like::
|
|||
arm.linux.gcc.exe = "arm-linux-gcc"
|
||||
arm.linux.gcc.linkerexe = "arm-linux-gcc"
|
||||
|
||||
Cross compilation for Nintendo Switch
|
||||
=====================================
|
||||
|
||||
Simply add --os:nintendoswitch
|
||||
to your usual ``nim c`` or ``nim cpp`` command and set the ``SWITCH_LIBS``
|
||||
and ``SWITCH_INCLUDES`` environment variables to something like:
|
||||
|
||||
.. code-block:: console
|
||||
export SWITCH_INCLUDES="-I$DEVKITPRO/libnx/include"
|
||||
export SWITCH_LIBS="-specs=$DEVKITPRO/libnx/switch.specs -L$DEVKITPRO/libnx/lib -lnx"
|
||||
|
||||
or setup a nim.cfg file like so:
|
||||
|
||||
.. code-block:: Nim
|
||||
#nim.cfg
|
||||
--passC="-I$DEVKITPRO/libnx/include"
|
||||
--passL="-specs=$DEVKITPRO/libnx/switch.specs -L$DEVKITPRO/libnx/lib -lnx"
|
||||
|
||||
The DevkitPro setup must be the same as the default with their new installer
|
||||
`here for Mac/Linux <https://github.com/devkitPro/pacman/releases>`_ or
|
||||
`here for Windows <https://github.com/devkitPro/installer/releases>`_.
|
||||
|
||||
For example, with the above mentioned config::
|
||||
|
||||
nim c --os:nintendoswitch switchhomebrew.nim
|
||||
|
||||
This will generate a file called ``switchhomebrew.elf`` which can then be turned into
|
||||
an nro file with the ``elf2nro`` tool in the DevkitPro release. Examples can be found at
|
||||
`the nim-libnx github repo <https://github.com/jyapayne/nim-libnx.git>`_ or you can use
|
||||
`the switch builder tool <https://github.com/jyapayne/switch-builder.git>`_.
|
||||
|
||||
Environment variables are:
|
||||
- ``SWITCH_LIBS`` for any extra libraries required by your application (``-lLIBNAME`` or ``-LLIBPATH``)
|
||||
- ``SWITCH_INCLUDES`` for any extra include files (``-IINCLUDE_PATH``)
|
||||
|
||||
There are a few things that don't work because the DevkitPro libraries don't support them.
|
||||
They are:
|
||||
|
||||
1. Waiting for a subprocess to finish. A subprocess can be started, but right
|
||||
now it can't be waited on, which sort of makes subprocesses a bit hard to use
|
||||
2. Dynamic calls. DevkitPro libraries have no dlopen/dlclose functions.
|
||||
3. Command line parameters. It doesn't make sense to have these for a console
|
||||
anyways, so no big deal here.
|
||||
4. mqueue. Sadly there are no mqueue headers.
|
||||
5. ucontext. No headers for these either. No coroutines for now :(
|
||||
6. nl_types. No headers for this.
|
||||
|
||||
DLL generation
|
||||
==============
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue