diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..922f268 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.git/ +.github/ +templates/ +*.py +*.yaml +*.md diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..ebeb1c1 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,84 @@ +name: Publish +on: + push: + branches: + - "*" + pull_request: + branches: [ main ] + +jobs: + check_templated_files: + name: Ensure templated Dockerfiles are up to date + runs-on: ubuntu-22.04 + steps: + - name: Checkout repo + uses: actions/checkout@v3 + + - name: Generate templates + run: python3 template.py values.yaml + + - name: Fail if anything has changed + run: git diff --exit-code + + create_matrix: + name: Create Matrix + runs-on: ubuntu-22.04 + outputs: + matrix: ${{ steps.create-matrix.outputs.matrix }} + steps: + - name: Checkout repo + uses: actions/checkout@v3 + + - name: Create list of changed files + run: | + # See https://github.community/t/check-pushed-file-changes-with-git-diff-tree-in-github-actions/17220/10 + if [ $GITHUB_BASE_REF ]; then + # Pull Request + git fetch origin $GITHUB_BASE_REF --depth=1 + export DIFF=$( git diff --name-only origin/$GITHUB_BASE_REF $GITHUB_SHA ) + echo "Diff between origin/$GITHUB_BASE_REF and $GITHUB_SHA" + else + # Push + git fetch origin ${{ github.event.before }} --depth=1 + export DIFF=$( git diff --name-only ${{ github.event.before }} $GITHUB_SHA ) + echo "Diff between ${{ github.event.before }} and $GITHUB_SHA" + fi + echo "$DIFF" | tee changed_files.txt + + - name: Create matrix of images to generate + id: create-matrix + run: | + # e.g. if we wanted to run the matrix for a set of platforms: + # echo "matrix=$(python3 matrix.py values.yaml --platforms n64 ps1 saturn)" >> $GITHUB_OUTPUT + echo "matrix=$(python3 matrix.py values.yaml --dockerfiles changed_files.txt)" >> $GITHUB_OUTPUT + + run_matrix: + name: Run Matrix + permissions: write-all + runs-on: ubuntu-22.04 + needs: [check_templated_files, create_matrix] + if: ${{ needs.create_matrix.outputs.matrix != '' && needs.create_matrix.outputs.matrix != '{"include":[]}' }} + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.create_matrix.outputs.matrix) }} + steps: + - name: Checkout repo + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push to Github registry + uses: docker/build-push-action@v4 + with: + # only publish from main branch and don't publish on forks + push: ${{ github.ref == 'refs/heads/main' && ! github.event.pull_request.head.repo.fork }} + tags: ghcr.io/${{ github.repository }}/${{ matrix.image }}:latest + file: ${{ matrix.dockerfile }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..748588d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +.mypy_cache/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..36868a1 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# decomp.me compilers + +This repository contains the build instructions for all the compilers that are used on decomp.me. + +There is a GitHub Action which will "build" each compiler and upload it to the GitHub Container Registry (ghcr.io). + +When decomp.me is deployed it will fetch each compiler image from the registry. + +## (re-)Generating Dockerfiles from jinja templates + +Due to the large amount of shared steps, the Dockerfiles are driven from jinja templates. +The values that are used to populate the templates are found in values.yaml. + +Rather than modifying the Dockerfiles directly, the `.j2` template should be changed and the Dockerfiles regenerated. + +```sh +python3 -m pip install Jinja2 +python3 template.py +``` + +## Notes: + +- Docker image names must be lowercase therefore compiler ids will be lowercase'd before being uploaded. +- `+` is not a valid character for Docker image names, therefore `+` will be replaced with `_` in image names before being uploaded. diff --git a/matrix.py b/matrix.py new file mode 100644 index 0000000..9254de3 --- /dev/null +++ b/matrix.py @@ -0,0 +1,100 @@ +import argparse +import json +import yaml + +from pathlib import Path + + +def parse_dockerfile_path(file_path): + if not file_path.name == "Dockerfile": + return None + + file_path_parts = file_path.parts + if len(file_path_parts) == 4: + # e.g. platforms/n64/ido6.0/Dockerfile + _, platform, compiler_id, _ = file_path_parts + return [platform, compiler_id, None] + + if len(file_path_parts) == 5: + # e.g. platforms/n64/gcc2.7.2kmc/darwin/Dockerfile + _, platform, compiler_id, arch, _ = file_path_parts + return [platform, compiler_id, arch] + + raise Exception(f"We do not know how to handle this path: {file_path}") + + +def process_dockerfile(platform, compiler_id, arch, base_dir="platforms"): + # image names must be lowercase and "+" is not a valid character + clean_compiler_id = compiler_id.lower().replace("+", "plus") + + return dict( + platform=platform, + compiler_id=compiler_id, + clean_compiler_id=clean_compiler_id, + dockerfile=f"platforms/{platform}/{compiler_id}{'/' + arch if arch else ''}/Dockerfile", + image=f"{platform}/{clean_compiler_id}{'/' + arch if arch else ''}", + ) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "filename", + type=argparse.FileType("r"), + help="Configuration file, e.g. `values.yaml`", + ) + parser.add_argument( + "--dockerfiles", + "--filepaths", + type=argparse.FileType("r"), + help="Path to file containing list of Dockerfiles to filter on, e.g. `--dockerfiles files.txt`", + ) + parser.add_argument( + "--platforms", + type=str, + nargs="+", + help="List of platforms to filter on, e.g. `--platforms n64 ps2`", + ) + args = parser.parse_args() + + values = yaml.safe_load(args.filename) + + local_dockerfiles = [] + for compiler in values.get("compilers", []): + local_dockerfiles.append( + [ + compiler["platform"], + compiler["id"], + compiler.get("arch"), + ] + ) + + if args.dockerfiles: + allowed_dockerfiles = [] + lines = [x.strip() for x in args.dockerfiles.readlines()] + for line in lines: + path = Path(line) + res = parse_dockerfile_path(path) + if res is not None: + allowed_dockerfiles.append(res) + + if len(allowed_dockerfiles) > 0: + local_dockerfiles = filter( + lambda x: x in allowed_dockerfiles, local_dockerfiles + ) + else: + # no Dockerfiles were modified + local_dockerfiles = [] + + if args.platforms: + local_dockerfiles = filter( + lambda x: x[0] in args.platforms, local_dockerfiles + ) + + includes = [process_dockerfile(p, c, a) for (p, c, a) in local_dockerfiles] + matrix = dict(include=includes) + print(json.dumps(matrix, separators=(",", ":"))) + + +if __name__ == "__main__": + main() diff --git a/template.py b/template.py new file mode 100644 index 0000000..ad0c901 --- /dev/null +++ b/template.py @@ -0,0 +1,70 @@ +import argparse +from pathlib import Path + +import yaml + +from jinja2 import Environment, FileSystemLoader, select_autoescape + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "filename", + type=argparse.FileType("r"), + help="Configuration file, e.g. `values.yaml`", + ) + parser.add_argument( + "--template-dir", + "--templates-dir", + type=Path, + default=Path("templates"), + help="Directory to find templates", + ) + parser.add_argument( + "--base-path", + "--dockerfile-path", + type=Path, + default=Path("platforms"), + help="Directory to save templated Dockerfiles", + ) + args = parser.parse_args() + + env = Environment( + loader=FileSystemLoader(args.template_dir), autoescape=select_autoescape() + ) + + values = yaml.safe_load(args.filename) + for compiler in values.get("compilers", []): + if "arch" in compiler: + target_path = ( + args.base_path + / compiler["platform"] + / compiler["id"] + / compiler["arch"] + / "Dockerfile" + ) + else: + target_path = ( + args.base_path / compiler["platform"] / compiler["id"] / "Dockerfile" + ) + + print( + f"{compiler['id']}: Creating {target_path} from {compiler['template']}.j2" + ) + + template_path = compiler["template"] + template = env.get_template(f"{template_path}.j2") + rendered = template.render(compiler) + + target_path.parent.mkdir(parents=True, exist_ok=True) + with target_path.open("w") as f: + f.write( + "# NOTE: This file is generated automatically via template.py. Do not edit manually!\n\n" + ) + f.write("\n") + f.write(rendered) + f.write("\n") # enforce trailing newline + + +if __name__ == "__main__": + main() diff --git a/templates/common/default.j2 b/templates/common/default.j2 new file mode 100644 index 0000000..4255e3b --- /dev/null +++ b/templates/common/default.j2 @@ -0,0 +1,33 @@ +FROM alpine:3.18 as base + +RUN mkdir -p /compilers/{{ platform }}/{{ id }} +{% for url in files | default([file]) | default([]) %} +{% set filename = url.split("/")[-1].split("?")[0] %} +{%- if filename.endswith('.tar.gz') -%} +RUN wget -O {{ filename }} "{{ url }}" +RUN tar xvzf {{ filename }} -C /compilers/{{ platform }}/{{ id }} +{%- elif filename.endswith('.tar.xz') -%} +RUN wget -O {{ filename }} "{{ url }}" +RUN tar xvJf {{ filename }} -C /compilers/{{ platform }}/{{ id }} +{%- elif filename.endswith('.tar.bz2') -%} +RUN wget -O {{ filename }} "{{ url }}" +RUN tar xvjf {{ filename }} -C /compilers/{{ platform }}/{{ id }} +{%- elif filename.endswith('.zip') -%} +RUN wget -O {{ filename }} "{{ url }}" +RUN unzip {{ filename }} -d /compilers/{{ platform }}/{{ id }} +{%- else -%} +RUN wget -O /compilers/{{ platform }}/{{ id }}/{{ filename }} "{{ url }}" +{%- endif -%} +{% endfor %} + +{%- for dir in rm_dirs | default([]) %} +RUN rm -rf /compilers/{{ platform }}/{{ id }}/{{ dir }} +{%- endfor %} + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ +RUN chmod +x /compilers/{{ platform }}/{{ id }}/* + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/templates/common/xz.j2 b/templates/common/xz.j2 new file mode 100644 index 0000000..299cae6 --- /dev/null +++ b/templates/common/xz.j2 @@ -0,0 +1,22 @@ +FROM alpine:3.18 as base + +# download xz first to allow for Docker caching + +WORKDIR /root + +{%- set filename = file.split("/")[-1].split("?")[0] %} + +RUN wget -O {{ filename }} "{{ file }}" +RUN tar xvJf {{ filename }} + +RUN mkdir -p /compilers/{{ platform }}/{{ id }} + +RUN cp -r {{ package_dir | default(id) }}/* /compilers/{{ platform }}/{{ id }} + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ +RUN chmod +x /compilers/{{ platform }}/{{ id }}/* + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/templates/common/zip.j2 b/templates/common/zip.j2 new file mode 100644 index 0000000..a391ad3 --- /dev/null +++ b/templates/common/zip.j2 @@ -0,0 +1,22 @@ +FROM alpine:3.18 as base + +# download zip first to allow for Docker caching + +WORKDIR /root + +{%- set filename = file.split("/")[-1].split("?")[0] %} + +RUN wget -O {{ filename }} "{{ file }}" +RUN unzip {{ filename }} + +RUN mkdir -p /compilers/{{ platform }}/{{ id }} + +RUN cp -r {{ package_dir | default(id) }}/* /compilers/{{ platform }}/{{ id }} + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ +RUN chmod +x /compilers/{{ platform }}/{{ id }}/* + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/templates/gc_wii/mwcceppc.j2 b/templates/gc_wii/mwcceppc.j2 new file mode 100644 index 0000000..c5b8be1 --- /dev/null +++ b/templates/gc_wii/mwcceppc.j2 @@ -0,0 +1,43 @@ +FROM alpine:3.18 as base + +# download zip first to allow for Docker caching + +WORKDIR /root + +{%- set filename = file.split("/")[-1].split("?")[0] %} + +RUN wget -O {{ filename }} "{{ file }}" +RUN unzip {{ filename }} + +RUN mkdir -p /compilers/{{ platform }}/{{ id }} + +RUN cp -r {{ package_dir }}/* /compilers/{{ platform }}/{{ id }} + +RUN chmod +x /compilers/{{ platform }}/{{ id }}/mwcceppc.exe +RUN touch /compilers/{{ platform }}/{{ id }}/license.dat +RUN if [[ -f /compilers/{{ platform }}/{{ id }}/lmgr326b.dll ]]; then \ + mv /compilers/{{ platform }}/{{ id }}/lmgr326b.dll /compilers/{{ platform }}/{{ id }}/LMGR326B.dll; \ + fi +RUN if [[ -f /compilers/{{ platform }}/{{ id }}/lmgr8c.dll ]]; then \ + mv /compilers/{{ platform }}/{{ id }}/lmgr8c.dll /compilers/{{ platform }}/{{ id }}/LMGR8C.dll; \ + fi + +{%- if frank_mwcceppc is defined %} +ARG FRANK_HASH=d19668657d2a5efa42cdffb801090d05734b9dbd + +RUN wget -O /compilers/{{ platform }}/{{ id }}/frank.py https://raw.githubusercontent.com/doldecomp/melee/${FRANK_HASH}/tools/frank.py +RUN cp -r {{ frank_mwcceppc }}/mwcceppc.exe /compilers/{{ platform }}/{{ id }}/mwcceppc.125.exe +RUN chmod +x /compilers/{{ platform }}/{{ id }}/mwcceppc.125.exe +{%- endif %} + +{%- if patched_exe is defined %} +RUN wget -O /compilers/{{ platform }}/{{ id }}/mwcceppc.exe "{{ patched_exe }}" +RUN chmod +x /compilers/{{ platform }}/{{ id }}/mwcceppc.exe +{%- endif %} + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/templates/nds/mwccarm.j2 b/templates/nds/mwccarm.j2 new file mode 100644 index 0000000..849f71f --- /dev/null +++ b/templates/nds/mwccarm.j2 @@ -0,0 +1,23 @@ +FROM alpine:3.18 as base + +# download zip first to allow for Docker caching + +{%- set filename = file.split("/")[-1].split("?")[0] %} + +RUN wget -O {{ filename }} "{{ file }}" +RUN unzip {{ filename }} + +RUN mkdir -p /compilers/{{ platform }}/{{ id }} + +RUN cp -r {{ package_dir }}/* /compilers/{{ platform }}/{{ id }} + +RUN cp */license.dat /compilers/{{ platform }}/{{ id }}/license.dat +RUN mv /compilers/{{ platform }}/{{ id }}/lmgr8c.dll /compilers/{{ platform }}/{{ id }}/LMGR8C.dll + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ +RUN chmod +x /compilers/{{ platform }}/{{ id }}/mwccarm.exe + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/templates/ps1/maspsx.j2 b/templates/ps1/maspsx.j2 new file mode 100644 index 0000000..3b9ea9e --- /dev/null +++ b/templates/ps1/maspsx.j2 @@ -0,0 +1,26 @@ +FROM alpine:3.18 as base + +RUN mkdir -p /compilers/{{ platform }}/{{ id }} + +{%- set filename = file.split("/")[-1].split("?")[0] %} + +RUN wget -O {{ filename }} "{{ file }}" +RUN tar xvzf {{ filename }} -C /compilers/{{ platform }}/{{ id }} + +ARG MASPSX_HASH=44f8a152e5b49e56640fd3cfc20d6bf428e1205e + +RUN wget -O maspsx.zip https://github.com/mkst/maspsx/archive/${MASPSX_HASH}.zip +RUN unzip maspsx.zip +RUN cp -r maspsx-${MASPSX_HASH} /compilers/{{ platform }}/{{ id }}/maspsx + +RUN echo '#!/bin/bash' >> as +RUN echo 'python3 $(dirname -- $0)/maspsx/maspsx.py --run-assembler --no-macro-inc -I${COMPILER_DIR} $@' >> as +RUN cp as /compilers/{{ platform }}/{{ id }}/ + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ +RUN chmod +x /compilers/{{ platform }}/{{ id }}/* + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/templates/ps1/psyq.j2 b/templates/ps1/psyq.j2 new file mode 100644 index 0000000..5fed6d0 --- /dev/null +++ b/templates/ps1/psyq.j2 @@ -0,0 +1,19 @@ +FROM alpine:3.18 as base + +RUN mkdir -p /compilers/{{ platform }}/{{ id }} + +{%- set filename = file.split("/")[-1].split("?")[0] %} + +RUN wget -O {{ filename }} "{{ file }}" +RUN tar xvzf {{ filename }} --strip-components=1 -C /compilers/{{ platform }}/{{ id }} + +RUN wget -O psyq-obj-parser.tar.gz https://github.com/mkst/esa/releases/download/psyq-binaries/psyq-obj-parser.tar.gz +RUN tar xvzf psyq-obj-parser.tar.gz -C /compilers/{{ platform }}/{{ id }}/ + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ +RUN chmod +x /compilers/{{ platform }}/{{ id }}/* + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/templates/switch/clang.j2 b/templates/switch/clang.j2 new file mode 100644 index 0000000..f48b045 --- /dev/null +++ b/templates/switch/clang.j2 @@ -0,0 +1,32 @@ +FROM alpine:3.18 as base + +RUN mkdir -p /compilers/{{ platform }}/{{ id }} + +{%- set filename = file.split("/")[-1].split("?")[0] %} + +RUN wget -O {{ filename }} "{{ file }}" +RUN tar xvJf {{ filename }} --strip-components=1 -C /compilers/{{ platform }}/{{ id }} + +# we only need the clang-x.y.z binary +RUN mv /compilers/{{ platform }}/{{ id }}/bin /compilers/{{ platform }}/{{ id }}/_bin +RUN mkdir /compilers/{{ platform }}/{{ id }}/bin +RUN mv /compilers/{{ platform }}/{{ id }}/_bin/{{ clang_binary }} /compilers/{{ platform }}/{{ id }}/bin +RUN mv /compilers/{{ platform }}/{{ id }}/_bin/clang++ /compilers/{{ platform }}/{{ id }}/bin +RUN mv /compilers/{{ platform }}/{{ id }}/_bin/clang /compilers/{{ platform }}/{{ id }}/bin +RUN rm -rf /compilers/{{ platform }}/{{ id }}/_bin/ + +RUN rm -rf /compilers/{{ platform }}/{{ id }}/libexec +RUN rm -rf /compilers/{{ platform }}/{{ id }}/share + +ARG MUSL_HASH=25ed8669943bee65a650700d340e451eda2a26ba + +RUN wget -O musl.zip https://github.com/open-ead/botw-lib-musl/archive/${MUSL_HASH}.zip +RUN unzip musl.zip +RUN cp -r botw-lib-musl-${MUSL_HASH} /compilers/{{ platform }}/{{ id }}/ + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/templates/win9x/msvc.j2 b/templates/win9x/msvc.j2 new file mode 100644 index 0000000..8c9f5ae --- /dev/null +++ b/templates/win9x/msvc.j2 @@ -0,0 +1,22 @@ +FROM alpine:3.18 as base + +# download zip first to allow for Docker caching + +{%- set filename = file.split("/")[-1].split("?")[0] %} + +RUN wget -O {{ filename }} "{{ file }}" +RUN unzip {{ filename }} + +RUN mkdir -p /compilers/{{ platform }}/{{ id }}/Bin +RUN mkdir -p /compilers/{{ platform }}/{{ id }}/Include + +RUN cp -r {{ bin_dir }}/* /compilers/{{ platform }}/{{ id }}/Bin +RUN cp -r {{ include_dir }}/* /compilers/{{ platform }}/{{ id }}/Include + +RUN chown -R root:root /compilers/{{ platform }}/{{ id }}/ +RUN chmod +x /compilers/{{ platform }}/{{ id }}/Bin/* + + +FROM scratch as release + +COPY --from=base /compilers /compilers diff --git a/values.yaml b/values.yaml new file mode 100644 index 0000000..c47be18 --- /dev/null +++ b/values.yaml @@ -0,0 +1,688 @@ +compilers: +# N64 + - id: gcc2.7.2kmc + platform: n64 + template: common/default + arch: linux + files: + - https://github.com/decompals/mips-gcc-2.7.2/releases/download/main/gcc-2.7.2-linux.tar.gz + - https://github.com/decompals/mips-binutils-2.6/releases/download/main/binutils-2.6-linux.tar.gz + - id: gcc2.7.2kmc + platform: n64 + template: common/default + arch: darwin + files: + - https://github.com/decompals/mips-gcc-2.7.2/releases/download/main/gcc-2.7.2-mac.tar.gz + - https://github.com/decompals/mips-binutils-2.6/releases/download/main/binutils-2.6-mac.tar.gz + + - id: gcc2.7.2sn + platform: n64 + template: common/default + files: + - https://github.com/Mr-Wiseguy/pcsx-redux/releases/download/n64/asn64.exe + - https://github.com/Mr-Wiseguy/pcsx-redux/releases/download/n64/cc1n64.exe + - https://github.com/Mr-Wiseguy/pcsx-redux/releases/download/n64/psyq-obj-parser + + - id: gcc2.7.2snew + platform: n64 + template: common/default + files: + - https://github.com/decompals/SN64-gcc/releases/download/gcc-2.7.2-970404/SN64-gcc-2.7.2-970404-linux.tar.gz + - https://github.com/RocketRet/modern-asn64/releases/download/main-release/modern-asn64.py + + - id: gcc2.8.1pm + platform: n64 + template: common/default + arch: linux + files: + - https://github.com/pmret/gcc-papermario/releases/download/master/linux.tar.gz + - https://github.com/pmret/binutils-papermario/releases/download/master/linux.tar.gz + - id: gcc2.8.1pm + platform: n64 + template: common/default + arch: darwin + files: + - https://github.com/pmret/gcc-papermario/releases/download/master/mac.tar.gz + - https://github.com/pmret/binutils-papermario/releases/download/master/mac.tar.gz + + - id: gcc2.8.1sn + platform: n64 + template: common/default + files: + - https://github.com/marijnvdwerf/sn64/releases/download/1%2C0%2C0%2C2/asn64.exe + - https://github.com/marijnvdwerf/sn64/releases/download/1%2C0%2C0%2C2/cc1n64.exe + - https://github.com/marijnvdwerf/sn64/releases/download/1%2C0%2C0%2C2/cc1pln64.exe + - https://github.com/Mr-Wiseguy/pcsx-redux/releases/download/n64/psyq-obj-parser + + - id: ido5.3 + platform: n64 + template: common/default + arch: linux + file: https://github.com/ethteck/ido-static-recomp/releases/download/v0.6/ido-5.3-recomp-ubuntu-20.04.tar.gz + - id: ido5.3 + platform: n64 + template: common/default + arch: darwin + file: https://github.com/ethteck/ido-static-recomp/releases/download/v0.6/ido-5.3-recomp-macos-latest.tar.gz + + - id: ido5.3_c++ + platform: n64 + template: common/default + file: https://github.com/LLONSIT/qemu-irix-helpers/raw/n/qemu/ido5.3_c++.tar.xz + + - id: ido6.0 + platform: n64 + template: common/default + file: https://github.com/LLONSIT/qemu-irix-helpers/raw/n/qemu/ido6.0.tar.xz + + - id: ido7.1 + platform: n64 + template: common/default + arch: linux + file: https://github.com/ethteck/ido-static-recomp/releases/download/v0.6/ido-7.1-recomp-ubuntu-20.04.tar.gz + - id: ido7.1 + platform: n64 + template: common/default + arch: darwin + file: https://github.com/ethteck/ido-static-recomp/releases/download/v0.6/ido-7.1-recomp-macos-latest.tar.gz + + - id: mips_pro_744 + platform: n64 + template: common/default + file: https://github.com/LLONSIT/qemu-irix-helpers/raw/n/qemu/mipspro7.4.4.tar.xz + + - id: egcs_1.1.2-4 + platform: n64 + template: common/default + file: https://github.com/AngheloAlf/egcs_1.1.2-4/releases/download/latest/egcs_1.1.2-4.tar.gz + + - id: gcc4.4.0-mips64-elf + platform: n64 + template: common/default + file: https://github.com/devwizard64/gcc4.4.0-mips64-elf/releases/download/latest/gcc4.4.0-mips64-elf.tar.gz + +# PS1 + - id: psyq3.3 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq3.3.tar.gz + - id: psyq3.5 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq3.5.tar.gz + - id: psyq3.6 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq3.6.tar.gz + - id: psyq4.0 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq4.0.tar.gz + - id: psyq4.1 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq4.1.tar.gz + - id: psyq4.3 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq4.3.tar.gz + - id: psyq4.4 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq4.4.tar.gz + - id: psyq4.5 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq4.5.tar.gz + - id: psyq4.6 + platform: ps1 + template: ps1/psyq + file: https://github.com/mkst/esa/releases/download/psyq-binaries/psyq4.6.tar.gz + + - id: gcc2.6.3-psx + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.6.3-psx.tar.gz + - id: gcc2.6.3-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.6.3.tar.gz + - id: gcc2.7.1-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.7.1.tar.gz + - id: gcc2.7.2-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.7.2.tar.gz + - id: gcc2.7.2.1-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.7.2.1.tar.gz + - id: gcc2.7.2.2-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.7.2.2.tar.gz + - id: gcc2.7.2.3-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.7.2.3.tar.gz + - id: gcc2.8.0-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.8.0.tar.gz + - id: gcc2.8.1-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.8.1.tar.gz + - id: gcc2.91.66-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.91.66.tar.gz + - id: gcc2.95.2-mipsel + platform: ps1 + template: ps1/maspsx + file: https://github.com/decompals/old-gcc/releases/download/0.3/gcc-2.95.2.tar.gz + +# PS2 + - id: ee-gcc2.9-990721 + platform: ps2 + template: common/default + file: https://cdn.discordapp.com/attachments/1067192766918037536/1067306679806464060/ee-gcc2.9-990721.tar.xz + - id: ee-gcc2.9-991111 + platform: ps2 + template: common/default + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445542279954482/ee-gcc2.9-991111.tar.xz + - id: ee-gcc2.9-991111a + platform: ps2 + template: common/default + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445479797395506/ee-gcc2.9-991111a.tar.xz + - id: ee-gcc2.9-991111-01 + platform: ps2 + template: common/default + file: https://cdn.discordapp.com/attachments/1067192766918037536/1119832299400331314/ee-gcc2.9-991111-01.tar.xz + - id: ee-gcc2.96 + platform: ps2 + template: common/default + file: https://cdn.discordapp.com/attachments/1067192766918037536/1067306680179752990/ee-gcc2.96.tar.xz + - id: ee-gcc3.2-040921 + platform: ps2 + template: common/default + file: https://cdn.discordapp.com/attachments/1067192766918037536/1067306680548855908/ee-gcc3.2-040921.tar.xz + + - id: ee-gcc2.95.2-273a + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: ee-gcc2.95.2-274 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: ee-gcc2.95.3-107 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: ee-gcc2.95.3-114 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: ee-gcc2.95.3-136 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: mwcps2-2.3-991202 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: mwcps2-3.0b22-011126 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: mwcps2-3.0b22-020123 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: mwcps2-3.0b22-020716 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + - id: mwcps2-3.0b22-020926 + platform: ps2 + template: common/xz + file: https://cdn.discordapp.com/attachments/1067192766918037536/1120445708516995118/ps2_compilers.tar.xz + +# MAXOSX + - id: gcc-5370 + platform: macosx + template: common/default + files: + - https://github.com/ChrisNonyminus/powerpc-darwin-cross/releases/download/initial/gcc-5370.tar.gz + - https://gist.githubusercontent.com/ChrisNonyminus/ec53837b151a65e4233fa53604de4549/raw/d7c6fc639310b938fa519e68a8f8d4909acba2ad/convert_gas_syntax.py + - id: gcc-5026 + platform: macosx + template: common/default + files: + - https://github.com/ChrisNonyminus/powerpc-darwin-cross/releases/download/initial/gcc-5026.tar.gz + - https://gist.githubusercontent.com/ChrisNonyminus/ec53837b151a65e4233fa53604de4549/raw/d7c6fc639310b938fa519e68a8f8d4909acba2ad/convert_gas_syntax.py + - id: gcc-5363 + platform: macosx + template: common/default + files: + - https://github.com/ChrisNonyminus/powerpc-darwin-cross/releases/download/initial/gcc-5363.tar.gz + - https://gist.githubusercontent.com/ChrisNonyminus/ec53837b151a65e4233fa53604de4549/raw/d7c6fc639310b938fa519e68a8f8d4909acba2ad/convert_gas_syntax.py + - id: gcc3-1041 + platform: macosx + template: common/default + files: + - https://github.com/ChrisNonyminus/powerpc-darwin-cross/releases/download/initial/gcc3-1041.tar.gz + - https://gist.githubusercontent.com/ChrisNonyminus/ec53837b151a65e4233fa53604de4549/raw/d7c6fc639310b938fa519e68a8f8d4909acba2ad/convert_gas_syntax.py + +# GBA + - id: agbcc + platform: gba + template: common/default + file: https://github.com/pret/agbcc/releases/download/release/agbcc.tar.gz + - id: agbccpp + platform: gba + template: common/default + file: https://github.com/notyourav/agbcc/releases/download/cp/agbcc.tar.gz + +# SATURN + - id: cygnus-2.7-96Q3 + platform: saturn + template: common/zip + package_dir: saturn-compilers-*/cygnus-2.7-96Q3-bin + file: https://github.com/sozud/saturn-compilers/archive/af27f4aa6566c1b0fa5332b488e63d6ffd28bd48.zip + +# SWITCH + - id: clang-3.9.1 + arch: linux + platform: switch + template: switch/clang + file: https://releases.llvm.org/3.9.1/clang+llvm-3.9.1-x86_64-linux-gnu-debian8.tar.xz + clang_binary: clang-3.9 + # 3.9.1 is not available for mac + # - id: clang-3.9.1 + # arch: darwin + # platform: switch + # file: https://releases.llvm.org/3.9.1/clang+llvm-3.9.1-x86_64-apple-darwin.tar.xz + # clang_binary: clang-3.9 + - id: clang-4.0.1 + arch: linux + platform: switch + template: switch/clang + file: https://releases.llvm.org/4.0.1/clang+llvm-4.0.1-x86_64-linux-gnu-debian8.tar.xz + clang_binary: clang-4.0 + - id: clang-4.0.1 + arch: darwin + platform: switch + template: switch/clang + file: https://releases.llvm.org/4.0.1/clang+llvm-4.0.1-x86_64-apple-darwin.tar.xz + clang_binary: clang-4.0 + - id: clang-8.0.0 + arch: linux + platform: switch + template: switch/clang + file: https://releases.llvm.org/8.0.0/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz + clang_binary: clang-8 + - id: clang-8.0.0 + arch: darwin + platform: switch + template: switch/clang + file: https://releases.llvm.org/8.0.0/clang+llvm-8.0.0-x86_64-apple-darwin.tar.xz + clang_binary: clang-8 + +# NDS + - id: mwcc_20_72 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/1.2/base + - id: mwcc_20_79 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/1.2/sp2 + - id: mwcc_20_82 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/1.2/sp2p3 + - id: mwcc_20_84 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/1.2/sp3 + - id: mwcc_20_87 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/1.2/sp4 + + - id: mwcc_30_114 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/base + - id: mwcc_30_123 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp1 + - id: mwcc_30_126 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp1p2 + - id: mwcc_30_131 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp1p5 + - id: mwcc_30_133 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp1p6 + - id: mwcc_30_134 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp1p7 + - id: mwcc_30_136 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp2 + - id: mwcc_30_137 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp2p2 + - id: mwcc_30_138 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp2p3 + - id: mwcc_30_139 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/2.0/sp2p4 + + - id: mwcc_40_1018 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/dsi/1.1 + - id: mwcc_40_1024 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/dsi/1.1p1 + - id: mwcc_40_1026 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/dsi/1.2 + - id: mwcc_40_1027 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/dsi/1.2p1 + - id: mwcc_40_1028 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/dsi/1.2p2 + - id: mwcc_40_1034 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/dsi/1.3 + - id: mwcc_40_1036 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/dsi/1.3p1 + - id: mwcc_40_1051 + platform: nds_arm9 + file: https://cdn.discordapp.com/attachments/698589325620936736/845499146982129684/mwccarm.zip + template: nds/mwccarm + package_dir: mwccarm/dsi/1.6sp1 + +# 3DS + - id: armcc_40_771 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.0/b771 + - id: armcc_40_821 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.0/b821 + + - id: armcc_41_561 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.1/b561 + - id: armcc_41_713 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.1/b713 + - id: armcc_41_791 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.1/b791 + - id: armcc_41_894 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.1/b894 + - id: armcc_41_921 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.1/b921 + - id: armcc_41_1049 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.1/b1049 + - id: armcc_41_1440 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.1/b1440 + - id: armcc_41_1454 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 4.1/b1454 + + - id: armcc_504_82 + platform: n3ds + template: common/zip + file: https://cdn.discordapp.com/attachments/710646040792924172/1148006502980927528/armcc.zip + package_dir: 5.04/b82 + +# WII & GCC + - id: mwcc_233_144 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/1.0 + - id: mwcc_233_159 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/1.1 + - id: mwcc_233_163 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/1.2.5 + - id: mwcc_233_163n + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/1.2.5n + - id: mwcc_242_81 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/1.3.2 + - id: mwcc_247_92 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/2.0 + - id: mwcc_247_105 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/2.5 + - id: mwcc_247_107 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/2.6 + - id: mwcc_247_108 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/2.7 + - id: mwcc_41_60831 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/3.0 + - id: mwcc_41_60126 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/3.0a3 + + - id: mwcc_42_142 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: Wii/1.0 + - id: mwcc_43_151 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: Wii/1.1 + - id: mwcc_43_172 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: Wii/1.3 + - id: mwcc_43_213 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: Wii/1.7 + + - id: mwcc_242_81r + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/598600200084258822/1136883349642825728/MWCCEPPC_1.3.2r.zip + package_dir: 1.3.2r + + - id: mwcc_233_163e + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: GC/1.2.5e + frank_mwcceppc: GC/1.2.5 + + - id: mwcc_42_127 + platform: gc_wii + template: gc_wii/mwcceppc + file: https://cdn.discordapp.com/attachments/727918646525165659/1129759991696457728/GC_WII_COMPILERS.zip + package_dir: Wii/1.0 + patched_exe: https://cdn.discordapp.com/attachments/804212941054279722/954854566304833567/mwcceppc_PATCHED.exe + +# DOS + - id: wcc10.5 + platform: msdos + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/wcc10.5/wcc10.5.tar.gz + - id: wcc10.5a + platform: msdos + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/wcc10.5/wcc10.5a.tar.gz + - id: wcc10.6 + platform: msdos + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/wcc10.5/wcc10.6.tar.gz + - id: wcc11.0 + platform: msdos + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/wcc10.5/wcc11.0.tar.gz + +# WIN9X + - id: msvc6.0 + platform: win9x + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/msvcwin9x/msvc6.0.tar.gz + rm_dirs: + - MFC + - id: msvc6.3 + platform: win9x + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/msvcwin9x/msvc6.3.tar.gz + rm_dirs: + - MFC + - id: msvc6.4 + platform: win9x + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/msvcwin9x/msvc6.4.tar.gz + rm_dirs: + - MFC + - id: msvc6.5 + platform: win9x + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/msvcwin9x/msvc6.5.tar.gz + rm_dirs: + - MFC + - id: msvc6.5pp + platform: win9x + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/msvcwin9x/msvc6.5pp.tar.gz + rm_dirs: + - MFC + - id: msvc6.6 + platform: win9x + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/msvcwin9x/msvc6.6.tar.gz + rm_dirs: + - MFC + - id: msvc7.0 + platform: win9x + template: common/default + file: https://github.com/roblabla/MSVC-7.0-Portable/releases/download/release/msvc7.0.tar.gz + - id: msvc7.1 + platform: win9x + template: common/default + file: https://github.com/OmniBlade/decomp.me/releases/download/msvcwin9x/msvc7.0.tar.gz + rm_dirs: + - MFC + + - id: msvc4.0 + platform: win9x + template: win9x/msvc + file: https://github.com/itsmattkc/MSVC400/archive/821e942fd95bd16d01649401de7943ef87ae9f54.zip + bin_dir: MSVC400-*/BIN + include_dir: MSVC400-*/INCLUDE + - id: msvc4.2 + platform: win9x + template: win9x/msvc + file: https://github.com/itsmattkc/MSVC420/archive/df2c13aad74c094988c6c7e784234c2e778a0e91.zip + bin_dir: MSVC420-*/bin + include_dir: MSVC420-*/include