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.
In my case, I had to read several documents in order to
get a working DevKitPro environment.
First you need
Download the latest version from: https://github.com/msys2/msys2-installer/releases

Install the version corresponding to your Operating System (64 or 32 bits).

Accept the defaults in installation program of MSYS2 once you finish the installation you will have shortcuts for MSYS2, MinGW32 and MinGW64. MSYS2 is used to compiling POSIX binaries for Linux from Windows.

MinGW32 & MinGW64 compile Native Windows binaries using a linux toolchain (gcc, bash, etc.)

Launch MSYS2 (MinGW64): shell:
1695782853186.png
1695782902542.png


And on it execute the command: pacman -Syuu several times until you get the message: "there is nothing to do". Sometimes you will need to restart the environment.

Then install DevKitPro
First at all you need to edit the pacman.conf file located on c:\msys64\etc\ (default installation folder)
And add the next lines at end of it:

Code:
[dkp-libs]
Server = https://pkg.devkitpro.org/packages

[dkp-windows]
Server = https://pkg.devkitpro.org/packages/windows/$arch/

Then you need to import the keys of the repositories, so execute the next command:
Bash:
pacman-key --recv BC26F752D25B92CE272E0F44F7FD5492264BB9D0 --keyserver keyserver.ubuntu.com

and sign locally the key:
Bash:
pacman-key --lsign BC26F752D25B92CE272E0F44F7FD5492264BB9D0

Verify the key is working well:
Bash:
pacman-key -l BC26F752D25B92CE272E0F44F7FD5492264BB9D0

You should get a response just like:

Bash:
pub  rsa4096 2018-02-28 [SC]
      BC26F752D25B92CE272E0F44F7FD5492264BB9D0
uid          [  full  ] Dave Murphy (WinterMute) <[email protected]>
sub  rsa4096 2018-02-28 [E]

After that you will install the DevKitPro Keyring
Bash:
pacman -U https://downloads.devkitpro.org/devkitpro-keyring.pkg.tar.xz

Now verify MSYS2 database:
Bash:
pacman -Sy
pacman -Syu

You need to install DevKitPro packages:
Bash:
pacman -S --noconfirm switch-dev devkitA64 dkp-toolchain-vars libnx switch-tools switch-mesa switch-libdrm_nouveau switch-sdl2

After you have a working environment you need to install the 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


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).

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

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

Never forget to create the environment variables for DevKitPro
Bash:
export DEVKITPRO=/opt/devkitpro
export DEVKITARM=/opt/devkitpro/devkitARM
export DEVKITPPC=/opt/devkitpro/devkitPPC

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.

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.




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

impeeza

¡Kabito!
OP
Member
Joined
Apr 5, 2011
Messages
4,918
Trophies
3
Age
45
Location
At my chair.
XP
13,311
Country
Colombia

binkinator

Garfield’s Fitness Coach
Member
GBAtemp Patron
Joined
Mar 29, 2021
Messages
6,512
Trophies
2
XP
6,121
Country
United States
Works a treat! Tried my best to be a mindless fool just clicking what I was told and had no issues. Nicely done!

I’m going to destroy it all and see if I can run it like this:

go to https://switchbrew.org/wiki/Setting_up_Development_Environment and hit this link to download latest Windows graphical installer.

open up MSYS2 and run these two commands (basically just combining all yours into one)

Code:
pacman -Syu

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

