diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 1b8575b6cd..6060022c79 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,9 +2,9 @@ "version": "2.0.0", "tasks": [ { - "label": "make", + "label": "ninja", "type": "shell", - "command": "PM_HEADER_REBUILD=1 make all", + "command": "ninja", "problemMatcher": [ { "fileLocation": ["relative", "${workspaceFolder}"], @@ -35,7 +35,7 @@ { "label": "diff", "type": "shell", - "command": "PM_HEADER_REBUILD=1 ./diff.py -mwo ${input:funcName}", + "command": "./diff.py -mwo ${input:funcName}", "isBackground": true, "problemMatcher": [ { diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 56234054c1..412af57536 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,20 +1,22 @@ -## Contributing +# Contributing -### Dependencies +Thank you for your interest in contributing to this project! + +## Dependencies There are a few additional dependencies needed when contributing to this project. You can install them with `./install.sh --extra`. -### WSL -We provide [windows_terminal.bat](tools/windows_terminal.bat) to open a [Windows Terminal](https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701) with a recommended layout. Make sure a default distro (e.g. `wsl --set-default ubuntu`) is set beforehand. +## Build System -### Rebuilding +You will need to re-run `./configure.py` whenever `splat.yaml` or the number of source files changes (e.g. a function is matched and its `.s` file is removed). If you `git pull` and `ninja` breaks, you probably need to re-run `./configure.py`. -If you use Visual Studio Code, you can use _Run Build Task_ (Ctrl+Shift+B) to run `make`. Any errors or warnings generated by the compiler will show up in the _Problems_ tab. +If you use Visual Studio Code, you can use _Run Build Task_ (Ctrl+Shift+B) to run `ninja`. Any errors or warnings generated by the compiler will show up in the _Problems_ tab. -### Matching a function -#### Setup +## Tutorial: Matching a function + +### Setup Once you've created a successful (`OK`) build, copy `build/` to `expected/build/`: @@ -23,7 +25,7 @@ $ mkdir -p expected $ cp -r build expected ``` -#### Roughly converting assembly to C +### Roughly converting assembly to C Decide on a function to match. These can be found in the subdirectories of `asm/nonmatchings/`. Currently, functions which use float constants, data sections, or jump tables are unmatchable. @@ -31,9 +33,7 @@ Take the relevant `.s` file and pass it to [mips_to_c](https://github.com/matt-k You can also use mips_to_c locally installed to a destination of your choice. Then register a function in `~/.bashrc` that calls `path/to/mips_to_c.py (with args)`: ``` -sudo apt update -sudo apt install python3-pip -sudo git clone https://github.com/matt-kempster/mips_to_c.git path/to/mips_to_c +git clone https://github.com/matt-kempster/mips_to_c /path/to/mips_to_c ``` Here's a starter function you can use: @@ -62,13 +62,13 @@ Fix any errors and rerun `diff.py`. This will involve typing the function signat Once a successful build is made, `diff.py` will show you the difference between the original game's assembly (on the left) and what your C code generated (on the right). -#### Matching the function +### Matching the function You're on your own now. Get your C code compiling to match the original assembly! `diff.py`, when running, will automatically recompile your code whenever you save the `.c` file. If you use Visual Studio Code, you can use _Run Test Task_ to run `diff.py` and show you errors and warnings from the compiler inline. You might want to attach _Run Test Task_ to a keybinding, as you'll be using it often. -#### After matching +### After matching Once you've matched a function, run the following scripts: @@ -78,3 +78,5 @@ $ ./format.sh ``` If `format.sh` has any problems with your code, go and fix the issues. If you can't fix a warning without making the function not match anymore, append `// NOLINT` to the offending line. + +Then, please [create a pull request](https://github.com/pmret/nananian/pulls)! diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000000..6206c7390d --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,62 @@ +# Setup + +This repository supports: + +- [Linux](#unix) +- (macOS)(#unix) +- [Windows Subsystem for Linux 2](#wsl-2) +- [Docker](#docker) (any host OS) + +If you encounter any issues setting up the repo, please feel free to [reach out to us on Discord](https://discord.gg/urUm3VG). + + +## Unix + +Clone the repository: +```sh +git clone https://github.com/pmret/papermario +cd papermario +``` + +Install build dependencies: +```sh +./install.sh +``` + +Copy a Paper Mario (USA) ROM into the root directory of the repository with the name `baserom.z64`. If you're using WSL, you can enter the Linux filesystem by opening `\\wsl$` in File Explorer; e.g. `\\wsl$\Ubuntu\home\\papermario`. + +Configure the build and extract assets from the base ROM: +```sh +./configure.py +``` + +Compile the game: +``` +ninja +``` + +If you get `papermario.z64: OK` at the end, the build succeeded! + +The output ROM is `papermario.z64` - you can run this in an emulator such as Project64. + + +## WSL 2 + +1. Install or upgrade to **WSL 2** following [these instructions](https://aka.ms/wsl2-install) (Ubuntu is recommended) +2. Open a WSL terminal +3. Run the following command: `sudo apt update && sudo apt upgrade && cd ~` +4. Continue with [the instructions for Linux](#unix) + +If you have Visual Studio Code, you can type code . to open the repo within it. +`Ctrl + J` opens up a Linux terminal within VS Code. + + +## Docker + +A Docker image containing all dependencies can be built and ran as follows: +```sh +docker build . -t pm +docker run --rm -ti -v $(pwd):/papermario pm +``` + +Then continue with [the instructions for Linux](#unix). diff --git a/Jenkinsfile b/Jenkinsfile index af83a1eed5..5da835cee9 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -18,6 +18,7 @@ pipeline { } steps { sh 'python3 progress.py --csv >> /var/www/papermar.io/html/reports/progress.csv' + sh 'python3 progress.py --shield-json >> /var/www/papermar.io/html/reports/progress_shield.json' } } } diff --git a/Makefile b/Makefile deleted file mode 100644 index f712579516..0000000000 --- a/Makefile +++ /dev/null @@ -1,313 +0,0 @@ -### Build Options ### - -# Override these options in settings.mk or with `make SETTING=value'. - -BASEROM = baserom.z64 -TARGET = papermario -COMPARE = 1 -NON_MATCHING = 0 -WATCH_INCLUDES = 1 -WSL_ELEVATE_GUI = 1 - -# Fail early if baserom does not exist -ifeq ($(wildcard $(BASEROM)),) -$(error Baserom `$(BASEROM)' not found.) -endif - -# NON_MATCHING=1 implies COMPARE=0 -ifeq ($(NON_MATCHING),1) -override COMPARE=0 -endif - -# PERMUTER=1 implies WATCH_INCLUDES=0 -ifeq ($(PERMUTER),1) -override WATCH_INCLUDES=0 -endif - - -### Output ### - -BUILD_DIR := build -ROM := $(TARGET).z64 -ELF := $(BUILD_DIR)/$(TARGET).elf -LD_SCRIPT := $(TARGET).ld -LD_MAP := $(BUILD_DIR)/$(TARGET).map -ASSETS_BIN := $(BUILD_DIR)/bin/assets/assets.bin -MSG_BIN := $(BUILD_DIR)/msg.bin -NPC_BIN := $(BUILD_DIR)/sprite/npc.bin - - -### Tools ### - -PYTHON := python3 -N64CKSUM := tools/n64crc -SPLAT_YAML := tools/splat.yaml -SPLAT = $(PYTHON) tools/n64splat/split.py $(BASEROM) $(SPLAT_YAML) . -YAY0COMPRESS = tools/Yay0compress -EMULATOR = mupen64plus - - -CROSS := mips-linux-gnu- -AS := $(CROSS)as -OLD_AS := tools/mips-nintendo-nu64-as -CC := tools/cc1 -CPP := cpp -LD := $(CROSS)ld -OBJCOPY := $(CROSS)objcopy - -WSL := 0 -JAVA := java - -UNAME_S := $(shell uname -s) -ifeq ($(UNAME_S),Linux) - OS=linux - ICONV := iconv --from UTF-8 --to SHIFT-JIS - - ifeq ($(findstring microsoft,$(shell cat /proc/sys/kernel/osrelease)),microsoft) - WSL := 1 - ifeq ($(WSL_ELEVATE_GUI),1) - JAVA := powershell.exe -command java - endif -endif -endif -ifeq ($(UNAME_S),Darwin) - OS=mac - ICONV := tools/iconv.py UTF-8 SHIFT-JIS -endif - -OLD_AS=tools/$(OS)/mips-nintendo-nu64-as -CC=tools/$(OS)/cc1 - -### Compiler Options ### - -CPPFLAGS := -Iinclude -Isrc -D _LANGUAGE_C -D _FINALROM -ffreestanding -DF3DEX_GBI_2 -D_MIPS_SZLONG=32 -Wundef -Wcomment -ASFLAGS := -EB -Iinclude -march=vr4300 -mtune=vr4300 -OLDASFLAGS := -EB -Iinclude -G 0 -CFLAGS := -O2 -quiet -G 0 -mcpu=vr4300 -mfix4300 -mips3 -mgp32 -mfp32 -Wimplicit -Wuninitialized -Wshadow -LDFLAGS := -T undefined_syms.txt -T undefined_syms_auto.txt -T undefined_funcs.txt -T undefined_funcs_auto.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(LD_MAP) --no-check-sections - -ifeq ($(WATCH_INCLUDES),1) -CPPMFLAGS = -MP -MD -MF $@.mk -MT $(BUILD_DIR)/$*.d -MDEPS = $(BUILD_DIR)/%.d -endif - -ifeq ($(NON_MATCHING),1) -CPPFLAGS += -DNON_MATCHING -endif - --include settings.mk - -### Sources ### - -include sources.mk - -ifeq ($(PERMUTER),1) -override OBJECTS:=$(filter %.c.o, $(OBJECTS)) -endif - -%.d: ; - -ifeq ($(WATCH_INCLUDES),1) --include $(foreach obj, $(OBJECTS), $(obj).mk) -endif - -NPC_DIRS := $(foreach npc, $(NPC_SPRITES), sprite/npc/$(npc)) - -GENERATED_HEADERS := include/ld_addrs.h $(foreach dir, $(NPC_DIRS), include/$(dir).h) - - -### Targets ### - -clean: - rm -rf $(BUILD_DIR) $(LD_SCRIPT) - -clean-all: - rm -rf $(BUILD_DIR) bin msg img sprite .splat_cache $(LD_SCRIPT) - -clean-code: - rm -rf $(BUILD_DIR)/src - -tools: - -setup: clean-all tools - @make split - -split: - make $(LD_SCRIPT) -W $(SPLAT_YAML) - -split-%: - $(SPLAT) --modes ld $* --verbose - -split-all: - $(SPLAT) --modes all - -test: $(ROM) - $(EMULATOR) $< - -%.bin: $(LD_SCRIPT) - -# Compressed files -%.Yay0: % - @mkdir -p $(shell dirname $@) - $(YAY0COMPRESS) $< $@ -# $(BUILD_DIR)/%.bin.Yay0: %.bin -# @mkdir -p $(shell dirname $@) -# $(YAY0COMPRESS) $< $@ - -# Data objects -# $(BUILD_DIR)/%.bin.o: %.bin -# @mkdir -p $(shell dirname $@) -# $(LD) -r -b binary -o $@ $< - -# Compressed data objects -# $(BUILD_DIR)/%.Yay0.o: $(BUILD_DIR)/%.bin.Yay0 -# @mkdir -p $(shell dirname $@) -# $(LD) -r -b binary -o $@ $< - -# Compile C files -# $(BUILD_DIR)/%.c.o: %.c $(MDEPS) | $(GENERATED_HEADERS) -# @mkdir -p $(shell dirname $@) -# $(CPP) $(CPPFLAGS) -o - $(CPPMFLAGS) $< | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ - - -# # Compile C files (with DSL macros) -# $(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(MDEPS) tools/compile_dsl_macros.py | $(GENERATED_HEADERS) -# @mkdir -p $(shell dirname $@) -# $(CPP) $(CPPFLAGS) -o - $< $(CPPMFLAGS) | $(PYTHON) tools/compile_dsl_macros.py | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ - - -# Assemble handwritten ASM -# $(BUILD_DIR)/%.s.o: %.s -# @mkdir -p $(shell dirname $@) -# $(AS) $(ASFLAGS) -o $@ $< - -# # Data -# $(BUILD_DIR)/data/%.data.o: asm/data/%.data.s -# @mkdir -p $(shell dirname $@) -# $(AS) $(ASFLAGS) -o $@ $< - -# # Rodata -# $(BUILD_DIR)/rodata/%.rodata.o: asm/data/%.rodata.s -# @mkdir -p $(shell dirname $@) -# $(AS) $(ASFLAGS) -o $@ $< - -# Images -# $(BUILD_DIR)/%.png.o: $(BUILD_DIR)/%.png -# $(LD) -r -b binary -o $@ $< -# $(BUILD_DIR)/%.rgba16.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py rgba16 $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.rgba32.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py rgba32 $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.ci8.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py ci8 $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.ci4.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py ci4 $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.palette.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py palette $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.ia4.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py ia4 $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.ia8.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py ia8 $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.ia16.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py ia16 $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.i4.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py i4 $< $@ $(IMG_FLAGS) -# $(BUILD_DIR)/%.i8.png: %.png -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/convert_image.py i8 $< $@ $(IMG_FLAGS) - -# Assets -# ASSET_FILES := $(foreach asset, $(ASSETS), $(BUILD_DIR)/bin/assets/$(asset)) -# YAY0_ASSET_FILES := $(foreach asset, $(filter-out %_tex, $(ASSET_FILES)), $(asset).Yay0) -# $(BUILD_DIR)/bin/assets/%: bin/assets/%.bin -# @mkdir -p $(shell dirname $@) -# @cp $< $@ -# $(ASSETS_BIN): $(ASSET_FILES) $(YAY0_ASSET_FILES) sources.mk -# @mkdir -p $(shell dirname $@) -# @echo "building $@" -# @$(PYTHON) tools/build_assets_bin.py $@ $(ASSET_FILES) -# $(ASSETS_BIN:.bin=.o): $(ASSETS_BIN) -# $(LD) -r -b binary -o $@ $< - -# Messages -# $(MSG_BIN): $(MESSAGES) -# @mkdir -p $(shell dirname $@) -# @echo "building $@" -# @$(PYTHON) tools/compile_messages.py $@ /dev/null $(MESSAGES) -# $(MSG_BIN:.bin=.o): $(MSG_BIN) -# $(LD) -r -b binary -o $@ $< - -# Sprites -# $(foreach npc, $(NPC_SPRITES), $(eval $(BUILD_DIR)/sprite/npc/$(npc):: $(shell find sprite/npc/$(npc) -type f 2> /dev/null))) # dependencies -# NPC_YAY0 := $(foreach npc, $(NPC_SPRITES), $(BUILD_DIR)/sprite/npc/$(npc).Yay0) -# $(BUILD_DIR)/sprite/npc/%:: sprite/npc/% tools/compile_npc_sprite.py -# @mkdir -p $(shell dirname $@) -# $(PYTHON) tools/compile_npc_sprite.py $@ $< -# $(NPC_BIN): $(NPC_YAY0) tools/compile_npc_sprites.py -# @mkdir -p $(shell dirname $@) -# @echo "building $@" -# @$(PYTHON) tools/compile_npc_sprites.py $@ $(NPC_YAY0) -# $(NPC_BIN:.bin=.o): $(NPC_BIN) -# $(LD) -r -b binary -o $@ $< -# include/sprite/npc/%.h: sprite/npc/%/SpriteSheet.xml tools/gen_sprite_animations_h.py -# @mkdir -p $(shell dirname $@) -# @echo "building $@" -# @$(PYTHON) tools/gen_sprite_animations_h.py $@ sprite/npc/$* $(NPC_DIRS) - - -### Linker ### - -# $(LD_SCRIPT): $(SPLAT_YAML) -# $(SPLAT) --modes ld bin Yay0 PaperMarioMapFS PaperMarioMessages img PaperMarioNpcSprites --new - -# $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) -# @mkdir -p $(shell dirname $@) -# $(CPP) -P -DBUILD_DIR=$(BUILD_DIR) -o $@ $< - -# $(ROM): $(BUILD_DIR)/$(TARGET).bin -# @cp $< $@ -# ifeq ($(COMPARE),1) -# @sha1sum -c checksum.sha1 || (echo 'The build succeeded, but did not match the base ROM. This is expected if you are making changes to the game. To skip this check, use "make COMPARE=0".' && false) -# endif - -# $(BUILD_DIR)/$(TARGET).elf: $(BUILD_DIR)/$(LD_SCRIPT) $(OBJECTS) -# $(LD) $(LDFLAGS) -o $@ - -# $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf -# $(OBJCOPY) $< $@ -O binary - -# include/ld_addrs.h: $(BUILD_DIR)/$(LD_SCRIPT) -# grep -E "[^\. ]+ =" $< -o | sed 's/^/extern void* /; s/ =/;/' > $@ - - -### Star Rod (optional) ### - -STAR_ROD := cd tools/star-rod && $(JAVA) -jar StarRod.jar - -sprite/SpriteTable.xml: tools/star-rod sources.mk - $(PYTHON) tools/star-rod/spritetable.xml.py $(NPC_SPRITES) > $@ - -editor: tools/star-rod sprite/SpriteTable.xml - $(STAR_ROD) - - -### Make Settings ### - -.PHONY: clean tools test setup split editor $(ROM) -.DELETE_ON_ERROR: -.SECONDARY: -.PRECIOUS: $(ROM) %.Yay0 -.DEFAULT_GOAL := $(ROM) - -# Remove built-in implicit rules to improve performance -MAKEFLAGS += --no-builtin-rules - -# Fail targets if any command in the pipe exits with error -SHELL = /bin/bash -e -o pipefail diff --git a/README.md b/README.md index d599574a5f..bc37b29312 100644 --- a/README.md +++ b/README.md @@ -1,75 +1,22 @@ # Paper Mario -This is a WIP decompilation of Paper Mario (USA). It builds the following ROM: +[![Build Status][jenkins-badge]][jenkins] [![Progress][progress-badge]][progress] [![Discord Channel][discord-badge]][discord] -* papermario.z64 `md5: a722f8161ff489943191330bf8416496` +[jenkins]: https://jenkins.zelda64.dev/job/papermario/job/master +[jenkins-badge]: https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins.zelda64.dev%2Fjob%2Fpapermario%2Fjob%2Fmaster -Discord: [Paper Mario Modding](https://discord.gg/urUm3VG) +[progress]: https://papermar.io/progress +[progress-badge]: https://img.shields.io/endpoint?url=https://papermar.io/reports/progress_shield.json -## Setup +[discord]: https://discord.gg/urUm3VG +[discord-badge]: https://img.shields.io/discord/279322074412089344?color=%237289DA&logo=discord&logoColor=ffffff -You'll need Linux, a Linux VM, or [Windows 10 (WSL2)](#wsl) to work on this project. +This is a work-in-progress decompilation of Paper Mario (USA). -#### Clone the repository -```sh -$ git clone https://github.com/ethteck/papermario.git -$ cd papermario -``` +It builds the following ROM: -#### Install build dependencies +* [**papermario.z64**](https://datomatic.no-intro.org/index.php?page=show_record&s=24&n=0537) `sha1: 3837f44cda784b466c9a2d99df70d77c322b97a0` -```sh -$ ./install.sh -``` +To set up the repository, see [INSTALL.md](INSTALL.md). -Our install script does not yet support distros other than Ubuntu, Arch, and their derivatives. Please consider contributing to the script if you use another distro! - -##### Docker - -A Docker image containing all dependencies can be built and ran as follows: -```sh -# build image -$ docker build . -t pm -# spin up container, mounting current directory inside -$ docker run --rm -ti -v $(pwd):/papermario pm -``` - -#### Base ROM - -You'll need a Paper Mario (USA) ROM to work on this project. Copy it into the root directory of the repository with the name `baserom.z64`. - -#### Install tools and extract ROM - -```sh -$ make setup -``` - -### Compile the game - -```sh -$ make -``` - -If you get `OK`, you're all set! Otherwise, please feel free to reach out to us in [our Discord channel](https://discord.gg/urUm3VG). - -## Star Rod GUI - -You can open [our modified version of Star Rod](https://github.com/nanaian/star-rod-for-decomp) with `make editor`. - -## Contributing Please see [CONTRIBUTING.md](CONTRIBUTING.md) for information on how to contribute to the project. Any and all help is welcome! - -## Troubleshooting - -* If you are using Windows, you may encounter the following when you run `make`: -``` -sha1sum -c checksum.sha1 -sha1sum: 'papermario.z64'$'\r': No such file or directory -: FAILED open or read -sha1sum: WARNING: 1 listed file could not be read -Makefile:118: recipe for target 'verify' failed -make: *** [verify] Error 1 -``` -> 💡 Solution - -> Run `git checkout checksum.sha1` and retry building. Windows has different line endings than Linux, causing some of our tools to break. diff --git a/configure.py b/configure.py index 4fa510881d..1b4257b062 100755 --- a/configure.py +++ b/configure.py @@ -153,12 +153,6 @@ async def main(): cpp = args.cpp or "cpp" - """ - # update submodules - await shell("git submodule init tools/n64splat") - await shell("git submodule update --recursive") - """ - # compile n64splat dependencies await shell("make -C tools/n64splat") diff --git a/progress.py b/progress.py index 8db0ceac63..1eb10aa80c 100755 --- a/progress.py +++ b/progress.py @@ -79,6 +79,16 @@ def main(args): csv_list = [str(version), timestamp, git_hash, str(len(all_funcs)), str(len(nonmatching_funcs)), str(len(matching_funcs)), str(total_size), str(nonmatching_size), str(matching_size)] print(",".join(csv_list)) + elif args.shield_json: + import json + + # https://shields.io/endpoint + print(json.dumps({ + "schemaVersion": 1, + "label": "progress", + "message": f"{matching_ratio:.2f}%", + "color": "yellow", + })) else: if matching_size + nonmatching_size != total_size: print("Warning: category/total size mismatch!\n") @@ -89,6 +99,7 @@ def main(args): if __name__ == "__main__": parser = argparse.ArgumentParser(description="Reports progress for the project") parser.add_argument("--csv", action="store_true") + parser.add_argument("--shield-json", action="store_true") args = parser.parse_args() main(args) diff --git a/requirements_extra.txt b/requirements_extra.txt index bed63f8773..6fa8c3bcf3 100644 --- a/requirements_extra.txt +++ b/requirements_extra.txt @@ -3,3 +3,4 @@ cxxfilt python-Levenshtein stringcase watchdog +gitpython diff --git a/tools/windows_terminal.bat b/tools/windows_terminal.bat deleted file mode 100644 index 3bca3f8137..0000000000 --- a/tools/windows_terminal.bat +++ /dev/null @@ -1,2 +0,0 @@ -REM first set your default distro using: wsl --set-default -wt --title "diff.py" -d "../" ; split-pane -d "../" -V ; new-tab --title "mips_to_c.py" -d "../" ; focus-tab -t 0