ddw3/zbuild.yaml
Filipe Rodrigues cc4c02e2de
Removed the remake.
Unfortunately, it wasn't compiling anymore due to `psx`, and that crate seems to be out of date for the current nightly, so we'll drop the idea of a remake for now.
2024-07-23 17:54:06 +01:00

616 lines
15 KiB
YAML

---
# TODO: When running a python script, get all the dependencies, since we do a few imports around.
alias:
# External tools
# prettier-ignore
as : mips-elf-as # GNU assembler (GNU Binutils) 2.39
ar : mips-elf-ar # GNU assembler (GNU Binutils) 2.39
ld : mips-elf-ld # GNU assembler (GNU Binutils) 2.39
objcopy : mips-elf-objcopy # GNU assembler (GNU Binutils) 2.39
mkpsxiso : mkpsxiso # MKPSXISO 2.02
cargo : cargo # cargo 1.72.0-nightly (f7b95e316 2023-05-30)
sed : sed # sed (GNU sed) 4.9
sha256sum : sha256sum # sha256sum (GNU coreutils) 9.3
rm : rm # rm (GNU coreutils) 9.3
mkdir : mkdir # mkdir (GNU coreutils) 9.3
cp : cp # cp (GNU coreutils) 9.3
touch : touch # touch (GNU coreutils) 9.3
truncate : truncate # truncate (GNU coreutils) 9.3
python3-sys: python3 # Python 3.11.3
yq : yq # yq 3.2.2
# Other tools
generate_psx_iso_deps : tools/generate_psx_iso_deps.py
generate_compare_deps : tools/generate_compare_deps.py
generate_format_deps : tools/generate_format_deps.py
mkraw_exe_from_toml : tools/mkraw_exe_from_toml.py
mkraw_exe_from_toml_deps: tools/mkraw_exe_from_toml_deps.py
ld_from_toml : tools/ld_from_toml.py
ld_from_toml_deps : tools/ld_from_toml_deps.py
process_path : tools/process_path.py
format_all : tools/format_all.py
# Python
python3_venv: tools/.venv
python3_reqs: tools/requirements.txt
python3 : $(python3_venv)/bin/python3
python3_pip : $(python3_venv)/bin/pip3
# Cargo tools
mkpsexe : $(build_rust_tool_dir)/mkpsexe
mkpsexe_deps : $(build_rust_tool_dir)/mkpsexe-deps
mklang_file : $(build_rust_tool_dir)/mklang-file
mkpack : $(build_rust_tool_dir)/mkpack
mkpack_deps : $(build_rust_tool_dir)/mkpack-deps
mktim : $(build_rust_tool_dir)/mktim
mkmap : $(build_rust_tool_dir)/mkmap
mkmap_deps : $(build_rust_tool_dir)/mkmap-deps
mkmap_tile : $(build_rust_tool_dir)/mkmap-tile
mkmap_tile_deps: $(build_rust_tool_dir)/mkmap-tile-deps
mkrlen : $(build_rust_tool_dir)/mkrlen
mkrlen_deps : $(build_rust_tool_dir)/mkrlen-deps
# Directories
build_dir : build
build_rust_tool_dir : $(build_dir)/tools
build_misc_dir : $(build_dir)/misc
build_psx_iso_dir : $(build_dir)/iso
build_asm_dir : $(build_dir)/asm
build_elf_dir : $(build_dir)/elf
build_psexe_dir : $(build_dir)/psexe
build_rust_dir : $(build_dir)/rust
build_raw_exe_dir : $(build_dir)/raw_exe
build_lang_file_dir : $(build_dir)/lang_file
build_pack_dir : $(build_dir)/pack
build_tim_dir : $(build_dir)/tim
build_map_dir : $(build_dir)/map
build_map_tile_dir : $(build_dir)/map-tile
build_rlen_dir : $(build_dir)/rlen
# Licenses
license_psx_iso : licenses/psx-bin.dat
license_psexe_eu: licenses/psexe-eu.dat
license_psexe_na: licenses/psexe-na.dat
# Misc
dummy_buffer: $(build_misc_dir)/dummy
# Compare
compare_checksums: checksums.sha256
compare_ok : $(build_dir)/compare.ok
compare_deps : $(build_dir)/compare.d
# Format
format_ok : $(build_dir)/format.ok
format_deps: $(build_dir)/format.d
# Rust tool
rust_tool : $(build_rust_tool_dir)/^(name::non_empty)
rust_tool_deps: $(build_rust_tool_dir)/^(name).d
rust_tool_src : tools/^(name)
# Psx iso
dw2003_psx_iso : $(build_psx_iso_dir)/dw2003.bin
dw3_psx_iso : $(build_psx_iso_dir)/dw3.bin
psx_iso : $(build_psx_iso_dir)/^(path).bin
psx_iso_cue : $(build_psx_iso_dir)/^(path).cue
psx_iso_lba : $(build_psx_iso_dir)/^(path).lba
psx_iso_deps : $(build_psx_iso_dir)/^(path).d
psx_iso_xml : ^(path).xml
# Assembly
asm_obj : $(build_asm_dir)/^(path).o
asm_obj_deps: $(build_asm_dir)/^(path).d
asm_src : asm/^(path).s
# Elf
elf : $(build_elf_dir)/^(path).elf
elf_deps : $(build_elf_dir)/^(path).d
elf_linker_script: $(build_elf_dir)/^(path).ld
elf_toml : elf/^(path).toml
# Psexe
psexe : $(build_psexe_dir)/^(path).psexe
psexe_deps: $(build_psexe_dir)/^(path).d
psexe_toml: psexe/^(path).toml
# Raw exe
raw_exe : $(build_raw_exe_dir)/^(path).bin
raw_exe_deps: $(build_raw_exe_dir)/^(path).d
raw_exe_toml: raw_exe/^(path).toml
# Lang
lang_file : $(build_lang_file_dir)/^(path).bin
lang_file_toml: lang_file/^(path).toml
# Pack
pack : $(build_pack_dir)/^(path).bin
pack_deps: $(build_pack_dir)/^(path).d
pack_toml: pack/^(path).toml
# Tim
tim : $(build_tim_dir)/^(path).tim
tim_img : tim/^(path).png
tim_clut: tim/^(path).clut.png
tim_toml: tim/^(path).toml
# Map
map : $(build_map_dir)/^(path).bin
map_deps: $(build_map_dir)/^(path).d
map_toml: map/^(path).toml
# Map tile
map_tile : $(build_map_tile_dir)/^(path).bin
map_tile_deps: $(build_map_tile_dir)/^(path).d
map_tile_toml: map-tile/^(path).toml
# Rlen
rlen : $(build_rlen_dir)/^(path).bin
rlen_deps: $(build_rlen_dir)/^(path).d
rlen_toml: rlen/^(path).toml
# Rust library
rust_lib : $(build_rust_dir)/^(name).a
rust_lib_obj : $(build_rust_dir)/^(name).o
rust_lib_deps: $(build_rust_dir)/^(name).d
# By default built the final `iso`s
default:
- $(dw3_psx_iso)
- $(dw2003_psx_iso)
rules:
# Format
format:
out: [$(format_ok)]
deps: [$(python3), $(format_all), deps_file: $(format_deps)]
exec:
- - $(python3)
- $(format_all)
- [$(touch), $(format_ok)]
# Format dependencies
format-deps:
out: [$(format_deps)]
deps:
- $(python3)
- $(format_all) # Note: `generate_format_deps` depends on this
- $(generate_format_deps)
- static: $(format_deps::dir_name)/
exec:
- - $(python3)
- $(generate_format_deps)
- --format-output
- $(format_ok)
- --deps-file
- $(format_deps)
# Compare
compare:
out: [$(compare_ok)]
deps:
- $(compare_checksums)
- deps_file: $(compare_deps)
- static: $(compare_ok::dir_name)/
exec:
- [$(sha256sum), --check, --quiet, $(compare_checksums)]
- [$(touch), $(compare_ok)]
# Compare dependencies
compare-deps:
out: [$(compare_deps)]
deps:
- $(python3)
- $(compare_checksums)
- $(generate_compare_deps)
- static: $(compare_deps::dir_name)/
exec:
- - $(python3)
- $(generate_compare_deps)
- --checksums
- $(compare_checksums)
- --compare-output
- $(compare_ok)
- --deps-file
- $(compare_deps)
# Clean
clean:
exec:
- [$(rm), -rf, $(build_dir)/]
- [$(rm), -rf, $(python3_venv)/]
- [$(rm), -rf, tools/target/]
- [$(rm), -rf, rust/target/]
# Directories
mkdir:
alias:
dir: $(build_dir)^(path)/
out: [$(dir)]
exec:
- [$(mkdir), -p, $(dir)]
# Python venv
python_venv:
out: [$(python3), $(python3_pip)]
deps:
- $(python3_reqs)
exec:
- [$(python3-sys), -m, venv, $(python3_venv)]
- [$(python3_pip), install, -r, $(python3_reqs)]
# Psx iso
mkpsxiso:
out: [$(psx_iso), $(psx_iso_cue), $(psx_iso_lba)]
deps:
- $(psx_iso_xml)
- $(license_psx_iso)
- deps_file: $(psx_iso_deps)
- static: $(psx_iso::dir_name)/
exec:
- - $(mkpsxiso)
- $(psx_iso_xml)
- -nolimit
- -noxa
- -y
- --quiet
- --output
- $(psx_iso)
- --cuefile
- $(psx_iso_cue)
- -lba
- $(psx_iso_lba)
# Pxs iso dependencies
mkpsxiso-deps:
out: [$(psx_iso_deps)]
deps: [$(python3), $(psx_iso_xml), static: $(psx_iso_deps::dir_name)/]
exec:
- - $(python3)
- $(generate_psx_iso_deps)
- --iso
- $(psx_iso)
- --xml
- $(psx_iso_xml)
- --deps-file
- $(psx_iso_deps)
# Cargo tools
cargo-tool:
out: [$(rust_tool), deps_file: $(rust_tool_deps)]
deps: [static: $(rust_tool::dir_name)/]
exec:
- cwd: tools/
args:
- $(cargo)
- build
- --release
- --bin=^(name)
- -Z=unstable-options
- --out-dir=../$(build_rust_tool_dir)
- [$(cp), tools/target/release/^(name).d, $(rust_tool_deps)]
- - $(sed)
- -i
- -e
- 's,tools/target/release/,$(build_rust_tool_dir)/,g'
- $(rust_tool_deps)
# Buffer
dummy_buffer:
out: [$(dummy_buffer)]
deps: [static: $(dummy_buffer::dir_name)/]
exec:
- [$(touch), $(dummy_buffer)]
- [$(truncate), --size=35283682, $(dummy_buffer)]
# Psexe
psexe:
out: [$(psexe)]
deps:
- $(psexe_toml)
- $(mkpsexe)
- deps_file: $(psexe_deps)
- static: $(psexe::dir_name)/
exec:
- - $(mkpsexe)
- $(psexe_toml)
- --output=$(psexe)
# Psexe dependencies
psexe_deps:
out: [$(psexe_deps)]
deps:
- $(psexe_toml)
- $(mkpsexe_deps)
- static: $(psexe_deps::dir_name)/
exec:
- - $(mkpsexe_deps)
- $(psexe_toml)
- --output=$(psexe)
- --output-deps=$(psexe_deps)
# Raw exe
raw_exe:
out: [$(raw_exe)]
deps:
- $(python3)
- $(raw_exe_toml)
- $(mkraw_exe_from_toml)
- deps_file: $(raw_exe_deps)
- static: $(raw_exe::dir_name)/
exec:
- - $(python3)
- $(mkraw_exe_from_toml)
- $(raw_exe_toml)
- -o
- $(raw_exe)
- --objcopy-bin
- $(objcopy)
# Raw exe dependencies
raw_exe_deps:
out: [$(raw_exe_deps)]
deps:
- $(python3)
- $(raw_exe_toml)
- $(mkraw_exe_from_toml_deps)
- static: $(raw_exe_deps::dir_name)/
exec:
- - $(python3)
- $(mkraw_exe_from_toml_deps)
- $(raw_exe_toml)
- -o
- $(raw_exe)
- --deps
- $(raw_exe_deps)
# Lang file
lang_file:
out: [$(lang_file)]
deps:
- $(lang_file_toml)
- $(mklang_file)
- static: $(lang_file::dir_name)/
exec:
- - $(mklang_file)
- $(lang_file_toml)
- --output=$(lang_file)
# Tim
tim:
out: [$(tim)]
deps:
- $(tim_toml)
- $(mktim)
- opt: $(tim_clut)
- static: $(tim::dir_name)/
exec:
- - $(mktim)
- $(tim_toml)
- --output=$(tim)
# Pack
pack:
out: [$(pack)]
deps:
- $(pack_toml)
- $(mkpack)
- deps_file: $(pack_deps)
- static: $(pack::dir_name)/
exec:
- - $(mkpack)
- $(pack_toml)
- --output=$(pack)
# Pack dependencies
pack_deps:
out: [$(pack_deps)]
deps:
- $(pack_toml)
- $(mkpack_deps)
- static: $(pack_deps::dir_name)/
exec:
- - $(mkpack_deps)
- $(pack_toml)
- --output=$(pack)
- --output-deps=$(pack_deps)
# Map
map:
out: [$(map)]
deps:
- $(map_toml)
- $(mkmap)
- deps_file: $(map_deps)
- static: $(map::dir_name)/
exec:
- - $(mkmap)
- $(map_toml)
- --output=$(map)
# Map dependencies
map_deps:
out: [$(map_deps)]
deps:
- $(map_toml)
- $(mkmap_deps)
- static: $(map_deps::dir_name)/
exec:
- - $(mkmap_deps)
- $(map_toml)
- --output=$(map)
- --output-deps=$(map_deps)
# Map tile
map_tile:
out: [$(map_tile)]
deps:
- $(map_tile_toml)
- $(mkmap_tile)
- deps_file: $(map_tile_deps)
- static: $(map_tile::dir_name)/
exec:
- - $(mkmap_tile)
- $(map_tile_toml)
- --output=$(map_tile)
# Map tile dependencies
map_tile_deps:
out: [$(map_tile_deps)]
deps:
- $(map_tile_toml)
- $(mkmap_tile_deps)
- static: $(map_tile_deps::dir_name)/
exec:
- - $(mkmap_tile_deps)
- $(map_tile_toml)
- --output=$(map_tile)
- --output-deps=$(map_tile_deps)
# Rlen
rlen:
out: [$(rlen)]
deps:
- $(rlen_toml)
- $(mkrlen)
- deps_file: $(rlen_deps)
- static: $(rlen::dir_name)/
exec:
- - $(mkrlen)
- $(rlen_toml)
- --output=$(rlen)
- --auto-compatibility
# Rlen dependencies
rlen_deps:
out: [$(rlen_deps)]
deps:
- $(rlen_toml)
- $(mkrlen_deps)
- static: $(rlen_deps::dir_name)/
exec:
- - $(mkrlen_deps)
- $(rlen_toml)
- --output=$(rlen)
- --output-deps=$(rlen_deps)
# Elf
elf:
out: [$(elf)]
deps:
- $(python3)
- $(elf_toml)
- $(ld_from_toml)
- deps_file: $(elf_deps)
- static: $(elf::dir_name)/
exec:
- - $(python3)
- $(ld_from_toml)
- $(elf_toml)
- -o
- $(elf)
- --linker-script-output
- $(elf_linker_script)
- --ld-bin
- $(ld)
# Elf dependencies
elf_deps:
out: [$(elf_deps)]
deps:
- $(python3)
- $(elf_toml)
- $(ld_from_toml_deps)
- static: $(elf_deps::dir_name)/
exec:
- - $(python3)
- $(ld_from_toml_deps)
- $(elf_toml)
- -o
- $(elf)
- --deps
- $(elf_deps)
# Assembly
asm:
out: [$(asm_obj), deps_file: $(asm_obj_deps)]
deps: [$(asm_src), static: $(asm_obj::dir_name)/]
exec:
- - $(as)
- -MD
- $(asm_obj_deps)
- $(asm_src)
- -o
- $(asm_obj)
- -EL
- -mabi=32
- -mips1
- -march=r3000
- -msoft-float
- -g
- -Iasm/
- -I./
- -I$(asm_src::dir_name)
- --strip-local-absolute
# Zbuild doesn't support `\\\n` yet
- - $(sed)
- -z
- -i
- -e
- 's/\\\n/ /g'
- $(asm_obj_deps)
# Rust library
rust_lib:
alias:
build_target_dir: target/mipsel-sony-psx/release
out:
- $(rust_lib)
- $(rust_lib_obj)
- deps_file: $(rust_lib_deps)
deps:
- static: $(rust_lib::dir_name)/
exec:
# Build the crate and copy the finished library
- cwd: rust/
args:
- $(cargo)
- build
- --release
- --package=^(name)
- -Z=unstable-options
- [$(cp), rust/$(build_target_dir)/lib^(name).a, $(rust_lib)]
# Extract the `.a` and turn it into a `.o`
# Note: Sometimes the linker doesn't like object files being
# within an archive and will ignore them unless they're
# extracted.
# TODO: Fix the linker and remove this. Currently this only extracts
# the crate itself and not any of it's dependencies. This is
# *currently* all we need, but in the future we might need to
# use the dependencies.
- [$(mkdir), -p, $(rust_lib).extracted]
- [$(ar), x, $(rust_lib), --output, $(rust_lib).extracted]
- [
find,
$(rust_lib).extracted,
-type,
f,
-name,
'*^(name)*',
-exec,
mv,
'{}',
$(rust_lib_obj),
';',
]
# Then copy the dependency file and adjust the references
- [$(cp), rust/$(build_target_dir)/lib^(name).d, $(rust_lib_deps)]
- - sed
- -i
- -e
- 's,rust/$(build_target_dir)/lib^(name).a,$(build_rust_dir)/^(name).a,g'
- $(rust_lib_deps)