Files
pkgscripts-ng/SynoBuild
2016-02-02 14:59:43 +08:00

154 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2000-2016 Synology Inc. All rights reserved.
LANG=""
LC_ALL=""
. $(dirname `readlink -f "$0"`)/include/init
Usage() {
cat << EOF
Usage
`basename $0` [OPTIONS] project_name+
Synopsis
Build projects.
Options
-p, --platform {platform}
Specify target platform.
-c, --clean, --dontask
Cleanup before building.
-C, --cleanonly
Cleanup only and exit.
-j, --jobs {num}
Specify how many jobs to build in parallel. Default is 4.
-J Disable parallel build.
-S Disable silent make.
-x {level}
Build all dependant projects. Can specify level of dependency.
Expand project dependency list, and build them in turn.
Cannot be used with -r and default value is 0.
For example, -x3 means to traverse dependency to 3rd level (itself as level 0)
-r {level}
Expand project dependency list reversely, then build all depending projects.
-d, --with-debug
Build with debugging definition.
-N, --noclean
Do not cleanup before building.
--no-builtin
Do not skip built-in projects.
--with-ccache {size}
Set size of ccache to reduce compiler activities. Default is $DefaultCCacheSize.
--with-clean-ccache
Build with a cleared ccache.
--min-sdk {version}
Specify minimum required SDK version (for example, 4.0).
-h, --help
This help message.
EOF
}
AppendSynoXtraCflags(){
SYNO_XTRACFLAGS="-g"
}
ParseExtArgs() {
while [ -n "$1" ]; do # {{{
case "$1" in
"--no-builtin")
IgnoreBuiltin="No"
;;
"--dont-remove-deb")
DontRemoveDeb="Y"
;;
"--min-sdk")
MinSdkVersion="$2"
shift
;;
"--enable-apt")
ENABLE_APT="yes"
;;
*)
ERROR "Unknown option: $1"
;;
esac
shift
done
if [ -z "$BUILD_OPT" ]; then
# call again without parameters
# to prompt user interactively
AskPlatform
fi
}
CollectBuiltinProjs(){
local builtinProjs=
# Resolve built-in projects
if [ "$IgnoreBuiltin" = "Yes" -a -f "$ExcludeListFile" ]; then
ForceBuildProjects="`cat $ExcludeListFile | sed 's/ /|/g'`"
builtinProjs="`echo "$BuiltinProjects" | sed 's/ /\n/g' | grep -vE "$ForceBuildProjects"`"
fi
echo "$builtinProjs"
}
Source "include/config"
Source "include/build"
IgnoreBuiltin="Yes"
MakeClean="Yes"
ExcludeListFile="/seen_curr.list"
ARGS=`getopt -u -l "$BuildDefaultLongArgs,dont-remove-deb,min-sdk:,no-builtin,enable-apt" $BuildDefaultArgs $@`
if [ $? -ne 0 ]; then
Usage
exit 1
fi
set -- $ARGS
CheckPermission
main() {
local projectList=
local logFile=
local builtinProjs=
ParseBuildDefaultArgs "$@"
ParseExtArgs $UnHandledOpt
# Setup build environment
SetupBuildEnv AppendSynoXtraCflags
projectList=$(NormalizeBuildProjects $InputProjs)
INFO "" "projectList=\"$projectList\""
builtinProjs=$(CollectBuiltinProjs)
for ThisProj in $projectList; do
logFile="$LogDir/${ThisProj}.build"
[ -f "$logFile" ] && mv -f $logFile $logFile.old
(
INFO "Start to build ${ThisProj}."
Date0=`date +%s`
SetupBuildProjEnv $ThisProj
BuildProject $ThisProj
Date1=`date +%s`
ShowTimeCost $Date0 $Date1 "Build-->$ThisProj"
INFO "Build ${ThisProj} finished!"
) &> >(tee $logFile)
done
CheckTimeCostLog build $projectList
if ! CheckErrorLog build $projectList; then
return 1
fi
return 0
}
main $@