Rename sc64 finalize to minify

Fix ability to make without parameters
This commit is contained in:
Robin Jones 2023-03-12 19:43:16 +00:00
parent b5a9fa31fe
commit 5485aef989
5 changed files with 54 additions and 48 deletions

View File

@ -44,6 +44,7 @@ jobs:
- name: Build N64FlashcartMenu ROM
run: |
mkdir build
mkdir output
# TODO: split this to use params for each flashcart type.
make -j all
@ -52,9 +53,10 @@ jobs:
with:
name: N64FlashcartMenu
path: |
./build/N64FlashcartMenu.z64
./output/N64FlashcartMenu.z64
./build/N64FlashcartMenu.elf
finalize-sc64-menu:
minify-sc64-menu:
runs-on: ubuntu-latest
needs: build
@ -74,12 +76,11 @@ jobs:
uses: actions/download-artifact@v3
with:
name: N64FlashcartMenu
path: ./build
path: ./
- name: Finalize rom
run: |
cd ./build
python ../tools/sc64/finalize.py N64FlashcartMenu.z64
python ./tools/sc64/minify.py ./build/N64FlashcartMenu.elf ./output/N64FlashcartMenu.z64 ./output/sc64menu.n64
continue-on-error: false
- name: Upload artifact
@ -87,13 +88,13 @@ jobs:
with:
name: SC64-Menu
path: |
./build/sc64menu.n64
./output/sc64menu.n64
if-no-files-found: ignore
# release-sc64-menu:
# runs-on: ubuntu-latest
# needs: finalize-sc64-menu
# needs: minify-sc64-menu
# steps:
# - name: Generate release

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
/.vscode
/build
/output
tools/sc64/sc64.exe

View File

@ -1,9 +1,10 @@
# .DEFAULT_GOAL := mytarget
.DEFAULT_GOAL := all
EXE_NAME = N64FlashcartMenu
SOURCE_DIR = src
BUILD_DIR = build
OUTPUT_DIR = output
include $(N64_INST)/include/n64.mk
@ -32,12 +33,14 @@ $(BUILD_DIR)/$(EXE_NAME).elf: $(OBJS)
$(EXE_NAME).z64: N64_ROM_TITLE=$(EXE_NAME)
all: $(EXE_NAME).z64
$(shell mv $(EXE_NAME).z64 $(BUILD_DIR))
$(shell cd $(BUILD_DIR)/ && python3 ../tools/sc64/finalize.py ./$(EXE_NAME).z64)
$(shell mkdir $(OUTPUT_DIR))
$(shell mv $(EXE_NAME).z64 $(OUTPUT_DIR))
$(shell python3 ./tools/sc64/minify.py $(BUILD_DIR)/$(EXE_NAME).elf $(OUTPUT_DIR)/N64FlashcartMenu.z64 $(OUTPUT_DIR)/sc64menu.n64)
.PHONY: all
clean:
$(shell rm -rf ./$(BUILD_DIR))
$(shell rm -rf ./$(OUTPUT_DIR))
.PHONY: clean
# run:

View File

@ -1,38 +0,0 @@
#!/usr/bin/env python3
import sys
if __name__ == '__main__':
if (len(sys.argv) != 2):
print(f'Usage: python {sys.argv[0]} input')
sys.exit(1)
ALIGN = 512
STRIP_BYTE = b'\x00'
input_file = sys.argv[1]
sc64_output = 'sc64menu.n64'
try:
bin_data = b''
with open(input_file, 'rb') as f:
bin_data = f.read()
bin_data = bin_data.strip(STRIP_BYTE)
modulo = len(bin_data) % ALIGN
if (modulo > 0):
bin_data += STRIP_BYTE * (ALIGN - modulo)
with open(sc64_output, 'wb') as f:
f.write(bin_data)
except FileNotFoundError as e:
print(f'Couldn\'t open file: {e}')
sys.exit(2)
except Exception as e:
print(e)
sys.exit(3)

39
tools/sc64/minify.py Normal file
View File

@ -0,0 +1,39 @@
#!/usr/bin/env python3
import sys
from subprocess import Popen, PIPE
def get_rom_end(elf):
p1 = Popen(f'readelf -s {elf}'.split(), stdout=PIPE)
p2 = Popen('grep -m 1 __rom_end'.split(), stdin=p1.stdout, stdout=PIPE)
stdout, _ = p2.communicate()
rom_end = int(stdout.decode('UTF-8').split()[1], 16)
rom_end &= 0x1FFFFFFF
rom_end -= 0x400
rom_end += 0x1000
return rom_end
if __name__ == '__main__':
if (len(sys.argv) != 4):
print(f'Usage: python {sys.argv[0]} elf input output')
sys.exit(1)
elf_file = sys.argv[1]
input_file = sys.argv[2]
output_file = sys.argv[3]
ALIGN = 512
rom_end = get_rom_end(elf_file)
modulo = rom_end % ALIGN
if (modulo > 0):
rom_end += (ALIGN - modulo)
minified_data = b''
with open(input_file, 'rb') as f:
minified_data = f.read(rom_end)
with open(output_file, 'wb') as f:
f.write(minified_data)