The Anarchy Tools Build Tool.
atbuild is a small, configurable, mature, and boring Swift buildsystem.
- It just builds your code. That's it. No bells, whistles, file downloads, or feature creep.
- It is extensible and can be easily customized to work how you want.
- It has no magic. It doesn't guess. It does what you tell it to do.
- It has no opinions. It does not look down on you for writing code "wrong".
- It is used to build many large production projects.
It follows the Anarchy Tools philosophy of simple, unopinionated, hackable tools.
Key atbuild features:
- Builds Swift 2 & Swift 3 projects
- Can even build with Xcode's Swift
- Builds projects for OSX, Linux, and iOS (experimental)
- Can run custom scripts before, after, and during builds
- Customize all compile and link flags
- Powerful imports system for managing dependencies
- Overlays, custom tools, and external scripts allow maximum customization
- Uses the next-generation swift-llbuildengine
- Extensive documentation
- It's 1.0!
atbuild pairs well with:
- atpm, the Anarchy Tools Package Manager
- xcode-emit which emits Xcode projects from an atbuild configuration
- SublimeAnarchy, the Swift IDE for Sublime Text 3
- Many other AnarchyTools projects!
With atbuild you define a set of tasks, representing high-level operations like building, running, and cleaning.  Then you can use these tasks from the command line.
$ atbuild build
$ atbuild build-tests
$ atbuild run-tests
$ atbuild #runs a task named "default"Tasks are defined in a clojure-like format. Here's a simple example:
;; This is a comment
(package
  :name "foo"
  ;;These "tasks" are just entrypoints on the CLI.
  ;;For example, `atbuild build` runs the `build` task.
  :tasks {
    :run {
      :tool "shell"               ;;Tools are functions built into atbuild.
      :script "echo Hello world!" ;;The shell tool requires a script
    }
  }
)Name that build.atpkg.  Now we can call
$ atbuild run
Building package foo...
Running task run...
Hello world!
Completed task run.
Built package foo.How do we build a Swift project?  There's a built-in tool called atllbuild, which is our low-level build system.
(package
  :name "foo"
  ;;These "tasks" are just entrypoints on the CLI.
  ;;For example, `atbuild build` runs the `build` task.
  :tasks {
    :build {
      :tool "atllbuild"
      :sources ["src/**.swift"] ;;walk the src directory, looking for Swift files
      :output-type "executable"
      :name "example"
    }
  }
)That's all you need to get started!  atbuild supports many more usecases than can fit in a README.  For more information, browse our documentation.
atbuild supports several command-line options:
- --use-overlay [overlay], which you can read more about in our overlays documentation.
- -f [atpkg-file]which builds a package file other than- build.atpkg
- --help, which displays a usage message
- --clean, which forces a clean build
- --toolchainwhich specifies a nonstandard toolchain (swift installation). By default we try to guess, but you can override our guess here. The special string- xcodeor- xcode-betauses "xcode (beta) swift" for building. (Swift 2.2 does not contain all the tools we use, so you need to have a 3.x snapshot installed as well. However, this is a "mostly" xcode-flavored buildchain.)
- --platformwhich specifies the target platform. By default, this is the current platform. Pass a different value to cross-compile, see platforms for details.
- --configuration, which specifies the active configuration
We publish binary releases, which are the easiest way to get started.
atbuild is self-hosting, so building it with an existing copy is usually your best bet.
That said, if you're doing something fancy, or are bootstrapping onto a new platform, use ./bootstrap/build.sh.
Then you can check the program was built successfully:
$ ./atbuild --help
atbuild - Anarchy Tools Build Tool 0.1.0-dev
https://github.com/AnarchyTools
© 2016 Anarchy Tools Contributors.
Usage:
atbuild [task]
    task: ["default", "helloworld", "bootstrap"]To declare your project to be compatible with Anarchy Tools, simply
[](http://anarchytools.org)Maintainer note: if you edit this file, edit the one in this repo as well.