Skip to content

[Enhancement]: Improve build system #83

Description

@jonbarrow

Checked Existing

  • I have checked the repository for duplicate issues.

What enhancement would you like to see?

Improve the way we build the app. This has multiple parts, so pardon the simple name of the issue.

While getting set up for #82, I realized that the way we build the app has a lot to be desired. Especially for Mac users. This mainly boils down to how many dependencies there are, and how they get installed. The key issues are:

  • CTRPluginFramework lacks instructions of Mac. I was able to get this working by manually adding the [thepixellizeross-lib] section of the the "Linux (dkp-pacman)" instructions (skipping [thepixellizeross-linux]) to pacman.conf, which seemed to work just fine, but this is not documented anywhere
  • 3gxtool does not support Mac at all. I was able to get it building by making minor changes to CMakeLists.txt and extern/dynalo/include/dynalo/detail/config.hpp to trick it into building despite not supporting Mac (which seems to work), but this again not documented anywhere. I did find https://github.com/biometrix76/3gxtool which claims to have added Mac support, but it also changed a ton of files I didn't need to change so I wasn't sure how legit it was (and I didn't feel like digging through it all)
  • bannertool is dead, and has been for some time ([Bug]: armips builds not available and bannertool is down #66). Last year @DaniElectra suggested using https://github.com/carstene1ns/3ds-bannertool since it seemed to be a clean mirror of the original git history, but not only do we still link to the old dead repo but the new repo is now no longer "clean" (several changes have been made that we need to verify before suggesting it)
  • It's honestly just a shit ton of stuff to download, build, and install

While ideally the issues like Mac support would be fixed upstream, we can't control other projects and we have other options. Namely, we could provide a Dockerfile that handles dependencies and building for us so we don't have to worry about those issues. Inkay already does this as well (https://github.com/PretendoNetwork/Inkay/blob/main/.github/workflows/ci.yml). The only concern is making sure bannertool is present (I suggested last year vendoring these dependencies, to avoid them from going down again, but was met with pushback on that).

Additionally, I think it would be good to look into automating the builds. That way we can use CI to push new releases, using the above build system. Inkay also does this already (https://github.com/PretendoNetwork/Inkay/blob/main/Dockerfile).

Any other details to share? (OPTIONAL)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    approvedThe topic is approved by a developerenhancementAn update to an existing part of the codebase

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions