1 Each recipe consists of 3 main parts: defining identifiers, setting build
2 variables, and defining build commands.
4 The package "mylib" will be used here as an example
7 - mylib_foo is written as $(package)_foo in order to make recipes more similar.
10 Each package is required to define at least these variables:
13 Version of the upstream library or program. If there is no version, a
14 placeholder such as 1.0 can be used.
16 $(package)_download_path:
17 Location of the upstream source, without the file-name. Usually http or
21 The upstream source filename available at the download path.
23 $(package)_sha256_hash:
24 The sha256 hash of the upstream file
26 These variables are optional:
28 $(package)_build_subdir:
29 cd to this dir before running configure/build/stage commands.
31 $(package)_download_file:
32 The file-name of the upstream source if it differs from how it should be
33 stored locally. This can be used to avoid storing file-names with strange
36 $(package)_dependencies:
37 Names of any other packages that this one depends on.
40 Filenames of any patches needed to build the package
42 $(package)_extra_sources:
43 Any extra files that will be fetched via $(package)_fetch_cmds. These are
44 specified so that they can be fetched and verified via 'make download'.
48 After defining the main identifiers, build variables may be added or customized
49 before running the build commands. They should be added to a function called
50 $(package)_set_vars. For example:
52 define $(package)_set_vars
56 Most variables can be prefixed with the host, architecture, or both, to make
57 the modifications specific to that case. For example:
59 Universal: $(package)_cc=gcc
60 Linux only: $(package)_linux_cc=gcc
61 x86_64 only: $(package)_x86_64_cc = gcc
62 x86_64 linux only: $(package)_x86_64_linux_cc = gcc
64 These variables may be set to override or append their default values.
82 $(package)_config_opts
84 The *_env variables are used to add environment variables to the respective
87 Many variables respect a debug/release suffix as well, in order to use them for
88 only the appropriate build config. For example:
90 $(package)_cflags_release = -O3
91 $(package)_cflags_i686_debug = -g
92 $(package)_config_opts_release = --disable-debug
94 These will be used in addition to the options that do not specify
95 debug/release. All builds are considered to be release unless DEBUG=1 is set by
96 the user. Other variables may be defined as needed.
100 For each build, a unique build dir and staging dir are created. For example,
101 `work/build/mylib/1.0-1adac830f6e` and `work/staging/mylib/1.0-1adac830f6e`.
103 The following build commands are available for each recipe:
105 $(package)_fetch_cmds:
107 Fetch the source file. If undefined, it will be fetched and verified
110 $(package)_extract_cmds:
112 Verify the source file against its hash and extract it. If undefined, the
113 source is assumed to be a tarball.
115 $(package)_preprocess_cmds:
116 Runs from: build dir/$(package)_build_subdir
117 Preprocess the source as necessary. If undefined, does nothing.
119 $(package)_config_cmds:
120 Runs from: build dir/$(package)_build_subdir
121 Configure the source. If undefined, does nothing.
123 $(package)_build_cmds:
124 Runs from: build dir/$(package)_build_subdir
125 Build the source. If undefined, does nothing.
127 $(package)_stage_cmds:
128 Runs from: build dir/$(package)_build_subdir
129 Stage the build results. If undefined, does nothing.
131 The following variables are available for each recipe:
133 $(1)_staging_dir: package's destination sysroot path
134 $(1)_staging_prefix_dir: prefix path inside of the package's staging dir
135 $(1)_extract_dir: path to the package's extracted sources
136 $(1)_build_dir: path where configure/build/stage commands will be run
137 $(1)_patch_dir: path where the package's patches (if any) are found
139 Notes on build commands:
141 For packages built with autotools, $($(package)_autoconf) can be used in the
142 configure step to (usually) correctly configure automatically. Any
143 $($(package)_config_opts) will be appended.
145 Most autotools projects can be properly staged using:
147 $(MAKE) DESTDIR=$($(package)_staging_dir) install