Building Atmosphère on Windows using MSYS2

Sometimes you need to build the binaries for Atmosphère, or you want to change something on the source code, for building your starting point should be: https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/building.md
On that document you can read:
Building Atmosphère is a very straightforward process that relies almost exclusively on tools provided by the devkitPro organization.​
Dependencies:
  • devkitA64
  • devkitARM
  • Python 2 (Python 3 may work as well, but this is not guaranteed)
  • LZ4
  • PyCryptodome (optional)
  • Hactool
Setup a DevKitPro environment: (https://devkitpro.org/wiki/Getting_Started)
Install the following packages via (dkp-)pacman:​
  • switch-dev
  • switch-glm
  • switch-libjpeg-turbo
  • devkitARM
  • devkitarm-rules
  • hactool
Install the following library via python's package manager pip, required by exosphere:​
  • lz4
Finally, clone the Atmosphère repository and run make under its root directory.​

That instructions are a little plain for we the noobs.

First you need Install a MSYS environment:
The latest instructions for install the MSYS environment are on https://gbatemp.net/threads/install-msys-environment.652234/ if you don't have one working, use them.

After you have the MSYS environment working you need to install DevKitPro
For that you can follow the instructions on the tutorial https://gbatemp.net/threads/setup-a-devkitpro-environment-on-windows.652238/

Now you can install DevKitPro packages:
Bash:
pacman -S --noconfirm switch-dev devkitA64 dkp-toolchain-vars libnx switch-tools switch-mesa switch-libdrm_nouveau switch-sdl2

And Atmosphère prerequisites
Bash:
Pacman -Sy --noconfirm devkitA64 devkitARM devkitarm-rules hactool mingw-w64-x86_64-python mingw-w64-x86_64-python-lz4 mingw-w64-x86_64-python-pycryptodome switch-dev switch-glm switch-libjpeg-turbo mingw-w64-x86_64-python-pip

For me I had to add zip package because even if wasn't explicit indicated on the build page, the code needs it.

Additional you need the packages git make lz4 for all to work, use the command:

Bash:
Pacman -Sy --noconfirm zip git make lz4


Everything on a combined command:​

Bash:
pacman -S --noconfirm switch-dev devkitA64 dkp-toolchain-vars libnx switch-tools switch-mesa switch-libdrm_nouveau switch-sdl2 devkitA64 devkitARM devkitarm-rules hactool mingw-w64-x86_64-python mingw-w64-x86_64-python-lz4 mingw-w64-x86_64-python-pycryptodome switch-dev switch-glm switch-libjpeg-turbo mingw-w64-x86_64-python-pip zip git make lz4


The package hactool need you to copy your own prod.keys file on $HOME/.switch folder. (c:\msys64\home\USERNAME\.switch if you use the default installation folder)

LibNX Dependency
Atmosphère depends heavily on LibNX, generally when a major version of firmware is released or great changes on the code are made, changes to LibNX are also made.
The Atmosphère team works on their own repo of LibNX (https://github.com/Atmosphere-NX/libnx) and forward Pull Request to official SwitchBrew LibNX repo (https://github.com/switchbrew/libnx).






On november of 2024, just must take in account: The most recent LibNX commit is needed. So BEFORE built Atmosphère but after installing all packages you need to run this commands:
Bash:
cd ~
git clone --recursive https://github.com/Atmosphere-NX/libnx.git -b 1900_support
cd libnx
make install -j$(nproc)
This clone the LibNX repo from Atmosphère's team using the branch for 1900 support and install it on your environment.
After this you can continue to build Atmosphère.






So if there are changes on LibNX you need to build it and install on your setup.
If you haven't done already, setup the environment variables
You can test it running the command
export
You should have this:
Bash:
export DEVKITPRO=/opt/devkitpro
export DEVKITARM=${DEVKITPRO}/devkitARM
export DEVKITPPC=${DEVKITPRO}/devkitPPC
export PATH=${DEVKITPRO}/tools/bin:$PATH



Then go to the Atmosphere-NX/LibNX repo and look what is the new branch for the current firmware, by example, for Firmware 16.0.0 the branch name is "1600_Support"

1677718224337.png

Then go to your MSYS MinGW64 window and clone the Atmosphere-NX/LibNX repo

Bash:
cd ~
git clone --recursive https://github.com/Atmosphere-NX/libnx.git
cd libnx

And checkout the needed branch:

Bash:
git checkout 1600_support

Then build and install the new LibNX libraries

Bash:
make install -j$(nproc)

Now you can build Atmosphère with latest LibNX code; remember if you update the pacman LibNX package the changes get reversed and you need to build LibNX again.

Now is time to build the binaries
Clone the repository:
Bash:
cd ~
git clone --recursive https://github.com/Atmosphere-NX/Atmosphere

Go to new created Atmosphère folder
Bash:
cd Atmosphere

Be sure you have defined the environment variables for DevKitPro
You can test it running the command
export
You should have this:
Bash:
export DEVKITPRO=/opt/devkitpro
export DEVKITARM=${DEVKITPRO}/devkitARM
export DEVKITPPC=${DEVKITPRO}/devkitPPC
export PATH=${DEVKITPRO}/tools/bin:$PATH



Copy prod.keys file on $HOME/.switch
Bash:
mkdir ~/.switch
cp YOURCURRENTPATHTOKEYS ~/.switch/prod.keys

And now you are ready to start the building process:
Bash:
make -j$(nproc)

I do use the "-j$(nproc)" parameter to "bleed" all the available CPU to run the compiler, without that the whole process could take up to 1 hour.

Also Note:, if you use make -j is possible a Error 2 can be generated, run make again without parameters. The process will continue where failed, since the two latest versions of DevKitPro using the -j parameters is not synced and the make process can fail by timeouts.


I want to thank a lot to @binkinator and @godreborn for all the help and inspiration to make this guide, and want to ask you for help improving this guide.

Also special thanks to @godreborn for been a support of the users replies and suggestions to the OP.

Remember, as you are getting a new set of binaries, you need new set of sigpatches if you use it. So the great tool from @mrdude comes in hand, the latest release can be downloaded from: https://github.com/mrdude2478/IPS_Patch_Creator/releases/; you use the program to generate a new set of patches for your recently build package3 file.


Latest IPS Patch Creator:
https://gbatemp.net/download/ips-patch-creator-1-5-9.38850/




-Edited: add sigpatches step and clean up a little-
-Edit 2, add LibNX build-
 

Attachments

  • 1695782853186.png
    1695782853186.png
    62.7 KB · Views: 104
  • 1695782902542.png
    1695782902542.png
    6.4 KB · Views: 103
  • Sigpatch-IPS-Creator_1.5.7_Yandex.png
    Sigpatch-IPS-Creator_1.5.7_Yandex.png
    3.3 KB · Views: 35
Last edited by impeeza,

Bosstendo97

Member
Newcomer
Joined
Sep 17, 2023
Messages
16
Trophies
0
Age
16
XP
189
Country
Thailand
all MSYS and start over.
alright
Post automatically merged:

all MSYS and start over.
do you have discord?
Post automatically merged:

all MSYS and start over.
$ pacman -S switch-dev
:: There are 13 members in group switch-dev:
:: Repository dkp-libs
1) catnip 2) deko3d 3) devkita64-cmake 4) libnx 5) switch-cmake 6) switch-examples
7) switch-pkg-config
:: Repository dkp-windows
8) devkit-env 9) devkitA64 10) devkitA64-gdb 11) general-tools 12) switch-tools 13) uam

