Skip to main content

Pilot Light Build

Project description

Pilot Light Build

The pl-build tool is a lightweight utility used to generate batch/bash build scripts.

Background

The pl-build tool is a part of the larger Pilot Light project. In this larger project, we do not have a "build system" per se. Instead we prefer to write batch/bash scripts that directly call the compiler (in a manner similar to Casey Muratori's Handmade Hero). If this project was an end user product, this would be the end of it. However, this is not the case. It is meant to be easily extended through adding additional extensions and being used as a "pilot light" to start new projects. With this comes a couple issues. Extensions are meant to be cross platform so users need the ability to easily add new binaries for all target platforms with minimal duplication. Users shouldn't need to be bash or batch scripting experts to build new targets for all platforms and shouldn't need to test the build scripts continuously on each platform.

Another way of putting it, is we want to focus on what matters to build binaries. Ultimately this is just compiler & linker settings. We don't want to think about the differences in bash/batch syntax.

The idea is simple:

flowchart LR

    gen_build.py --> build_win32.bat

    gen_build.py --> build_linux.sh

    gen_build.py --> build_macos.sh

Features

  • entire system can be understood in an hour

  • minimizes duplicated information

  • generates standalone simple build scripts

  • fine-grained control over compilation & linker settings

  • supports hot reloading

  • easily extended to add new platforms & compilers

  • extremely light weight

  • no preference on editor/IDE

  • doesn't pretend different platforms don't exist

Documentation

Documentation can be found here.

Examples

Real World

Complete & more advanced examples can be found here:

Basic Example

This is just an example of the what an input and output scripts look like (this will not actually run).

input - gen_build.py

import pl_build.core as pl

import pl_build.backend_win32 as win32

import pl_build.backend_linux as linux

import pl_build.backend_macos as macos



with pl.project("tutorial"):



    pl.set_hot_reload_target("../out/pilot_light")



    with pl.target("example", pl.TargetType.EXECUTABLE):



        # shared across configs

        pl.set_output_directory("out")

        pl.set_output_binary("example")

        pl.add_source_files("main.c")



        with pl.configuration("debug"):



            with pl.platform("Windows"):

                with pl.compiler("msvc"):

                    pl.add_compiler_flags("-Od")



            with pl.platform("Linux"):

                with pl.compiler("gcc"):

                    pl.add_compiler_flags("-g")

                    pl.add_linker_flags("-ldl")



            with pl.platform("Darwin"):

                with pl.compiler("clang"):

                    pl.add_compiler_flags("-g", "--debug")

                    pl.add_linker_flags("-Wl,-rpath,/usr/local/lib")

                    

win32.generate_build("build_win32.bat")

linux.generate_build("build_linux.sh")

macos.generate_build("build_macos.sh")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pl_build-1.1.0.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pl_build-1.1.0-py3-none-any.whl (17.5 kB view details)

Uploaded Python 3

File details

Details for the file pl_build-1.1.0.tar.gz.

File metadata

  • Download URL: pl_build-1.1.0.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.13

File hashes

Hashes for pl_build-1.1.0.tar.gz
Algorithm Hash digest
SHA256 03fbf06437d41e0bcc3976f3a89c5bf707a8dd485c1210bf0c59e0cd8668c88f
MD5 3b40693215aa8304e665bad2a59a7f0c
BLAKE2b-256 5d06e6187abf0c39052504fc6e3bdd2415ef0f27a5b9d2893bbd996b0cb41ec8

See more details on using hashes here.

File details

Details for the file pl_build-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: pl_build-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.13

File hashes

Hashes for pl_build-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1651ed2776aadcf6cf6ef14419fc31dd0a1787fb67fdfd38b6cb5ee7843d3ace
MD5 3e0ab8cfac42e6097b419a98d396e4f8
BLAKE2b-256 b773225001f92c5e54280b69cabeba19032f276f11e5374a765ccfa1c7d85b11

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page