{"id":27236651,"url":"https://github.com/rythe-interactive/rythe-build-system","last_synced_at":"2025-04-10T17:45:39.734Z","repository":{"id":262020023,"uuid":"886000671","full_name":"Rythe-Interactive/rythe-build-system","owner":"Rythe-Interactive","description":"The Premake build-system scripts for the Rythe ecosystem.","archived":false,"fork":false,"pushed_at":"2025-03-12T11:36:11.000Z","size":69,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-04-05T07:31:53.267Z","etag":null,"topics":["build-system","premake"],"latest_commit_sha":null,"homepage":null,"language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rythe-Interactive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-09T23:23:02.000Z","updated_at":"2025-03-12T11:36:15.000Z","dependencies_parsed_at":"2024-11-10T00:21:02.784Z","dependency_job_id":"e8a72034-26c1-493d-95b7-682bb6d4ded5","html_url":"https://github.com/Rythe-Interactive/rythe-build-system","commit_stats":null,"previous_names":["rythe-interactive/rythe-build-system"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rythe-Interactive%2Frythe-build-system","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rythe-Interactive%2Frythe-build-system/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rythe-Interactive%2Frythe-build-system/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rythe-Interactive%2Frythe-build-system/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rythe-Interactive","download_url":"https://codeload.github.com/Rythe-Interactive/rythe-build-system/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248262343,"owners_count":21074291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-system","premake"],"created_at":"2025-04-10T17:45:39.180Z","updated_at":"2025-04-10T17:45:39.728Z","avatar_url":"https://github.com/Rythe-Interactive.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![rythe logo banner](https://assets.zyrosite.com/dWxb3NO0jWugObXN/logo_for_dark_bg-A3QwL7kkxvfw1ywO.png)](http://rythe-interactive.com)\n[![License-MIT](https://img.shields.io/github/license/Rythe-Interactive/rythe-build-system)](https://github.com/Rythe-Interactive/rythe-build-system/blob/main/LICENSE)\n[![Discord](https://img.shields.io/discord/682321168610623707.svg?label=\u0026logo=discord\u0026logoColor=ffffff\u0026color=7389D8\u0026labelColor=6A7EC2)](https://discord.gg/unVNRbd)\n\nThese are the Premake build-system scripts for the Rythe ecosystem.\n\nRythe uses a build system built on top of Premake5.\nUsing the rythe premake module you can define projects and workspaces.\n\nProjects can either be manually defined, or automatically detected through .rythe_project files.\n.rythe_project files also allows you to customize the project, and report third-party dependencies that don't use the rythe build system.\n\n# Workspaces\n\nWorkspaces define the different project folders with different available configurations. In visual studio every workspace is a seperate solution file.\n\n## Definition\n\n| Field name      | Default value | Description                                             |\n|-----------------|---------------|---------------------------------------------------------|\n| name            | nil           | Name of the workspace.                                  |\n| location        | nil           | Location to generate the workspace at.                  |\n| configurations  | [empty]       | List of configurations to enable for this workspace.    |\n\n# Projects\n\nThe rythe build system defines any action as projects, this can be compiling code, but it can also be executing arbitrary commands.\nProjects are also the main way of interacting with the rythe build system.\n\n## Definition\n\n| Field name                          | Default value                 | Description                                                                                                                          |\n|-------------------------------------|-------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|\n| init                                | nil                           | Initialization function, this allows you to dynamically change project fields upon project load based on the workspace context       |\n| alias                               | \u003cProject name\u003e                | Alias for the project name                                                                                                           |\n| namespace                           | \u003cProject name\u003e                | Project namespace, also used for folder structures                                                                                   |\n| types                               | \u003cBased on folder structure\u003e   | Target types this projet uses, valid values: \"application\", \"module\", \"editor\", \"library\", \"header-only\", \"util\", \"test\"             |\n| additional_types                    | [empty]                       | Extra target types to add to the project, can be used if you don't want to override the default project types                        |\n| dependencies                        | [empty]                       | Project dependency definitions, format: [(optional)\u003cpublic|private\u003e(default \u003cprivate\u003e)] [path][(optional):\u003ctype\u003e(default \u003clibrary\u003e)] |\n| fast_up_to_date_check               | true                          | Enable or disable Visual Studio check if project outputs are already up to date (handy to turn off on util projects)                 |\n| warning_level                       | \"High\"                        | Compiler warning level to enable, valid values: \"Off\", \"Default\", \"Extra\", \"High\", \"Everything\"                                      |\n| warnings_as_errors                  | true                          | Treat warnings as errors                                                                                                             |\n| additional_warnings                 | nil                           | List of additional warnings to enable, for Visual Studio this needs to be the warning number instead of the name                     |\n| exclude_warnings                    | nil                           | List of warnings to explicitly disable, for Visual Studio this needs to be the warning number instead of the name                    |\n| floating_point_config               | \"Default\"                     | Floating point configuration for the compiler to use, valid values: \"Default\", \"Fast\", \"Strict\", \"None\"                              |\n| vector_extensions                   | nil                           | Which vector extension to enable, see: https://premake.github.io/docs/vectorextensions/                                              |\n| defines                             | [empty]                       | Additional defines on top of the default ones Rythe will add (PROJECT_NAME, PROJECT_FULL_NAME, PROJECT_NAMESPACE)                    |\n| files                               | [\"./**\"]                      | File filter patterns to find source files with                                                                                       |\n| exclude_files                       | nil                           | Exclude patterns to exclude source files with                                                                                        |\n| additional_include_dirs             | [empty]                       | Additional include dirs for #include \"\"                                                                                              |\n| additional_external_include_dirs    | [empty]                       | Additional external include dirs for #include \u003c\u003e on top of the ones Rythe will auto detect from dependencies                         |\n| pre_build                           | nil                           | Prebuild command                                                                                                                     |\n| post_build                          | nil                           | Postbuild command                                                                                                                    |\n| pre_link                            | nil                           | Prelink command                                                                                                                      |\n| multi_core_compilation              | true                          | Allow project to be compiled in parallel                                                                                             |\n| link_time_optimization              | true                          | Enable LTO                                                                                                                           |\n| pch_enabled                         | false                         | Enable precompiled headers                                                                                                           |\n| pch_file_name                       | \"pch\"                         | File name for pch header and pch source files (e.g. pch.hpp and pch.cpp will have the name: \"pch\")                                   |\n\n## Project types\n\nProjects can have many different project types. If none were specified then the build system will attempt to detect it from the folder structure of where the project lives.\nEach project type does different things or has different side effects/outputs when built. A project is mostly organized around a collection of files and a location.\nSo if multiple different actions need to happen revolving the same folder, it's recommended to use different project types instead of multiple different projects.\nThe exception is for util projects, util projects can not have any other types than util.\n\n### application\n\nApplication projects, as the name suggests, generates an executable application upon build.\nThis is used for for instance you final output executable, or for executable tools that can be run standalone.\nThis project type can also be usefull for examples or tests that don't require the test framework automatically added to test projects.\n\n### module\n\nModule projects are projects that compile into a rythe module, to either be statically linked, or dynamically loaded by the rythe runtime.\nAll modules by default depend on the rythe-core module in order to get the prerequisites of linking/loading and behaving like a rythe module.\n\n### editor\n\nEditor projects are projects that compile into a rythe editor module.\nEditor projects are expected to be bundled with a module project, and will automatically get the module project as a dependency.\nThe main goal of this project type is to provide editor tooling and compatibility with the module project.\nSimilar to normal modules, these by default depend on rythe-core.\nThe main difference is that these projects also depend on rythe-editor, and have access to editor only frameworks.\nThese modules will only be dynamically loaded by the rythe editor runtime, and will be ignored by the rythe release runtimes.\n\n### library\n\nLibrary projects are simple libraries with no other extras. These can either be statically or dynamically compiled and linked by other projects.\n\n### header-only\n\nAs the name suggests, this is for header-only libraries that don't require compilation.\nThese can be depended on by other projects. The rythe build system will then take of the include paths.\n\n### util\n\nUtil projects can't be bundled with any other project types. Util projects aren't expected to have any particular effect or output.\nUtil projects can be used to execute any kind of command or list of commands.\nOther projects can depend on the util project in order to make sure the util project is always run before the build of the project.\n\n### test\n\nTest projects are projects that automatically depend on whatever other project type was added, and also automatically gets access to the test framework.\nThe primary goal of this project type is for unit testing.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frythe-interactive%2Frythe-build-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frythe-interactive%2Frythe-build-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frythe-interactive%2Frythe-build-system/lists"}