Enter a selection (default=all):
warning: devkit-env-1.0.1-2 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Packages (15) devkita64-rules-1.1.1-1 dkp-cmake-common-utils-1.5.2-1 catnip-0.1.0-1
deko3d-0.5.0-1 devkit-env-1.0.1-2 devkitA64-r27-2 devkitA64-gdb-14.1-1
devkita64-cmake-1.1.2-1 general-tools-1.4.4-1 libnx-4.7.0-1 switch-cmake-1.5.1-1
switch-examples-20231028-1 switch-pkg-config-0.28-4 switch-tools-1.12.0-1
uam-1.1.0-2

Total Download Size: 0.77 MiB
Total Installed Size: 426.32 MiB
Net Upgrade Size: 426.32 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
switch-cmake-1.5.1-1-any 5.7 KiB 43.7 KiB/s 00:00 [###############################] 100%
dkp-cmake-common-utils-1.5... 8.0 KiB 45.5 KiB/s 00:00 [###############################] 100%
switch-examples-20231028-1-any 770.1 KiB 1217 KiB/s 00:01 [###############################] 100%
Total (3/3) 783.9 KiB 722 KiB/s 00:01 [###############################] 100%
(15/15) checking keys in keyring [###############################] 100%
(15/15) checking package integrity [###############################] 100%
error: dkp-cmake-common-utils: signature from "fincs <[email protected]>" is unknown trust
:: File /var/cache/pacman/pkg/dkp-cmake-common-utils-1.5.2-1-any.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n] n
error: switch-cmake: signature from "fincs <[email protected]>" is unknown trust
:: File /var/cache/pacman/pkg/switch-cmake-1.5.1-1-any.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n] n
error: switch-examples: signature from "fincs <[email protected]>" is unknown trust
:: File /var/cache/pacman/pkg/switch-examples-20231028-1-any.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n] n
error: failed to commit transaction (invalid or corrupted package)
Errors occurred, no packages were upgraded.
 
Last edited by Bosstendo97,

miniminx

Well-Known Member
Member
Joined
Jun 27, 2024
Messages
236
Trophies
0
Age
25
XP
491
Country
United States
For those that are having trouble with getting lz4 installed - no need to reinstall, you only need to do this:

First remove all python installs and dependencies:

Pacman -Rsc python
Now install python and python-pip:

Pacman -Sy python python-pip
Once they are installed, create an environment so you can use pip to install lz4:

python -m venv my-venv
my-venv/bin/pip install lz4

At this point you can just copy lz4 folder and lz4-4.3.3.dist-info folder from:

C:\msys64\home\MrDude\my-venv\lib\python3.12\site-packages
to
C:\msys64\usr\lib\python3.12\site-packages

Now anytime you want to use pip to install a package you can use:

my-venv/bin/pip install somepackage

Then just copy it into your site packages. That should save those that are having issues a lot of time.
 

rodrigues14

Well-Known Member
Newcomer
Joined
Nov 30, 2009
Messages
70
Trophies
1
XP
875
Country
Brazil
someone having problems to build latets atmosphere 1900_support ? Yesterday I try to build it again, but now console won't boot, only show atmo logo for 1 sec and black screen... I already update libnx to 1900_support too. Any tip?
 
  • Like
Reactions: impeeza and ELY_M

josete2k

Well-Known Member
Member
Joined
Apr 24, 2009
Messages
858
Trophies
1
Age
44
Location
Spain
XP
2,052
Country
Spain
Them is something Michael won't commit on GH yet... i was wondering is my MSYS2 setup broken

From this message:

you need new tool and set flag. npdmtool.exe has a pull request for the needed change. Or you can wait for @impeeza who is coming back soon.
"allow_debug": false,
"force_debug_prod": false, <= add this line
"force_debug": true
Attached switch-tools
 

Attachments

  • switch-tools.rar
    324.4 KB · Views: 6

ELY_M

Developer
Developer
Joined
Dec 6, 2007
Messages
717
Trophies
1
XP
1,730
Country
United States
I have same issue with black screen after I built with latest libnx (the 1900 support one)
I hope the last post before me will help. Thank you
 

impeeza

¡Kabito!
OP
Member
Joined
Apr 5, 2011
Messages
8,040
Trophies
4
Age
46
Location
At my chair.
XP
27,197
Country
Colombia
Stay safe out there sir 🤙🏽

someone having problems to build latets atmosphere 1900_support ? Yesterday I try to build it again, but now console won't boot, only show atmo logo for 1 sec and black screen... I already update libnx to 1900_support too. Any tip?

Same here

Sure.

The first commits of 1900_support were compiling and working fine even without the libnx update.

From this message:


Attached switch-tools
Hello there fellow tempers, I am just returning to my home. I am tired as hell.

@josete2k you are completely right, normally when a new firmware is released @SciresM also pull request to LibNX needed for the new Atmosphère get built, and on this case even he made a PR to npdmtool, I am looking what lots of homebrew will need to be rebuilt and modify the source, by example, for SYS-PATCH the sys-patch.json file needs to add:


1728958574693.png

Post automatically merged:

On this case SciresM also pull a request on Switch-Tools DevKitPro package https://github.com/switchbrew/switch-tools/pull/47 this change on the Firmware 19 kernel make what «force_debug/force_debug_prod/allow_debug» properties are now mutually exclusive (enforced by kernel), so most of the SYSMODULES will be needed to build again after changing the SYSMODULE.json file to be sure only one of the possible values have true value and if the file is missing one or more, be sure have the three values, by example:


C++:
"kernel_capabilities":    [{
            "type":    "debug_flags",
            "value":    {
               "allow_debug":    false,
               "force_debug_prod":   false,
               "force_debug":    true
            }

So far Sys-Patch Sysmodule was needed to rebuilt, @miniminx published a build on the Sys-Patch Sysmodule thread.
 
Last edited by impeeza,

impeeza

¡Kabito!
OP
Member
Joined
Apr 5, 2011
Messages
8,040
Trophies
4
Age
46
Location
At my chair.
XP
27,197
Country
Colombia
alright
Post automatically merged:


do you have discord?
Post automatically merged:


$ pacman -S switch-dev
:: There are 13 members in group switch-dev:
:: Repository dkp-libs
1) catnip 2) deko3d 3) devkita64-cmake 4) libnx 5) switch-cmake 6) switch-examples
7) switch-pkg-config
:: Repository dkp-windows
8) devkit-env 9) devkitA64 10) devkitA64-gdb 11) general-tools 12) switch-tools 13) uam