(From here everything flows the same as the rest of the tut…
 

fvig2001

Well-Known Member
Member
Joined
Aug 21, 2006
Messages
866
Trophies
1
XP
2,707
Country
Philippines
Can you enable debug outputs? Will probably be useful if I have to debug on a 1 bit mode switch (normally does not boot atmosphere without hacks)
 
  • Like
Reactions: impeeza

DerBusVomFriedhof

Member
Newcomer
Joined
Jul 27, 2022
Messages
5
Trophies
0
Age
36
Location
Germany
XP
71
Country
Germany
Thank you for this Guide, after reading that this set of instructions worked for a "mindless fool", I was a bit dumbstruck when the "git" command would not execute. I had to use pacman -S git for it to clone the repository.

I am trying to apply the ram overclock .diff from the RetroNX discord provided by ZachyCatGames, and while patchin the .diff file seemingly works, I sadly cant compile Atmosphere. When entering make -j it returns "command not found".

Still, without your guide i would not even be at this point id wager, so thanks again.
 

binkinator

Garfield’s Fitness Coach
Member
GBAtemp Patron
Joined
Mar 29, 2021
Messages
6,512
Trophies
2
XP
6,121
Country
United States
Thank you for this Guide, after reading that this set of instructions worked for a "mindless fool", I was a bit dumbstruck when the "git" command would not execute. I had to use pacman -S git for it to clone the repository.

I am trying to apply the ram overclock .diff from the RetroNX discord provided by ZachyCatGames, and while patchin the .diff file seemingly works, I sadly cant compile Atmosphere. When entering make -j it returns "command not found".

Still, without your guide i would not even be at this point id wager, so thanks again.
Mindless fool checking in…when you followed @impeeza‘s instructions did you see any errors with this step? (you can run it again…it won’t hurt anything)

Code:
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 zip

if you installed everything with the install binary make sure you did the following.
  • Ensure at least "Switch Development" is ticked - you can also leave the other options ticked if you wish.

either way that should include make and git and all the other tools needed to do proper builds.
 

DerBusVomFriedhof

Member
Newcomer
Joined
Jul 27, 2022
Messages
5
Trophies
0
Age
36
Location
Germany
XP
71
Country
Germany
Thanks for getting back to me, I shall try again later today and try your suggestions. Really appreciated. Also duckbill and dogty. I’m completely new to this and while it sucks being a fool it’s really fun to aquire new „skills“.
 

binkinator

Garfield’s Fitness Coach
Member
GBAtemp Patron
Joined
Mar 29, 2021
Messages
6,512
Trophies
2
XP
6,121
Country
United States
If you building atmosphere yourself why to bother with IPS patches? Just patch sources one time and forget about generating patches for each build.
Wouldn’t the patches conflict with the next build from upstream? or is the thought that since you’re doing it for a particular reason you would be merging that portion anyway, you might as well make the exception for sigpatches while you’re at it.
I would like to also add that sometimes the official libnx is not up to date compared to the atmosphere build (it was the case when atmosphere came out as 1.3.0) you might sometimes want to build libnx (with the same dependencies as atmosphere) with this fork https://github.com/Atmosphere-NX/libnx and choose the correct branch.
This topic requires some thought (hadn’t done so before). If you had already updated your build environment via the package manager you’d have to go back and pull the installed version of libnx out, correct? Not sure I’m sofisticated enough (yet) t know How to cleanly do this.



these are both great thoughts…
 

dogcsty

Well-Known Member
Newcomer
Joined
Dec 2, 2021
Messages
47
Trophies
0
XP
227
Country
United States
Wouldn’t the patches conflict with the next build from upstream? or is the thought that since you’re doing it for a particular reason you would be merging that portion anyway, you might as well make the exception for sigpatches while you’re at it.

This topic requires some thought (hadn’t done so before). If you had already updated your build environment via the package manager you’d have to go back and pull the installed version of libnx out, correct? Not sure I’m sofisticated enough (yet) t know How to cleanly do this.



these are both great thoughts…
The patches wouldn't conflict with the next build. If you look at the official sigpatches zip files you will notice that there are a lot of .ips files. There's only one file that is being used with your current Atmosphere build, the rest of the files are for the old ones (and there are some other files for the firmware). You can add the newest sigpatches afterwards without needing to delete yours

When it comes to libnx the package will be automatically added to your Devkitpro folder once you've built it from source (you can make a backup of the original libnx folder if you want to in Devkitpro/libnx or you can just re-update it if needed, or you can just rebuild it from the master branch).

I'm glad that there are threads like this I wish I had something like this to help me out I had to figure everything out by myself (but I guess you learn better this way). I appreciate the effort.

Another thread that could be useful is how to add the atmosphere-libs to your application for developping atmsophere modules, the makefile configuration can be a little bit tricky.
 

binkinator

Garfield’s Fitness Coach
Member
GBAtemp Patron
Joined
Mar 29, 2021
Messages
6,512
Trophies
2
XP
6,121
Country
United States
The patches wouldn't conflict with the next build. If you look at the official sigpatches zip files you will notice that there are a lot of .ips files. There's only one file that is being used with your current Atmosphere build, the rest of the files are for the old ones (and there are some other files for the firmware). You can add the newest sigpatches afterwards without needing to delete yours
*eureka moment* Thank you, that clicked for me. Ofc
When it comes to libnx the package will be automatically added to your Devkitpro folder once you've built it from source (you can make a backup of the original libnx folder if you want to in Devkitpro/libnx or you can just re-update it if needed, or you can just rebuild it from the master branch).
ahhhh. Cool. It’s in one place and easy to sub out. Sweet!
I'm glad that there are threads like this I wish I had something like this to help me out I had to figure everything out by myself (but I guess you learn better this way). I appreciate the effort.
Many thanks to @impeeza for putting it together.

It really helps to be walked through something instead of just saying “unzip X at the top of your SD Card and hope for the best!”

Also give us rubes a platform to learn a little and step off onto the next dumb question…little by little…going places.
Another thread that could be useful is how to add the atmosphere-libs to your application for developping atmsophere modules, the makefile configuration can be a little bit tricky.
I understand each word you’re saying here, I just get lost when you put them in this particular order…
(in other words hells yes it would be useful!)
 

impeeza

¡Kabito!
OP
Member
Joined
Apr 5, 2011
Messages
4,918
Trophies
3
Age
45
Location
At my chair.
XP
13,311
Country
Colombia

BeckysFootSlave

Well-Known Member
Newcomer
Joined
Jan 4, 2022
Messages
52
Trophies
0
Age
49
XP
593
Country
Germany
Screenshot 2022-09-15 132758.png


Always get this!
WTF am I doing wrong???

Did everything step by step, and also deleted everything completely and installed again!

I need help please! :(
 

BeckysFootSlave

Well-Known Member
Newcomer
Joined
Jan 4, 2022
Messages
52
Trophies
0
Age
49
XP
593
Country
Germany
I even found a libjpeg turbo package on the Msys2 website!

Should I install that!
Forgot also to post a image of the environmental variables to ask if everything is correct!
Will do later!

@impeeza thank you again for your time!
 
  • Love
Reactions: impeeza

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
  • FlareReZ @ FlareReZ:
    Its sad, I know. We have Sunak who doesn't believe that biology in trans people exist. smh
  • K3N1 @ K3N1:
    Biology wise that's an entire different argument but they are people
    +1
  • FlareReZ @ FlareReZ:
    @K3N1, As long as we don't harass people of races and genders, then we can all live freely without restrictions being put upon us.
  • FlareReZ @ FlareReZ:
    @K3N1, True. You're not wrong.
  • K3N1 @ K3N1:
    I don't want to pull down my transgender shirt and have stuffed animals come out :angry:
  • K3N1 @ K3N1:
    Warn me first
  • FlareReZ @ FlareReZ:
    @K3N1, Ok, I'll stop. Chill out.
  • K3N1 @ K3N1:
    I just mean if the person is up front about it then they can be what they want to be doesn't mean I'll care any less
    +1
  • FlareReZ @ FlareReZ:
    @K3N1, That's true, Kenny. How you've said it sounds like you didn't like my point of view.
  • FlareReZ @ FlareReZ:
    You can have an opinion and I'll respect it.
  • K3N1 @ K3N1:
    People just want specific things in sexuality just how it always is
    +1
  • Coravendev @ Coravendev:
    i mean it would be nice if it were just simple.
    +1
  • K3N1 @ K3N1:
    Nah that would be boring people need others they can agree with more than disagree
    +1
  • K3N1 @ K3N1:
    RG355xx plus is out and no one cares lol
    +1
  • FlareReZ @ FlareReZ:
    @K3N1, Seems alright.
    +1
  • BigOnYa @ BigOnYa:
    Looks cool, pretty cheap also.
  • Xdqwerty65 @ Xdqwerty65:
    i rewatched the simpsons movie
  • Xdqwerty65 @ Xdqwerty65:
    for a homework
  • Xdqwerty65 @ Xdqwerty65:
    its as good as i remember it
  • a_username_that_is_cool @ a_username_that_is_cool:
    if copilot, am i pilot or passenger
  • Xdqwerty65 @ Xdqwerty65:
    copassenger
    +1
  • K3N1 @ K3N1:
    Depends on who hits the big rock first
    K3N1 @ K3N1: Depends on who hits the big rock first