Package: tuxmake
Documentation-Repository-IssuesTuxMake, byLinaro, 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. TuxMake is a part ofTuxSuite, a suite of
tools and services to help with Linux kernel development.[[TOC]]About TuxMakeBuilding 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/Podmancontainer images.
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 TuxMakeThere are several options for installing TuxMake:From PyPIDebian packagesRPM packagesRun uninstalledUsing TuxMakeTo use TuxMake, navigate to a Linux source tree (where you might usually runmake), and runtuxmake. 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. Runtuxmake --helpto see all command-line arguments.ExamplesBuild from current directory:$ tuxmakeBuild using Podman:$ tuxmake --runtime podmanBuild from specific directory:$ tuxmake --directory /path/to/linuxBuild an arm64 kernel:$ tuxmake --target-arch=arm64Build an arm64 kernel with gcc-10:$ tuxmake --target-arch=arm64 --toolchain=gcc-10Build an arm64 kernel with clang-10:$ tuxmake --target-arch=arm64 --toolchain=clang-10Build tinyconfig on arm64 with gcc-9:$ tuxmake -a arm64 -t gcc-9 -k tinyconfigBuild defconfig with additional config from file:$ tuxmake --kconfig-add /path/to/my.configBuild defconfig with additional config from URL:$ tuxmake --kconfig-add https://foo.com/my.configBuild defconfig with additional in-tree config:$ tuxmake --kconfig-add kvm_guest.configBuild defconfig with additional inline config:$ tuxmake --kconfig-add CONFIG_KVM_GUEST=yBuild tinyconfig on arm64 with gcc-9 using docker:$ tuxmake -r docker -a arm64 -t gcc-9 -k tinyconfigBuild DTBs on arm64 using podman:$ tuxmake -r podman -a arm64 -t gcc-9 dtbsIncremental 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 neededUsing configuration files:# reads command line options from ~/.config/tuxmake/myconfig
$ tuxmake @myconfig
# reads command line options from /tmp/myconfig
$ tuxmake @/tmp/myconfigDisplay all options:$ tuxmake --helpContributing to TuxMakeSee theContribution Guidelinesdocument for details in
how to contribute to TuxMake. Contributors are expected to follow theTuxMake
Code of Conduct(the same adopted in the Linux kernel
community).