.. _pyke-features: Pyke's features ###################################################### Key Features ================================================================== In this section, apart from talking about common features available on any build tool, I think it makes sense to highlight all those things that differentiate pyke from the rest of build tools. - **Pyke is multi-platform** You can run builds in linux, MS Windows, Mac OS X, Linux, Android,... on any architecture where python runs (which nowadays is almost any platform). - **Pyke supports cross-builds** You can compile things like Android applications from Linux, MS Windows or Mac OS X. - **Single master build file** Pyke can have full visibility of the entire project to parallelize things. From that master file you can include other files, but pyke will always look for the master as the entry point, even if you are building a subcomponent. This feature simplifies many things while it provides better parallelization and faster builds than other build tools. At the same time each subcomponent or subproject can be kept in a separate pyke file for better maintainability. - **Multi-project** This one is related to the one above, it means you can have independent builds for different projects, while still having some master files that glue several projects together, while still maintaining full visibility and parallelization. - **Convenient expressive language** Pyke uses python language underneath which is really convenient to define new rules without relying on external scripts or binary tools only available on some operating systems. - **Straightforward syntax** Even if you don't know python, it is really easy to get started since pyke comes with a set of predefined rules that you can just use or override with your own rules. It is easy to define new build rules for shared components and even platform-dependent components. - **Easy to extend** To say it another way, you can create rules that run external tools, rules that run external scripts, or rules that run python functions. - **Everything is explicit** This means that you can have total control on the build process. - **Automatic folder creation** You don't have to worry about creating folders before running some jobs. - **Automatic clean** This is even better than automatic folder creation, it basically means that you don't need to write extra rules to cleanup folders and files, pyke does this for you. Pyke automatically deletes all output files and folders created on the build when you run a *pyke --clean* (and still, you can add more things to be deleted if you want). Please note that *automatic folder creation* and *automatic clean* are features that can be disabled or customized at will, again, everything should be explicit and as convenient as possible. Comparison with other build tools ================================================================== .. .. Feature comparison .. ====================================================== .. General features .. ------------------------------------------------------ .. ============================== ====== ======= ======= .. -- pyke make ant .. ============================== ====== ======= ======= .. command line interface yes yes yes .. native C/C++ support yes no no .. automatic C/C++ dependencies yes no no .. automatic creation of dirs yes no no .. automatic 'clean' yes no no .. native binutils (cp,rm,...) yes no no .. native Java support yes no yes .. native zip compression yes no no .. native tar/gzip compression yes no no .. native tar/bz2 compression yes no no .. ============================== ====== ======= ======= .. Multi-platform features .. ------------------------------------------------------ .. ============================== ====== ======= ======= .. -- pyke make ant .. ============================== ====== ======= ======= .. MS Windows yes yes yes .. Mac OSX yes yes yes .. Linux yes yes yes .. Freebsd yes yes yes .. x86 yes yes yes .. x64 yes yes yes .. ARM yes yes yes .. PPC yes yes yes .. ============================== ====== ======= ======= Benchmarks / Speed comparison ------------------------------------------------------ These are the build times using different tools to compile a big project with lots of files and lots of dependencies under several operating systems and different architectures. [TODO: add some benchmarks for building C/C++ projects] To perform the tests with a cold disk cache in linux, we run the following command before each test: :: sync; echo 3 >/proc/sys/vm/drop_caches