You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.4 KiB

Each recipe consists of 3 main parts: defining identifiers, setting build
variables, and defining build commands.

The package "mylib" will be used here as an example

General tips:
mylib_foo is written as $(package)_foo in order to make recipes more similar.

Each package is required to define at least these variables:
Version of the upstream library or program. If there is no version, a
placeholder such as 1.0 can be used.
Location of the upstream source, without the file-name. Usually http or
The upstream source filename available at the download path.
The sha256 hash of the upstream file

These variables are optional:
cd to this dir before running configure/build/stage commands.
The file-name of the upstream source if it differs from how it should be
stored locally. This can be used to avoid storing file-names with strange
Names of any other packages that this one depends on.
Filenames of any patches needed to build the package

Build Variables:
After defining the main identifiers, build variables may be added or customized
before running the build commands. They should be added to a function called
$(package)_set_vars. For example:

define $(package)_set_vars

Most variables can be prefixed with the host, architecture, or both, to make
the modifications specific to that case. For example:

Universal: $(package)_cc=gcc
Linux only: $(package)_linux_cc=gcc
x86_64 only: $(package)_x86_64_cc = gcc
x86_64 linux only: $(package)_x86_64_linux_cc = gcc

These variables may be set to override or append their default values.

The *_env variables are used to add environment variables to the respective

Many variables respect a debug/release suffix as well, in order to use them for
only the appropriate build config. For example:
$(package)_cflags_release = -O3
$(package)_cflags_i686_debug = -g
$(package)_config_opts_release = --disable-debug

These will be used in addition to the options that do not specify
debug/release. All builds are considered to be release unless DEBUG=1 is set by
the user.

Other variables may be defined as needed.

Build commands:

For each build, a unique build dir and staging dir are created. For example,
work/build/mylib/1.0-1adac830f6e and work/staging/mylib/1.0-1adac830f6e.

The following build commands are available for each recipe:

Runs from: build dir
Fetch the source file. If undefined, it will be fetched and verified
against its hash.
Runs from: build dir
Verify the source file against its hash and extract it. If undefined, the
source is assumed to be a tarball.
Runs from: build dir/$(package)_build_subdir
Preprocess the source as necessary. If undefined, does nothing.
Runs from: build dir/$(package)_build_subdir
Configure the source. If undefined, does nothing.
Runs from: build dir/$(package)_build_subdir
Build the source. If undefined, does nothing.
Runs from: build dir/$(package)_build_subdir
Stage the build results. If undefined, does nothing.

The following variables are available for each recipe:
$(1)_staging_dir: package's destination sysroot path
$(1)_staging_prefix_dir: prefix path inside of the package's staging dir
$(1)_extract_dir: path to the package's extracted sources
$(1)_build_dir: path where configure/build/stage commands will be run
$(1)_patch_dir: path where the package's patches (if any) are found

Notes on build commands:

For packages built with autotools, $($(package)_autoconf) can be used in the
configure step to (usually) correctly configure automatically. Any
$($(package)_config_opts) will be appended.

Most autotools projects can be properly staged using:
$(MAKE) DESTDIR=$($(package)_staging_dir) install