Update to 2.2:
- Add support to specify per-machine targets by prefixing the targets in BUILD_TARGETS by the machine they correspond to. Useful, for example, to build different kernels depending on the machine type.
This commit is contained in:
parent
21230d2565
commit
e482c5e9bb
4 changed files with 142 additions and 6 deletions
|
@ -1,6 +1,6 @@
|
|||
# $NetBSD: Makefile,v 1.19 2012/08/15 21:20:14 jmmv Exp $
|
||||
# $NetBSD: Makefile,v 1.20 2012/08/23 02:26:56 jmmv Exp $
|
||||
|
||||
DISTNAME= sysbuild-2.1
|
||||
DISTNAME= sysbuild-2.2
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= # empty
|
||||
DISTFILES= # empty
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.\" $NetBSD: sysbuild.1,v 1.3 2012/08/11 19:32:50 wiz Exp $
|
||||
.\" $NetBSD: sysbuild.1,v 1.4 2012/08/23 02:26:57 jmmv Exp $
|
||||
.\" Copyright 2012 Google Inc.
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
|
@ -26,7 +26,7 @@
|
|||
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
.Dd July 25, 2012
|
||||
.Dd August 22, 2012
|
||||
.Dt SYSBUILD 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -301,6 +301,9 @@ The following variables configure the build process:
|
|||
Whitespace-separated list of targets to pass to
|
||||
.Nm build.sh
|
||||
during builds.
|
||||
Targets can be prefixed by a machine name and a colon, in which case they only
|
||||
apply to that machine; for example,
|
||||
.Sq macppc:kernel=${HOME}/CUSTOM macppc:releasekernel=${HOME}/CUSTOM .
|
||||
.Pp
|
||||
Default:
|
||||
.Sq release .
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
shtk_import cli
|
||||
shtk_import config
|
||||
shtk_import cvs
|
||||
shtk_import list
|
||||
shtk_import process
|
||||
|
||||
|
||||
|
@ -100,6 +101,27 @@ do_one_build() {
|
|||
Xflag="-X$(shtk_config_get XSRCDIR)"
|
||||
fi
|
||||
|
||||
local targets=
|
||||
for target in $(shtk_config_get BUILD_TARGETS); do
|
||||
case "${target}" in
|
||||
*:*)
|
||||
local submachine="$(echo "${target}" | cut -d : -f 1)"
|
||||
local subtarget="$(echo "${target}" | cut -d : -f 2-)"
|
||||
if [ "${submachine}" = "${machine}" ]; then
|
||||
targets="${targets} ${subtarget}"
|
||||
else
|
||||
# The targets have already been validated, so there is
|
||||
# nothing to do in this case.
|
||||
:
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
targets="${targets} ${target}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
( cd "$(shtk_config_get SRCDIR)" && shtk_process_run ./build.sh \
|
||||
-D"${basedir}/destdir" \
|
||||
-M"${basedir}/obj" \
|
||||
|
@ -112,7 +134,7 @@ do_one_build() {
|
|||
-m"${machine}" \
|
||||
${uflag} \
|
||||
${xflag} \
|
||||
$(shtk_config_get BUILD_TARGETS) )
|
||||
${targets} )
|
||||
}
|
||||
|
||||
|
||||
|
@ -136,11 +158,36 @@ sysbuild_build() {
|
|||
|
||||
[ ${#} -eq 0 ] || shtk_config_set BUILD_TARGETS "${*}"
|
||||
|
||||
local machines="$(shtk_config_get MACHINES)"
|
||||
|
||||
# Ensure that the list of targets reference valid machines, if any.
|
||||
local unmatched_targets=
|
||||
for target in $(shtk_config_get BUILD_TARGETS); do
|
||||
case "${target}" in
|
||||
*:*)
|
||||
local submachine="$(echo "${target}" | cut -d : -f 1)"
|
||||
if ! shtk_list_contains "${submachine}" ${machines}; then
|
||||
if [ -n "${unmatched_targets}" ]; then
|
||||
unmatched_targets="${unmatched_targets} ${target}"
|
||||
else
|
||||
unmatched_targets="${target}"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
done
|
||||
[ -z "${unmatched_targets}" ] || shtk_cli_error \
|
||||
"The '${unmatched_targets}' targets do not match any machine" \
|
||||
"in '${machines}'"
|
||||
|
||||
if shtk_config_get_bool UPDATE_SOURCES; then
|
||||
sysbuild_fetch
|
||||
fi
|
||||
|
||||
for machine in $(shtk_config_get MACHINES); do
|
||||
for machine in ${machines}; do
|
||||
do_one_build "${machine}"
|
||||
done
|
||||
}
|
||||
|
|
|
@ -306,6 +306,90 @@ EOF
|
|||
}
|
||||
|
||||
|
||||
atf_test_case build__machine_targets__ok
|
||||
build__machine_targets__ok_body() {
|
||||
create_mock_cvsroot "${MOCK_CVSROOT}"
|
||||
|
||||
create_mock_binary cvs yes
|
||||
PATH="$(pwd):${PATH}"
|
||||
|
||||
atf_check -o save:stdout -e save:stderr sysbuild \
|
||||
-c /dev/null -o CVSROOT="${MOCK_CVSROOT}" \
|
||||
-o MACHINES="amd64 macppc shark" -o NJOBS=2 build \
|
||||
tools macppc:kernel=/foo/bar shark:sets release
|
||||
cat stdout
|
||||
cat >expout <<EOF
|
||||
Command: cvs
|
||||
Directory: ${HOME}/sysbuild/src/.cvs-checkout
|
||||
Arg: -d${MOCK_CVSROOT}
|
||||
Arg: -q
|
||||
Arg: checkout
|
||||
Arg: -P
|
||||
Arg: src
|
||||
|
||||
Command: build.sh
|
||||
Directory: ${HOME}/sysbuild/src
|
||||
Arg: -D${HOME}/sysbuild/amd64/destdir
|
||||
Arg: -M${HOME}/sysbuild/amd64/obj
|
||||
Arg: -N2
|
||||
Arg: -R${HOME}/sysbuild/release
|
||||
Arg: -T${HOME}/sysbuild/amd64/tools
|
||||
Arg: -U
|
||||
Arg: -j2
|
||||
Arg: -mamd64
|
||||
Arg: tools
|
||||
Arg: release
|
||||
|
||||
Command: build.sh
|
||||
Directory: ${HOME}/sysbuild/src
|
||||
Arg: -D${HOME}/sysbuild/macppc/destdir
|
||||
Arg: -M${HOME}/sysbuild/macppc/obj
|
||||
Arg: -N2
|
||||
Arg: -R${HOME}/sysbuild/release
|
||||
Arg: -T${HOME}/sysbuild/macppc/tools
|
||||
Arg: -U
|
||||
Arg: -j2
|
||||
Arg: -mmacppc
|
||||
Arg: tools
|
||||
Arg: kernel=/foo/bar
|
||||
Arg: release
|
||||
|
||||
Command: build.sh
|
||||
Directory: ${HOME}/sysbuild/src
|
||||
Arg: -D${HOME}/sysbuild/shark/destdir
|
||||
Arg: -M${HOME}/sysbuild/shark/obj
|
||||
Arg: -N2
|
||||
Arg: -R${HOME}/sysbuild/release
|
||||
Arg: -T${HOME}/sysbuild/shark/tools
|
||||
Arg: -U
|
||||
Arg: -j2
|
||||
Arg: -mshark
|
||||
Arg: tools
|
||||
Arg: sets
|
||||
Arg: release
|
||||
|
||||
EOF
|
||||
atf_check -o file:expout cat commands.log
|
||||
}
|
||||
|
||||
|
||||
atf_test_case build__machine_targets__unmatched
|
||||
build__machine_targets__unmatched_body() {
|
||||
create_mock_binary cvs yes
|
||||
PATH="$(pwd):${PATH}"
|
||||
|
||||
cat >experr <<EOF
|
||||
sysbuild: E: The 'macpp:kernel=/foo/bar a:b' targets do not match any machine in 'amd64 macppc shark'
|
||||
EOF
|
||||
atf_check -s exit:1 -o empty -e file:experr sysbuild \
|
||||
-c /dev/null -o CVSROOT="${MOCK_CVSROOT}" \
|
||||
-o MACHINES="amd64 macppc shark" -o NJOBS=2 build \
|
||||
tools macpp:kernel=/foo/bar a:b release
|
||||
|
||||
test ! -f commands.log || atf_fail "cvs should not have been executed"
|
||||
}
|
||||
|
||||
|
||||
atf_test_case build__with_x11
|
||||
build__with_x11_body() {
|
||||
create_mock_cvsroot "${MOCK_CVSROOT}"
|
||||
|
@ -655,6 +739,8 @@ atf_init_test_cases() {
|
|||
atf_add_test_case build__remove_all
|
||||
atf_add_test_case build__fast_mode
|
||||
atf_add_test_case build__many_machines
|
||||
atf_add_test_case build__machine_targets__ok
|
||||
atf_add_test_case build__machine_targets__unmatched
|
||||
atf_add_test_case build__with_x11
|
||||
atf_add_test_case build__some_args
|
||||
|
||||
|
|
Loading…
Reference in a new issue