From 976b967732454b3171ac5b5d61b865f1cc3a5777 Mon Sep 17 00:00:00 2001 From: luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> Date: Thu, 26 Nov 2020 20:21:16 -0500 Subject: [PATCH] Add msys2 and Cygwin instructions, also add .exe extension to built tools. Todo: actually extensively test out msys2 and Cygwin, and double check the readme. --- INSTALL.md | 131 ++++++++++++++++++++++++++++++++++++--- Makefile | 6 +- tools/aif2pcm/Makefile | 10 ++- tools/bin2c/Makefile | 10 ++- tools/gbafix/Makefile | 10 ++- tools/gbagfx/Makefile | 12 +++- tools/jsonproc/Makefile | 10 ++- tools/mapjson/Makefile | 10 ++- tools/mid2agb/Makefile | 10 ++- tools/preproc/Makefile | 10 ++- tools/ramscrgen/Makefile | 10 ++- tools/rsfont/Makefile | 10 ++- tools/scaninc/Makefile | 10 ++- 13 files changed, 213 insertions(+), 36 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 779572c69f..f50ea1db76 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -4,8 +4,22 @@ These instructions explain how to set up the tools required to build **pokeemera If you run into trouble, ask for help on IRC or Discord (see [README.md](README.md)). -## Windows 10 -WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1. These steps can be skipped if WSL1 is already installed. +## Windows +Windows has instructions for building with three possible terminals, if users encounter unexpected errors in following instructions for one of the terminals. These instructions are: +- [Windows 10 (WSL1)](#windows-10-wsl1) +- [Windows (msys2)](#windows-(msys2)) +- [Windows (Cygwin)](#windows-(cygwin)) + +The instructions have been ordered by the performance of their respective terminal. Out of the provided terminals, **WSL1** builds pokeemerald the fastest, and is thus **highly recommended**, but is only available on Windows 10. **msys2** is the second fastest, and **Cygwin** is the slowest. For advanced users, **WSL2** is an option and is even faster than **WSL1** if files are stored on the WSL2 file system, but some tools such as [porymap](https://github.com/huderlem/porymap) cannot interact with said files due to problems [outside the control of maintainers](https://bugreports.qt.io/browse/QTBUG-86277). + +All of the Windows instructions assume that the default drive is C:\\. If this differs to your actual drive letter, then replace C with the correct the drive letter when reading the instructions. + +**A note of caution**: As Windows 7 is officially unsupported by Microsoft and Windows 8 has very little usage, some maintainers are unwilling to maintain the Windows 7/8 instructions. Thus, these instructions may break in the future with fixes taking longer than fixes to the Windows 10 instructions. + +## Windows 10 (WSL1) +WSL1 is the preferred terminal to build **pokeemerald**. The following instructions will explain how to install WSL1 (referred interchangeably as WSL). + +If WSL is **not installed**, then go to [Installing WSL1](#Installing-WSL1). Otherwise, if WSL is installed, but it hasn't previously been set up for another decompilation project, then go to [Setting up WSL1](#Setting-up-WSL1). Otherwise, open WSL and go to [Choosing where to store pokeemerald (WSL1)](#Choosing-where-to-store-pokeemerald-(WSL1)). ### Installing WSL1 Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following command (Right Click or Shift+Insert is paste in the Powershell). @@ -14,7 +28,7 @@ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux ``` Once the process finishes, restart your machine. -The next step is to choose and install a Linux distribution from the Microsoft Store. The following instructions will assume Ubuntu as the Linux distribution of choice. Advanced users can pick a preferred Linux distribution, but build instructions may differ. +The next step is to choose and install a Linux distribution from the Microsoft Store. The following instructions will assume Ubuntu as the Linux distribution of choice. Advanced users can pick a preferred Linux distribution, but setup instructions may differ. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution. If the link does not work, then open the Microsoft Store manually, and search for the Ubuntu app (choose the one with no version number). @@ -39,6 +53,7 @@ sudo apt install build-essential binutils-arm-none-eabi git libpng-dev ``` (If the above command does not work, try the above command but replacing `apt` with `apt-get`). +### Choosing where to store pokeemerald (WSL1) WSL has its own file system that's not accessible from Windows, but Windows files *are* accessible from WSL. So you're going to want to install pokeemerald within Windows. You'll have to change the **current working directory** every time you open WSL. For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: @@ -47,14 +62,103 @@ cd /mnt/c/Users//Desktop/decomps ``` Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. -(The Windows C:\ drive is called /mnt/c/ in WSL. Replace *\* in the example path with your **Windows** username, and the drive letter with the letter of the drive where you want to save pokeemerald. Windows path names are case-insensitive so adhereing to capitalization isn't needed) +(The Windows C:\ drive is called /mnt/c/ in WSL. Replace *\* in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) If this works, then proceed to [Installation](#Installation). -Otherwise, continue reading below for [the older Windows instructions](#windows). +Otherwise, continue reading below for [Windows instructions using msys2](#windows-(msys2)). -## Windows -TODO: add general Windows instructions +## Windows (msys2) + +If devkitPro is not installed, or is installed but without the GBA Development component, then go to [Installing devkitPro](#installing-devkitpro). If devkitPro is installed, but msys2 hasn't previously been set up for another decompilation project, then go to [Setting up msys2](#setting-up-msys2). Otherwise, open msys2 and go to [Choosing where to store pokeemerald (msys2)](#choosing-where-to-store-pokeemerald-(msys2)). + +### Installing devkitPro +Download the devkitPro installer [here](https://github.com/devkitPro/installer/releases). + +Run the devkitPro installer. In the "Choose Components" screen, uncheck everything except GBA Development unless if you plan to use devkitPro for other purposes. Keep the install location as C:\devkitPro and leave the Start Menu option unchanged. + +### Setting up msys2 +Open msys2 at C:\devkitPro\msys2\msys2_shell.bat. + +Note that in msys2, Copy is Ctrl+Insert and Paste is Shift+Insert. + +Certain packages are required to build pokeemerald. Install these by running the following command: +```bash +pacman -S make gcc zlib-devel git +``` +(This command will ask for confirmation, just enter the yes action when prompted). + +Download [libpng](https://sourceforge.net/projects/libpng/files/libpng16/1.6.37/libpng-1.6.37.tar.xz/download). + +Change directory to where libpng was downloaded. By default, msys2 will start in the current user's profile folder, located at **C:\Users\\__**, where *\* is your Windows username. In most cases, libpng should be saved within a subfolder of the profile folder. For example, if libpng was saved to **C:\Users\\_\_\Downloads** (the Downloads location for most users), enter this command: +```bash +cd Downloads +``` +(While not shown, msys uses forward slashes `/` instead of backwards slashes `\` as the directory separator. Windows path names are case-insensitive so adhereing to capitalization isn’t needed. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "Downloads/My Downloads"`. If libpng was saved elsewhere, you will need to specify the full path to where libpng was downloaded, e.g. `cd c:/devkitpro/msys2` if it was saved there) + +Run the following command to uncompress and install libpng. +```bash +tar xf libpng-1.6.37 +cd libpng-1.6.37 +./configure --prefix=/usr +make check +make install +``` +Then finally, run the following command to change back to the user profile folder. +```bash +cd +``` + +### Choosing where to store pokeemerald (msys2) +At this point, you can choose a folder to store pokeemerald into. If so, you'll have to change the **current working directory** every time you open msys2. If you're okay with storing pokeemerald in the user profile folder, then proceed to [Installation](#installation). + +For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: +```bash +cd Desktop/decomps +``` +Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. + +If this works, then proceed to [Installation](#Installation). + +Otherwise, continue reading below for [Windows instructions using Cygwin](#windows-(cygwin)). + +## Windows (Cygwin) +If devkitPro is not installed, or is installed but without the GBA Development component, then follow the instructions used to [install devkitPro](#installing-devkitpro) for the msys2 setup before continuing. + +If Cygwin is not installed, or does not have all of the required packages installed, then go to [Installing Cygwin](#installing-cygwin). Otherwise, go to [Choosing where to store pokeemerald (Cygwin)](#choosing-where-to-store-pokeemerald-(cygwin)) + +### Installing Cygwin +Download [Cygwin](https://cygwin.com/install.html): setup-x86_64.exe for 64-bit Windows, setup-x86.exe for 32-bit. + +Run the Cygwin setup and leave the default settings. At "Select Packages", set the view to "Full" and choose to install the following: +- `make` +- `git` +- `gcc-core` +- `gcc-g++` +- `libpng-devel` + +To quickly find these, use the search bar and type the name of each package. Ensure that the selected package name is the **exact** same as the one you're trying to download, e.g. `cmake` is **NOT** the same as `make`. + +Double click on the text that says "**Skip**" next to each package to select the most recent version to install. If the text says anything other than "**Skip**", (e.g. Keep or a version number), then the package is or will be installed and you don't need to do anything. + +Once all required packages have been selected, finish the installation. + +### Choosing where to store pokeemerald (Cygwin) +Open **Cygwin**. + +Note that in Cygwin, Copy is Ctrl+Insert and Paste is Shift+Insert. + +Cygwin has its own file system that's within Windows, at **C:\cygwin64\home\\_\_**. If you don't want to store pokeemerald there, you'll have to change the **current working directory** every time you open Cygwin. + +For example, if you want to store pokeemerald (and agbcc) in **C:\Users\\_\_\Desktop\decomps**, enter this command: +```bash +cd c:/Users//Desktop/decomps +``` +Note that the directory **must exist** in Windows. If you want to store pokeemerald in a dedicated folder that doesn't exist (e.g. the example provided above), then create the folder (e.g. using Windows Explorer) before executing the `cd` command. + +(Replace *\* in the example path with your **Windows** username. If the path has spaces, then the path must be wrapped with quotations, e.g. `cd "c:/users//Desktop/decomp folder"`. Windows path names are case-insensitive so adhereing to capitalization isn't needed) + +If this works, then proceed to [Installation](#Installation). Otherwise, ask for help on IRC or Discord (see [README.md](README.md)). ## macOS TODO: add macOS instructions @@ -63,17 +167,24 @@ TODO: add macOS instructions TODO: add Linux instructions ## Installation -To download the pokeemerald repository: +If pokeemerald is not already downloaded (some users may prefer to download pokeemerald via a git client like GitHub Desktop), run: ```bash git clone https://github.com/pret/pokeemerald ``` -If agbcc isn't built, run the following commands to build and install it into pokeemerald: +If agbcc has not been built before, run the following commands to build and install it into pokeemerald: ``` git clone https://github.com/pret/agbcc cd agbcc ./build.sh ./install.sh ../pokeemerald ``` +If agbcc has been built before, but was **last built on a different terminal** than the one currently used (only relevant to Windows, e.g. switching from msys2 to WSL1), then run the following commands to build and install it into pokeemerald: +``` +cd agbcc +git clean -fX +./build.sh +./install.sh ../pokeemerald +``` Otherwise, run the following commands to install agbcc into pokeemerald: ``` cd agbcc @@ -93,7 +204,7 @@ To build **pokeemerald.gba** for the first time and confirm it matches the offic ```bash make compare ``` -If an OK is returned, then the installation went smoothly. +If an OK is returned, then the installation went smoothly. **Note:** if you switched from Cygwin to msys2, you must run `make clean-tools` once before any subsequent `make` commands. To build **pokeemerald.gba** with your changes: ```bash diff --git a/Makefile b/Makefile index aa588445f2..bffa4b5609 100644 --- a/Makefile +++ b/Makefile @@ -235,7 +235,7 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/libc.o: CFLAGS := -O2 $(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork @@ -244,10 +244,10 @@ $(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc +$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm +$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet else $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast diff --git a/tools/aif2pcm/Makefile b/tools/aif2pcm/Makefile index 77df291527..dd48a87597 100644 --- a/tools/aif2pcm/Makefile +++ b/tools/aif2pcm/Makefile @@ -6,12 +6,18 @@ LIBS = -lm SRCS = main.c extended.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: aif2pcm +all: aif2pcm$(EXE) @: -aif2pcm: $(SRCS) +aif2pcm$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/bin2c/Makefile b/tools/bin2c/Makefile index 52806e39c6..4dbfab94fe 100644 --- a/tools/bin2c/Makefile +++ b/tools/bin2c/Makefile @@ -6,10 +6,16 @@ CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 SRCS = bin2c.c -all: bin2c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: bin2c$(EXE) @: -bin2c: $(SRCS) +bin2c$(EXE): $(SRCS) $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbafix/Makefile b/tools/gbafix/Makefile index 91a60a9e4c..efb016c97e 100644 --- a/tools/gbafix/Makefile +++ b/tools/gbafix/Makefile @@ -3,10 +3,16 @@ CC ?= gcc SRCS = gbafix.c -all: gbafix +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: gbafix$(EXE) @: -gbafix: $(SRCS) +gbafix$(EXE): $(SRCS) $(CC) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index f0638414da..b4244aa8d6 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -6,15 +6,21 @@ LIBS = -lpng -lz SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: gbagfx +all: gbagfx$(EXE) @: -gbagfx-debug: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx-debug$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) -DDEBUG $(SRCS) -o $@ $(LDFLAGS) $(LIBS) -gbagfx: $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h +gbagfx$(EXE): $(SRCS) convert_png.h gfx.h global.h jasc_pal.h lz.h rl.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/jsonproc/Makefile b/tools/jsonproc/Makefile index 47198b171e..eec73eb7bf 100755 --- a/tools/jsonproc/Makefile +++ b/tools/jsonproc/Makefile @@ -8,12 +8,18 @@ SRCS := jsonproc.cpp HEADERS := jsonproc.h inja.hpp nlohmann/json.hpp +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: jsonproc +all: jsonproc$(EXE) @: -jsonproc: $(SRCS) $(HEADERS) +jsonproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(INCLUDES) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mapjson/Makefile b/tools/mapjson/Makefile index c1f703f9fe..100e809c6c 100644 --- a/tools/mapjson/Makefile +++ b/tools/mapjson/Makefile @@ -6,12 +6,18 @@ SRCS := json11.cpp mapjson.cpp HEADERS := mapjson.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mapjson +all: mapjson$(EXE) @: -mapjson: $(SRCS) $(HEADERS) +mapjson$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 451d4b39fb..553b7859ed 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,12 +6,18 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: mid2agb +all: mid2agb$(EXE) @: -mid2agb: $(SRCS) $(HEADERS) +mid2agb$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile index 8c48afea2a..1507c973f2 100644 --- a/tools/preproc/Makefile +++ b/tools/preproc/Makefile @@ -8,12 +8,18 @@ SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \ HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \ utf8.h +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + .PHONY: all clean -all: preproc +all: preproc$(EXE) @: -preproc: $(SRCS) $(HEADERS) +preproc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/ramscrgen/Makefile b/tools/ramscrgen/Makefile index 4e901a29c1..a9375c87ab 100644 --- a/tools/ramscrgen/Makefile +++ b/tools/ramscrgen/Makefile @@ -8,10 +8,16 @@ HEADERS := ramscrgen.h sym_file.h elf.h char_util.h .PHONY: all clean -all: ramscrgen +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: ramscrgen$(EXE) @: -ramscrgen: $(SRCS) $(HEADERS) +ramscrgen$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 930a92b36e..0bc88a42b7 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -8,10 +8,16 @@ SRCS = main.c convert_png.c util.c font.c .PHONY: all clean -all: rsfont +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: rsfont$(EXE) @: -rsfont: $(SRCS) convert_png.h gfx.h global.h util.h font.h +rsfont$(EXE): $(SRCS) convert_png.h gfx.h global.h util.h font.h $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS) $(LIBS) clean: diff --git a/tools/scaninc/Makefile b/tools/scaninc/Makefile index 52e663d8da..96d92f7062 100644 --- a/tools/scaninc/Makefile +++ b/tools/scaninc/Makefile @@ -8,10 +8,16 @@ HEADERS := scaninc.h asm_file.h c_file.h source_file.h .PHONY: all clean -all: scaninc +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +all: scaninc$(EXE) @: -scaninc: $(SRCS) $(HEADERS) +scaninc$(EXE): $(SRCS) $(HEADERS) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: