tuxmake


Nametuxmake JSON
Version 0.13.2 PyPI version JSON
download
home_pagehttps://tuxmake.org/
SummaryThin wrapper to build Linux kernels
upload_time2021-01-05 19:41:30
maintainer
docs_urlNone
authorAntonio Terceiro
requires_python>=3.6
license
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![Pipeline Status](https://gitlab.com/Linaro/tuxmake/badges/master/pipeline.svg)](https://gitlab.com/Linaro/tuxmake/pipelines)
[![coverage report](https://gitlab.com/Linaro/tuxmake/badges/master/coverage.svg)](https://gitlab.com/Linaro/tuxmake/commits/master)
[![PyPI version](https://badge.fury.io/py/tuxmake.svg)](https://pypi.org/project/tuxmake/)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![PyPI - License](https://img.shields.io/pypi/l/tuxmake)](https://gitlab.com/Linaro/tuxmake/blob/master/LICENSE)

[Documentation](https://docs.tuxmake.org/) - [Repository](https://gitlab.com/Linaro/tuxmake) - [Issues](https://gitlab.com/Linaro/tuxmake/-/issues)

TuxMake, by [Linaro](https://www.linaro.org/), is a command line tool and
Python library that provides portable and repeatable Linux kernel builds across
a variety of architectures, toolchains, kernel configurations, and make
targets.

[[_TOC_]]


# About TuxMake

Building Linux is easy, right? You just run "make defconfig; make"!

It gets complicated when you want to support the following combinations:

- Architectures (arc, arm, arm64, i386, mips, parisc, powerpc, riscv, s390, sh,
  sparc, x86_64, etc)
- Toolchains (gcc-8, gcc-9, gcc-10, clang-10, clang-11, clang-nightly, etc)
- Configurations (defconfig, distro configs, allmodconfigs, randconfig, etc)
- Targets (kernel image, documentation, selftests, perf, cpupower, etc)
- Build-time validation (coccinelle, sparse checker, etc)

Each of those items requires specific configuration, and supporting all
combinations is difficult. TuxMake seeks to simplify Linux kernel building by
providing a consistent command line interface to each of those combinations
listed above. You specify what to build at the command line, and TuxMake drives
the build for you, doing the same steps the same way every time.

The real power comes from using TuxMake's curated, portable build environments
distributed as Docker/Podman [container
images]((https://hub.docker.com/u/tuxmake)). When using these versioned and
hermetic filesystem images, your team can use the same exact toolchain(s)
across different workstation platforms. Reporting and reproducing build
failures is trivial by sharing TuxMake command lines with others.

# Installing TuxMake

## Using pip

TuxMake requires Python version 3, and is available using pip.

To install TuxMake on your system globally:

```
sudo pip3 install -U tuxmake
```

To install tuxbuild to your home directory at ~/.local/bin:

```
pip3 install -U --user tuxmake
```

To upgrade TuxMake to the latest version, run the same command you ran to
install it.

## Running TuxMake From Source

If you don't want to or can't install TuxMake, you can run it directly from the
source directory. After getting the sources via git or something else, there is
a `run` script that will do the right think for you: you can either use that
script, or symlink it to a directory in your `PATH`.

```
/path/to/tuxmake/run --help
sudo ln -s /path/to/tuxmake/run /usr/local/bin/tuxmake && tuxmake --help
```

# Using TuxMake

To use TuxMake, navigate to a Linux source tree (where you might usually run
`make`), and run `tuxmake`. By default, it will perform a defconfig build on
your native architecture, using a default compiler (`gcc`).

The behavior of the build can be modified with command-line arguments. Run
`tuxmake --help` to see all command-line arguments.

# Examples

Build from current directory:

    $ tuxmake

Build using Podman:

    $ tuxmake --runtime podman

Build from specific directory:

    $ tuxmake --directory /path/to/linux

Build an arm64 kernel:

    $ tuxmake --target-arch=arm64

Build an arm64 kernel with gcc-10:

    $ tuxmake --target-arch=arm64 --toolchain=gcc-10

Build an arm64 kernel with clang-10:

    $ tuxmake --target-arch=arm64 --toolchain=clang-10

Build tinyconfig on arm64 with gcc-9:

    $ tuxmake -a arm64 -t gcc-9 -k tinyconfig

Build defconfig with additional config from file:

    $ tuxmake --kconfig-add /path/to/my.config

Build defconfig with additional config from URL:

    $ tuxmake --kconfig-add https://foo.com/my.config

Build defconfig with additional in-tree config:

    $ tuxmake --kconfig-add kvm_guest.config

Build defconfig with additional inline config:

    $ tuxmake --kconfig-add CONFIG_KVM_GUEST=y

Build tinyconfig on arm64 with gcc-9 using docker:

    $ tuxmake -r docker -a arm64 -t gcc-9 -k tinyconfig

Build DTBs on arm64 using podman:

    $ tuxmake -r podman -a arm64 -t gcc-9 dtbs

Incremental builds can be done by reusing a build directory:

    $ tuxmake --build-dir=/path/to/output
    # hack on source ...
    $ tuxmake --build-dir=/path/to/output
    # only rebuilds what is needed

Display all options:

    $ tuxmake --help

# Contributing to TuxMake

See the [Contribution Guidelines](docs/contributing.md) document for details in
how to contribute to TuxMake. Contributors are expected to follow the [TuxMake
Code of Conduct](docs/code-of-conduct.md) (the same adopted in the Linux kernel
community).

            

Raw data

            {
    "_id": null,
    "home_page": "https://tuxmake.org/",
    "name": "tuxmake",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "",
    "author": "Antonio Terceiro",
    "author_email": "antonio.terceiro@linaro.org",
    "download_url": "https://files.pythonhosted.org/packages/c4/62/14d3468d144c2aa4f6e93612fbb6d1847019948fd6c62a8ed49a90dd306a/tuxmake-0.13.2.tar.gz",
    "platform": "",
    "description": "[![Pipeline Status](https://gitlab.com/Linaro/tuxmake/badges/master/pipeline.svg)](https://gitlab.com/Linaro/tuxmake/pipelines)\n[![coverage report](https://gitlab.com/Linaro/tuxmake/badges/master/coverage.svg)](https://gitlab.com/Linaro/tuxmake/commits/master)\n[![PyPI version](https://badge.fury.io/py/tuxmake.svg)](https://pypi.org/project/tuxmake/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![PyPI - License](https://img.shields.io/pypi/l/tuxmake)](https://gitlab.com/Linaro/tuxmake/blob/master/LICENSE)\n\n[Documentation](https://docs.tuxmake.org/) - [Repository](https://gitlab.com/Linaro/tuxmake) - [Issues](https://gitlab.com/Linaro/tuxmake/-/issues)\n\nTuxMake, by [Linaro](https://www.linaro.org/), is a command line tool and\nPython library that provides portable and repeatable Linux kernel builds across\na variety of architectures, toolchains, kernel configurations, and make\ntargets.\n\n[[_TOC_]]\n\n\n# About TuxMake\n\nBuilding Linux is easy, right? You just run \"make defconfig; make\"!\n\nIt gets complicated when you want to support the following combinations:\n\n- Architectures (arc, arm, arm64, i386, mips, parisc, powerpc, riscv, s390, sh,\n  sparc, x86_64, etc)\n- Toolchains (gcc-8, gcc-9, gcc-10, clang-10, clang-11, clang-nightly, etc)\n- Configurations (defconfig, distro configs, allmodconfigs, randconfig, etc)\n- Targets (kernel image, documentation, selftests, perf, cpupower, etc)\n- Build-time validation (coccinelle, sparse checker, etc)\n\nEach of those items requires specific configuration, and supporting all\ncombinations is difficult. TuxMake seeks to simplify Linux kernel building by\nproviding a consistent command line interface to each of those combinations\nlisted above. You specify what to build at the command line, and TuxMake drives\nthe build for you, doing the same steps the same way every time.\n\nThe real power comes from using TuxMake's curated, portable build environments\ndistributed as Docker/Podman [container\nimages]((https://hub.docker.com/u/tuxmake)). When using these versioned and\nhermetic filesystem images, your team can use the same exact toolchain(s)\nacross different workstation platforms. Reporting and reproducing build\nfailures is trivial by sharing TuxMake command lines with others.\n\n# Installing TuxMake\n\n## Using pip\n\nTuxMake requires Python version 3, and is available using pip.\n\nTo install TuxMake on your system globally:\n\n```\nsudo pip3 install -U tuxmake\n```\n\nTo install tuxbuild to your home directory at ~/.local/bin:\n\n```\npip3 install -U --user tuxmake\n```\n\nTo upgrade TuxMake to the latest version, run the same command you ran to\ninstall it.\n\n## Running TuxMake From Source\n\nIf you don't want to or can't install TuxMake, you can run it directly from the\nsource directory. After getting the sources via git or something else, there is\na `run` script that will do the right think for you: you can either use that\nscript, or symlink it to a directory in your `PATH`.\n\n```\n/path/to/tuxmake/run --help\nsudo ln -s /path/to/tuxmake/run /usr/local/bin/tuxmake && tuxmake --help\n```\n\n# Using TuxMake\n\nTo use TuxMake, navigate to a Linux source tree (where you might usually run\n`make`), and run `tuxmake`. By default, it will perform a defconfig build on\nyour native architecture, using a default compiler (`gcc`).\n\nThe behavior of the build can be modified with command-line arguments. Run\n`tuxmake --help` to see all command-line arguments.\n\n# Examples\n\nBuild from current directory:\n\n    $ tuxmake\n\nBuild using Podman:\n\n    $ tuxmake --runtime podman\n\nBuild from specific directory:\n\n    $ tuxmake --directory /path/to/linux\n\nBuild an arm64 kernel:\n\n    $ tuxmake --target-arch=arm64\n\nBuild an arm64 kernel with gcc-10:\n\n    $ tuxmake --target-arch=arm64 --toolchain=gcc-10\n\nBuild an arm64 kernel with clang-10:\n\n    $ tuxmake --target-arch=arm64 --toolchain=clang-10\n\nBuild tinyconfig on arm64 with gcc-9:\n\n    $ tuxmake -a arm64 -t gcc-9 -k tinyconfig\n\nBuild defconfig with additional config from file:\n\n    $ tuxmake --kconfig-add /path/to/my.config\n\nBuild defconfig with additional config from URL:\n\n    $ tuxmake --kconfig-add https://foo.com/my.config\n\nBuild defconfig with additional in-tree config:\n\n    $ tuxmake --kconfig-add kvm_guest.config\n\nBuild defconfig with additional inline config:\n\n    $ tuxmake --kconfig-add CONFIG_KVM_GUEST=y\n\nBuild tinyconfig on arm64 with gcc-9 using docker:\n\n    $ tuxmake -r docker -a arm64 -t gcc-9 -k tinyconfig\n\nBuild DTBs on arm64 using podman:\n\n    $ tuxmake -r podman -a arm64 -t gcc-9 dtbs\n\nIncremental builds can be done by reusing a build directory:\n\n    $ tuxmake --build-dir=/path/to/output\n    # hack on source ...\n    $ tuxmake --build-dir=/path/to/output\n    # only rebuilds what is needed\n\nDisplay all options:\n\n    $ tuxmake --help\n\n# Contributing to TuxMake\n\nSee the [Contribution Guidelines](docs/contributing.md) document for details in\nhow to contribute to TuxMake. Contributors are expected to follow the [TuxMake\nCode of Conduct](docs/code-of-conduct.md) (the same adopted in the Linux kernel\ncommunity).\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Thin wrapper to build Linux kernels",
    "version": "0.13.2",
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "f6b721a969aaf3b5e30072c8d4a5a336",
                "sha256": "ac07d07eccf89949bdbab1f328b27f75fda6fd3a6589081d21a5c6b7a77d1152"
            },
            "downloads": -1,
            "filename": "tuxmake-0.13.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f6b721a969aaf3b5e30072c8d4a5a336",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 41280,
            "upload_time": "2021-01-05T19:41:27",
            "upload_time_iso_8601": "2021-01-05T19:41:27.205003Z",
            "url": "https://files.pythonhosted.org/packages/aa/4d/4b17decb0cb013c8cca3958f5e000be0b34094fe4d3a30ce9888067aa600/tuxmake-0.13.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "md5": "1da281f118f865572c9d10262b740342",
                "sha256": "97eddb39923edf69be4990df17ae34dccc7de132a86534e410dccfb0f9082673"
            },
            "downloads": -1,
            "filename": "tuxmake-0.13.2.tar.gz",
            "has_sig": false,
            "md5_digest": "1da281f118f865572c9d10262b740342",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 78225,
            "upload_time": "2021-01-05T19:41:30",
            "upload_time_iso_8601": "2021-01-05T19:41:30.539166Z",
            "url": "https://files.pythonhosted.org/packages/c4/62/14d3468d144c2aa4f6e93612fbb6d1847019948fd6c62a8ed49a90dd306a/tuxmake-0.13.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2021-01-05 19:41:30",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "lcname": "tuxmake"
}
        
Elapsed time: 0.22306s