The FreeBSD ports framework supports parallel building
using multiple make
sub-processes, which
allows SMP systems to utilize all of
their available CPU power, allowing port
builds to be faster and more effective.
This is achieved by passing -jX
flag
to make(1) running on vendor code. Unfortunately, not
all ports handle parallel building well. Therefore it is
required to explicitly enable this feature by adding
MAKE_JOBS_SAFE=yes
somewhere below the
dependency declaration section of the
Makefile
.
Another option for controlling this feature from the
maintainer's point of view is the
MAKE_JOBS_UNSAFE=yes
variable. It is
used when a port is known to be broken with
-jX
and a user forces the use of multi
processor compilations for all ports in
/etc/make.conf
with the
FORCE_MAKE_JOBS=yes
variable.
If your port uses GNU make,
set USES= gmake
.
Variable | Means |
---|---|
USES= gmake | The port requires gmake to
build. |
GMAKE | The full path for gmake if
it is not in the PATH . |
If your port is an X application that creates
Makefile
files from
Imakefile
files using
imake, then set
USES= imake
. This will cause the
configure stage to automatically do an
xmkmf -a
. If the -a
flag is a problem for your port, set
XMKMF=xmkmf
. If the port uses
imake but does not understand the
install.man
target,
NO_INSTALL_MANPAGES=yes
should be
set.
If your port's source Makefile
has
something else than all
as the main
build target, set ALL_TARGET
accordingly.
Same goes for install
and
INSTALL_TARGET
.
If your port uses the configure
script to generate Makefile
files from
Makefile.in
files, set
GNU_CONFIGURE=yes
. If you want to give
extra arguments to the configure
script
(the default argument is --prefix=${PREFIX}
--infodir=${PREFIX}/${INFO_PATH}
--mandir=${MANPREFIX}/man
--build=${CONFIGURE_TARGET}
), set those
extra arguments in CONFIGURE_ARGS
. Extra
environment variables can be passed using
CONFIGURE_ENV
variable.
configure
Variable | Means |
---|---|
GNU_CONFIGURE | The port uses configure
script to prepare build. |
HAS_CONFIGURE | Same as GNU_CONFIGURE ,
except default configure target is not added to
CONFIGURE_ARGS . |
CONFIGURE_ARGS | Additional arguments passed to
configure script. |
CONFIGURE_ENV | Additional environment variables to be set
for configure script run. |
CONFIGURE_TARGET | Override default configure target. Default
value is
${MACHINE_ARCH}-portbld-freebsd${OSREL} . |
For ports that use CMake,
define USES= cmake
, or
USES= cmake:outsource
to build in a
separate directory (see below).
cmake
Variable | Means |
---|---|
CMAKE_ARGS | Port specific CMake
flags to be passed to the cmake
binary. |
CMAKE_BUILD_TYPE | Type of build (CMake
predefined build profiles). Default is
Release , or
Debug if
WITH_DEBUG is set. |
CMAKE_ENV | Environment variables to be set for
cmake binary. Default is
${CONFIGURE_ENV} . |
CMAKE_SOURCE_PATH | Path to the source directory. Default is
${WRKSRC} . |
CMake supports the following
build profiles: Debug
,
Release
,
RelWithDebInfo
and
MinSizeRel
. Debug
and
Release
profiles respect system
*FLAGS
, RelWithDebInfo
and MinSizeRel
will set
CFLAGS
to -O2 -g
and
-Os -DNDEBUG
correspondingly. The
lower-cased value of CMAKE_BUILD_TYPE
is
exported to the PLIST_SUB
and should be
used if port installs *.cmake
files
depending on the build type (see
deskutils/strigi
for an
example). Please note that some projects may define their
own build profiles and/or force particular build type by
setting CMAKE_BUILD_TYPE
in
CMakeLists.txt
files. In order to
make a port for such a project respect
CFLAGS
and WITH_DEBUG
,
the CMAKE_BUILD_TYPE
definitions must be
removed from those files.
Most CMake-based projects
support an out-of-source method of building. The
out-of-source build for a port can be requested by using the
:outsource
suffix. When enabled,
CONFIGURE_WRKSRC
,
BUILD_WRKSRC
and
INSTALL_WRKSRC
will be set to
${WRKDIR}/.build
and this
directory will be used to keep all files generated during
configuration and build stages, leaving the source directory
intact.
USES= cmake
ExampleThe following snippet demonstrates the use of
CMake for a port.
CMAKE_SOURCE_PATH
is not usually
required, but can be set when the sources are not located
in the top directory, or if only a subset of the project
is intended to be built by the port.
If your port uses SCons,
define USE_SCONS=yes
.
scons
Variable | Means |
---|---|
SCONS_ARGS | Port specific SCons flags passed to the SCons environment. |
SCONS_BUILDENV | Variables to be set in system environment. |
SCONS_ENV | Variables to be set in SCons environment. |
SCONS_TARGET | Last argument passed to SCons, similar to
MAKE_TARGET . |
To make third party SConstruct
respect everything that is passed to SCons in
SCONS_ENV
(that is, most importantly,
CC/CXX/CFLAGS/CXXFLAGS
), patch the
SConstruct
so build
Environment
is constructed like
this:
It may be then modified with
env.Append
and
env.Replace
.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.