Code Monkey home page Code Monkey logo

rules_swift's Introduction

Swift Rules for Bazel

Build status

This repository contains rules for Bazel that can be used to build Swift libraries, tests, and executables for macOS and Linux.

To build applications for all of Apple's platforms (macOS, iOS, tvOS, visionOS, and watchOS), they can be combined with the Apple Rules.

If you run into any problems with these rules, please file an issue!

Basic Examples

Create a simple CLI that can run on macOS, Linux, or Windows:

load("@build_bazel_rules_swift//swift:swift.bzl", "swift_binary")

swift_binary(
    name = "cli",
    srcs = ["CLI.swift"],
)

Create a single library target that can be used by other targets in your build:

load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")

swift_library(
    name = "MyLibrary",
    srcs = ["MyLibrary.swift"],
    tags = ["manual"],
)

Reference Documentation

Click here for the reference documentation for the rules and other definitions in this repository.

Quick Setup

1. Install Swift

Before getting started, make sure that you have a Swift toolchain installed.

Apple users: Install Xcode. If this is your first time installing it, make sure to open it once after installing so that the command line tools are correctly configured.

Linux users: Follow the instructions on the Swift download page to download and install the appropriate Swift toolchain for your platform. Take care to ensure that you have all of Swift's dependencies installed (such as ICU, Clang, and so forth), and also ensure that the Swift compiler is available on your system path.

2. Configure your workspace

Copy the WORKSPACE snippet from the releases page.

3. Additional configuration (Linux only)

The swift_binary and swift_test rules expect to use clang as the driver for linking, and they query the Bazel C++ API and CROSSTOOL to determine which arguments should be passed to the linker. By default, the C++ toolchain used by Bazel is gcc, so Swift users on Linux need to override this by setting the environment variable CC=clang when invoking Bazel.

This step is not necessary for macOS users because the Xcode toolchain always uses clang.

Building with Custom Toolchains

macOS hosts: You can build with a custom Swift toolchain (downloaded from https://swift.org/download) instead of Xcode's default. To do so, pass the following flag to Bazel:

--action_env=TOOLCHAINS=toolchain.id

Where toolchain.id is the value of the CFBundleIdentifier key in the toolchain's Info.plist file.

To list the available toolchains and their bundle identifiers, you can run:

bazel run @build_bazel_rules_swift//tools/dump_toolchains

Linux hosts: At this time, Bazel uses whichever swift executable is encountered first on your PATH.

Supporting debugging

To make cacheable builds work correctly with debugging see this doc.

Swift Package Manager Support

To download, build, and reference external Swift packages as Bazel targets, check out rules_swift_package_manager.

Supported bazel versions

rules_apple and rules_swift are often affected by changes in bazel itself. This means you generally need to update these rules as you update bazel.

You can also see the supported bazel versions in the notes for each release on the releases page.

Besides these constraint this repo follows semver as best as we can since the 1.0.0 release.

Bazel release Minimum supported rules version Final supported rules version
8.x (most recent rolling) 0.27.0 current
7.x 0.27.0 current
6.x 0.27.0 current
5.x 0.25.0 1.14.0
4.x 0.19.0 0.24.0
3.x 0.14.0 0.18.0

rules_swift's People

Contributors

allevato avatar keith avatar thomasvl avatar brentleyjones avatar thii avatar swiple-rules-gardener avatar kastiglione avatar compnerd avatar balestrapatrick avatar github-actions[bot] avatar sergiocampama avatar segiddins avatar lberki avatar googlewalt avatar alexeagle avatar cgrindel avatar maxwelle avatar philwo avatar jerrymarino avatar chiragramani avatar mattrobmattrob avatar davidgoldman avatar federicoasara avatar steeve avatar omarzl avatar attilathefun avatar dierksen avatar gferon avatar jszumski avatar tymurmustafaiev avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.