# premake/premake-core

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/premake-premake-core).**

3,566 stars · 646 forks · C · bsd-3-clause

## Links

- GitHub: https://github.com/premake/premake-core
- Homepage: https://premake.github.io/
- awesome-repositories: https://awesome-repositories.com/repository/premake-premake-core.md

## Topics

`c` `hacktoberfest` `lua` `premake`

## Description

Premake is a build system generator and cross-platform build configuration tool. It functions as a scripting engine that transforms scripted workspace definitions into native project files for multiple build toolsets and compilers. Additionally, it can generate JSON-formatted compilation databases for use with language servers and static analysis tools.

The project distinguishes itself through a programmable runtime that allows for internal function hooking and the interception of build logic. This extensibility enables users to create custom toolset generators, implement modular extensions for new compilers or IDEs, and modify the project generation sequence.

The system covers a broad range of build configuration capabilities, including the management of compiler flags, linker settings, and project hierarchies. It provides tools for automating build pipelines via custom shell commands, managing dependency propagation, and handling cross-platform path normalization.

The tool integrates HTTP and HTTPS requests directly into the configuration process to automate the retrieval of remote assets and external dependencies.

## Tags

### Development Tools & Productivity

- [Build Configuration Languages](https://awesome-repositories.com/f/development-tools-productivity/build-configuration-languages.md) — Uses a domain-specific scripting language to define workspaces, compiler flags, and linker settings instead of manual IDE configuration.
- [Build System Abstractions](https://awesome-repositories.com/f/development-tools-productivity/build-system-abstractions.md) — Functions as a meta-build system that generates native project files for multiple different build systems and platforms.
- [IDE Project Generators](https://awesome-repositories.com/f/development-tools-productivity/ide-extensions/ide-project-generators.md) — Transforms scripted project definitions into native project files for a wide variety of IDEs and compilers.
- [Project File Generators](https://awesome-repositories.com/f/development-tools-productivity/project-file-generators.md) — Implements a script-based system that generates project files for various IDEs and build toolsets. ([source](https://premake.github.io/docs/Configurations-and-Platforms))
- [Automation Scripting Engines](https://awesome-repositories.com/f/development-tools-productivity/automation-scripting-engines.md) — Provides a programmable runtime for executing scripts that automate the creation of project hierarchies and build settings.
- [Cross-Platform Build Systems](https://awesome-repositories.com/f/development-tools-productivity/build-automation-engines/cross-platform-build-systems.md) — Automates the configuration of software to be compiled across different operating systems and hardware architectures.
- [Compiler Flag Customization](https://awesome-repositories.com/f/development-tools-productivity/build-tooling/build-orchestration-logic/build-orchestration-configuration/build-automation-systems/build-systems/compilation-flags/compiler-flag-customization.md) — Provides interfaces for setting compiler flags and target architectures on a per-project or per-file basis. ([source](https://premake.github.io/docs/Whats-New-in-5.0))
- [Compilation Setting Configuration](https://awesome-repositories.com/f/development-tools-productivity/build-tooling/build-orchestration-logic/build-orchestration-configuration/build-configuration-systems/compiler-configurations/compilation-setting-configuration.md) — Offers a unified scripting interface to specify compiler options and platform flags to control code processing. ([source](https://premake.github.io/docs/))
- [Cross-Platform Build Systems](https://awesome-repositories.com/f/development-tools-productivity/cross-platform-build-systems.md) — Manages hardware and operating system variations by defining platform-specific build axes and toolset requirements.
- [Build Target Definitions](https://awesome-repositories.com/f/development-tools-productivity/cross-platform-build-targets/target-specific-build-settings/build-target-definitions.md) — Allows users to define build target artifacts, including source files, languages, and output types for binaries. ([source](https://premake.github.io/docs/Workspaces-and-Projects))
- [Cross-Platform Path Manipulation](https://awesome-repositories.com/f/development-tools-productivity/cross-platform-path-manipulation.md) — Resolves absolute paths and normalizes path separators to ensure consistency across different operating systems. ([source](https://premake.github.io/docs/Lua-Library-Additions))
- [Custom Toolset Generators](https://awesome-repositories.com/f/development-tools-productivity/custom-toolset-generators.md) — A functionality that transforms scripted definitions into compatible files for various build toolsets and editors. ([source](https://cdn.jsdelivr.net/gh/premake/premake-core@master/README.md))
- [Build Property Propagation](https://awesome-repositories.com/f/development-tools-productivity/dependency-tracking/build-property-propagation.md) — Tracks how include directories and library requirements flow from a defining project to its recursive consumers.
- [Programmable Build Logic](https://awesome-repositories.com/f/development-tools-productivity/programmable-build-logic.md) — Provides a programmable runtime to execute complex build logic and file management during project configuration. ([source](https://premake.github.io/docs/Your-First-Script))
- [Source File Management](https://awesome-repositories.com/f/development-tools-productivity/source-file-management.md) — Implements a system for specifying the code and resource files to be included in a build using paths or recursive wildcards. ([source](https://premake.github.io/docs/Adding-Source-Files))
- [Workspace Configurations](https://awesome-repositories.com/f/development-tools-productivity/workspace-configurations.md) — Offers a scripting interface to define workspaces and project configurations for software build processes. ([source](https://cdn.jsdelivr.net/gh/premake/premake-core@master/README.md))
- [Workspace Container Management](https://awesome-repositories.com/f/development-tools-productivity/workspace-container-management.md) — Implements top-level workspace containers that manage shared configurations and global settings inherited by projects. ([source](https://premake.github.io/docs/Workspaces-and-Projects))
- [Build Configuration Mappings](https://awesome-repositories.com/f/development-tools-productivity/build-configuration-mappings.md) — A system for translating global workspace configurations to project-specific values and restricting profile application. ([source](https://premake.github.io/docs/Configurations-and-Platforms))
- [Custom Build Hooks](https://awesome-repositories.com/f/development-tools-productivity/build-environment-configurators/build-environment-shells/build-phase-automation/custom-build-hooks.md) — Allows the addition of shell commands or executable calls to handle non-standard compilation steps. ([source](https://premake.github.io/docs/Feature-Matrix))
- [Custom Build Rules](https://awesome-repositories.com/f/development-tools-productivity/build-environment-configurators/build-environment-shells/build-phase-automation/custom-build-rules.md) — Provides a system for specifying custom build actions and dependencies to control compilation and linking. ([source](https://premake.github.io/docs/Whats-New-in-5.0))
- [Scripted Logic Overrides](https://awesome-repositories.com/f/development-tools-productivity/build-scripts/build-script-overrides/scripted-logic-overrides.md) — Provides a scripting environment to overwrite internal functions and call arrays to modify project processing. ([source](https://premake.github.io/docs/Code-Overview))
- [Build Output Directories](https://awesome-repositories.com/f/development-tools-productivity/build-tooling/build-orchestration-logic/build-orchestration-configuration/build-configuration-systems/build-output-directories.md) — Provides functionality to define and manage the directories where generated workspace and project files are stored. ([source](https://premake.github.io/docs/Workspaces-and-Projects))
- [Reusable Compilation Property Sets](https://awesome-repositories.com/f/development-tools-productivity/build-tooling/build-orchestration-logic/build-orchestration-configuration/build-configuration-systems/compiler-configurations/compilation-setting-configuration/reusable-compilation-property-sets.md) — Implements named sets of build properties to share consistent compiler and linker settings across targets. ([source](https://premake.github.io/docs/Usages-and-Uses))
- [Command Flag Configurations](https://awesome-repositories.com/f/development-tools-productivity/command-flag-configurations.md) — Provides a system for defining user-configurable flags and enumerated lists that trigger specific configuration logic. ([source](https://premake.github.io/docs/Command-Line-Arguments))
- [Command Line Extensions](https://awesome-repositories.com/f/development-tools-productivity/command-line-extensions.md) — Allows the definition of named custom commands that execute specific internal functions when triggered via CLI. ([source](https://premake.github.io/docs/Command-Line-Arguments))
- [Compilation Database Generators](https://awesome-repositories.com/f/development-tools-productivity/compilers-toolchains/cross-compilation-tooling/android-ndk-configurations/compilation-database-generators.md) — Produces JSON-formatted compilation databases to provide language servers and static analysis tools with project structure information. ([source](https://premake.github.io/docs/Using-Premake))
- [Library Search Paths](https://awesome-repositories.com/f/development-tools-productivity/configuration-search-paths/library-search-paths.md) — Allows developers to define the directories where the build system searches for library files during the linking phase. ([source](https://premake.github.io/docs/Linking))
- [Reusable Build Instructions](https://awesome-repositories.com/f/development-tools-productivity/cross-platform-build-targets/target-specific-build-settings/build-configurations/reusable-build-instructions.md) — Provides a system for creating reusable sets of build instructions that apply across multiple projects or targets. ([source](https://premake.github.io/docs/Topics))
- [Platform Axes](https://awesome-repositories.com/f/development-tools-productivity/cross-platform-build-targets/target-specific-build-settings/build-target-definitions/platform-axes.md) — Establishes configuration axes to handle variations in target hardware or operating systems. ([source](https://premake.github.io/docs/Configurations-and-Platforms))
- [Cross-Platform Scripting Runtimes](https://awesome-repositories.com/f/development-tools-productivity/cross-platform-scripting-runtimes.md) — Enables scripting of portable command-line actions for installation and cleanup tasks across different operating systems. ([source](https://premake.github.io/docs/Using-Premake))
- [Reusable Build Parameters](https://awesome-repositories.com/f/development-tools-productivity/reusable-build-parameters.md) — A system for defining reusable sets of build and link parameters in functions to ensure consistency across projects. ([source](https://premake.github.io/docs/Sharing-Configuration-Settings))
- [Task Automation Scripts](https://awesome-repositories.com/f/development-tools-productivity/task-automation-scripts.md) — Provides a runtime for executing portable automation scripts to handle maintenance tasks like source checkouts and packaging. ([source](https://premake.github.io/docs/What-Is-Premake))
- [Third-Party Toolset Integrations](https://awesome-repositories.com/f/development-tools-productivity/third-party-toolset-integrations.md) — Allows integrating third-party scripts to extend the build system with support for new toolsets and languages. ([source](https://premake.github.io/docs/Using-Modules))
- [Build Automation](https://awesome-repositories.com/f/development-tools-productivity/workflow-automation-tools/build-task-automation/build-automation.md) — Provides a system for configuring pre-build and post-build commands and custom build rules to automate the build process. ([source](https://premake.github.io/docs/Project-API))

### DevOps & Infrastructure

- [Project Hierarchies](https://awesome-repositories.com/f/devops-infrastructure/dependency-management/project-management/project-hierarchies.md) — Uses a scripted inheritance model to organize source files and settings into nested workspaces and projects. ([source](https://premake.github.io/docs/))
- [Per-File Build Settings](https://awesome-repositories.com/f/devops-infrastructure/build-configuration-management/per-file-build-settings.md) — Allows assigning specific build settings and configurations to individual files instead of applying them globally. ([source](https://premake.github.io/docs/Feature-Matrix))
- [Project Metadata Specifications](https://awesome-repositories.com/f/devops-infrastructure/configuration-management/file-based-configuration/project-metadata-specifications.md) — Provides a system for specifying project names and target directories to organize generated build files. ([source](https://premake.github.io/docs/Project-API))
- [Static Linking Configurations](https://awesome-repositories.com/f/devops-infrastructure/dependency-management/configuration-declaration-formats/static-linking-configurations.md) — Provides capabilities for specifying the libraries, frameworks, and search directories required for linking the final binary. ([source](https://premake.github.io/docs/Build-Settings))
- [Build System Extensibility](https://awesome-repositories.com/f/devops-infrastructure/release-automation/plugin-extensibility/plugin-extensible-runtimes/build-system-extensibility.md) — Enables the addition of custom build logic and new output formats through modular extensions and action handlers. ([source](https://premake.github.io/docs/))

### Game Development

- [Function Hooking](https://awesome-repositories.com/f/game-development/function-hooking.md) — Implements a programmable runtime that allows hooking into internal functions to alter execution flow and add new actions. ([source](https://premake.github.io/docs/Extending-Premake))

### Programming Languages & Runtimes

- [Domain Specific Languages](https://awesome-repositories.com/f/programming-languages-runtimes/domain-specific-languages.md) — Uses a custom scripting language to describe project hierarchies and build settings instead of static configuration files.
- [Embedded Scripting Extensions](https://awesome-repositories.com/f/programming-languages-runtimes/embedded-scripting-extensions.md) — Uses an embedded scripting language to define project structures and automate the build configuration process. ([source](https://premake.github.io/))
- [Build-Time Optimization Configuration](https://awesome-repositories.com/f/programming-languages-runtimes/compiler-interpreter-internals/compiler-infrastructure/compiler-optimizations/compilation-speed-optimizations/build-time-optimization-configuration.md) — Provides capabilities for setting up precompiled headers and toggling optimization levels for size or speed. ([source](https://premake.github.io/docs/Build-Settings))
- [External Library Linking](https://awesome-repositories.com/f/programming-languages-runtimes/language-interoperability/foreign-function-interfaces/native-library-integrations/external-library-linking.md) — Provides a mechanism to specify external libraries and synthesize platform-specific linking prefixes and extensions. ([source](https://premake.github.io/docs/Linking))
- [Preprocessor and Include Configurations](https://awesome-repositories.com/f/programming-languages-runtimes/preprocessor-and-include-configurations.md) — Provides a capability for setting preprocessor symbols and include directories to control the compilation process. ([source](https://premake.github.io/docs/Build-Settings))
- [Compilation Dialect Configuration](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/programming-languages/dynamic-scripting-languages/lua/language-dialects/compilation-dialect-configuration.md) — Provides a scripting interface for setting language dialects, optimization levels, and preprocessor defines. ([source](https://premake.github.io/docs/Project-API))

### Software Engineering & Architecture

- [Global and Project Scopes](https://awesome-repositories.com/f/software-engineering-architecture/application-lifecycle-management/configuration-management/hierarchical-configuration-systems/multi-project-scoping/per-directory-configuration-scoping/global-and-project-scopes.md) — Organizes build settings into global and project scopes to share common values across multiple targets. ([source](https://premake.github.io/docs/Scopes-and-Inheritance))
- [Conditional Build Configuration](https://awesome-repositories.com/f/software-engineering-architecture/conditional-build-configuration.md) — Supports targeting project settings to specific build configurations or platforms using matching patterns. ([source](https://premake.github.io/docs/Filters))
- [Hierarchical Configuration Systems](https://awesome-repositories.com/f/software-engineering-architecture/hierarchical-configuration-systems.md) — Implements a workspace and project nesting structure to inherit and override build settings across multiple targets.
- [Library Dependency Managers](https://awesome-repositories.com/f/software-engineering-architecture/library-compatibility-managers/library-dependency-managers.md) — Defines include directories and library search paths to ensure external dependencies are correctly located during linking. ([source](https://premake.github.io/docs/Project-API))
- [Dynamic Function Interception](https://awesome-repositories.com/f/software-engineering-architecture/dynamic-function-interception.md) — Provides a mechanism to intercept internal functions and modify the project generation sequence at runtime.
- [Modular Extension Systems](https://awesome-repositories.com/f/software-engineering-architecture/modular-extension-systems.md) — Enables the addition of support for new compilers or IDEs via custom action handlers and markup emitters.
- [Dependency Requirement Propagation](https://awesome-repositories.com/f/software-engineering-architecture/state-synchronization-patterns/context-state-propagators/infrastructure-data-propagators/configuration-propagators/dependency-requirement-propagation.md) — Provides logic to propagate build properties and include requirements from a project to its recursive consumers. ([source](https://premake.github.io/docs/Usages-and-Uses))

### Part of an Awesome List

- [Language and Framework Support Modules](https://awesome-repositories.com/f/awesome-lists/devtools/framework-support/language-and-framework-support-modules.md) — Allows extending the build system with modular support for new languages and frameworks through add-on modules. ([source](https://premake.github.io/docs/What-Is-Premake))
- [Build Systems](https://awesome-repositories.com/f/awesome-lists/devtools/build-systems.md) — Generates build scripts for various IDEs and toolsets.

### Operating Systems & Systems Programming

- [Platform Support](https://awesome-repositories.com/f/operating-systems-systems-programming/platform-development-integration/platform-support.md) — Enables the definition of new target platforms within scripts to tailor output for specific hardware. ([source](https://premake.github.io/docs/Feature-Matrix))