Enter a selection (default=all):
warning: devkit-env-1.0.1-2 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Packages (15) devkita64-rules-1.1.1-1 dkp-cmake-common-utils-1.5.2-1 catnip-0.1.0-1
deko3d-0.5.0-1 devkit-env-1.0.1-2 devkitA64-r27-2 devkitA64-gdb-14.1-1
devkita64-cmake-1.1.2-1 general-tools-1.4.4-1 libnx-4.7.0-1 switch-cmake-1.5.1-1
switch-examples-20231028-1 switch-pkg-config-0.28-4 switch-tools-1.12.0-1
uam-1.1.0-2

Total Download Size: 0.77 MiB
Total Installed Size: 426.32 MiB
Net Upgrade Size: 426.32 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages...
switch-cmake-1.5.1-1-any 5.7 KiB 43.7 KiB/s 00:00 [###############################] 100%
dkp-cmake-common-utils-1.5... 8.0 KiB 45.5 KiB/s 00:00 [###############################] 100%
switch-examples-20231028-1-any 770.1 KiB 1217 KiB/s 00:01 [###############################] 100%
Total (3/3) 783.9 KiB 722 KiB/s 00:01 [###############################] 100%
(15/15) checking keys in keyring [###############################] 100%
(15/15) checking package integrity [###############################] 100%
error: dkp-cmake-common-utils: signature from "fincs <[email protected]>" is unknown trust
:: File /var/cache/pacman/pkg/dkp-cmake-common-utils-1.5.2-1-any.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n] n
error: switch-cmake: signature from "fincs <[email protected]>" is unknown trust
:: File /var/cache/pacman/pkg/switch-cmake-1.5.1-1-any.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n] n
error: switch-examples: signature from "fincs <[email protected]>" is unknown trust
:: File /var/cache/pacman/pkg/switch-examples-20231028-1-any.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n] n
error: failed to commit transaction (invalid or corrupted package)
Errors occurred, no packages were upgraded.
Sorry never got the notification of this post.

I have discord, but almos never open it. so you will get me more easy here.

on the two first weeks of october Github made changes and the keys become invalid, they solved the problem last week.
Post automatically merged:

On november of 2024, just must take in account: The most recent LibNX commit is needed. So BEFORE built Atmosphère but after installing all packages you need to run this commands:

Bash:
cd ~
git clone --recursive https://github.com/Atmosphere-NX/libnx.git -b 1900_support
cd libnx
make install -j$(nproc)

This clone the LibNX repo from Atmosphère's team using the branch for 1900 support and install it on your environment.

After this you can continue to build Atmosphère.

I am running a build process just now and no error at all.

Also Note:, if you use make -j is possible a Error 2 can be generated, run make again without parameters. The process will continue where failed, since the two latest versions of DevKitPro using the -j parameters is not synced and the make process can fail by timeouts.
 
Last edited by impeeza,

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    BigOnYa @ BigOnYa: Yea he said it was a chipped Oled