[xmake] Add support build all targets in top dir
This commit is contained in:
120
xmake.sh
120
xmake.sh
@@ -12,27 +12,28 @@ fi
|
|||||||
MAKE_JOBS=
|
MAKE_JOBS=
|
||||||
XTARGET=
|
XTARGET=
|
||||||
OPT_FULL_REBUILD=false
|
OPT_FULL_REBUILD=false
|
||||||
while getopts "j:t:f" opt; do
|
BUILD_ONLY_INITRAMFS=false
|
||||||
|
BUILD_SKIP_INITRAMFS=false
|
||||||
|
|
||||||
|
while getopts "j:t:fis" opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
j) MAKE_JOBS=$OPTARG;;
|
j) MAKE_JOBS=$OPTARG;;
|
||||||
t) XTARGET=$OPTARG;;
|
t) XTARGET=$OPTARG;;
|
||||||
f) OPT_FULL_REBUILD=true;;
|
f) OPT_FULL_REBUILD=true;;
|
||||||
|
i) BUILD_ONLY_INITRAMFS=true;;
|
||||||
|
s) BUILD_SKIP_INITRAMFS=true;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
[ -z "$XTARGET" ] && die "Target config not specified!"
|
[ -z "$XTARGET" ] && die "Target config not specified!"
|
||||||
|
|
||||||
if echo "$XTARGET" | grep -E '[ "]' >/dev/null ;then
|
if echo "$XTARGET" | grep -E '[ "]' >/dev/null ;then
|
||||||
die "Target config filename cannot contain spaces!"
|
die "Target config filename cannot contain spaces!"
|
||||||
fi
|
fi
|
||||||
TARGETCFG=$XDIR/$XTARGET
|
|
||||||
XTARGET_EXT="${XTARGET##*.}"
|
|
||||||
[ $XTARGET_EXT != config ] && TARGETCFG=$TARGETCFG.config
|
|
||||||
[ ! -f $TARGETCFG ] && die "File '"`basename $TARGETCFG`"' not found!"
|
|
||||||
|
|
||||||
CFG=$XDIR/.config
|
function clean_all {
|
||||||
|
local cfg=$XDIR/.config
|
||||||
if [ $OPT_FULL_REBUILD = true ]; then
|
[ -f $cfg ] && make clean
|
||||||
[ -f $CFG ] && make clean
|
|
||||||
rm -rf $XDIR/tmp
|
rm -rf $XDIR/tmp
|
||||||
rm -rf $XDIR/feeds/luci.tmp
|
rm -rf $XDIR/feeds/luci.tmp
|
||||||
rm -rf $XDIR/feeds/packages.tmp
|
rm -rf $XDIR/feeds/packages.tmp
|
||||||
@@ -40,10 +41,18 @@ if [ $OPT_FULL_REBUILD = true ]; then
|
|||||||
rm -rf $XDIR/staging_dir/packages
|
rm -rf $XDIR/staging_dir/packages
|
||||||
rm -rf $XDIR/staging_dir
|
rm -rf $XDIR/staging_dir
|
||||||
rm -rf $XDIR/build_dir
|
rm -rf $XDIR/build_dir
|
||||||
fi
|
[ "$XTARGET" = "*" ] && rm -rf $XDIR/bin/*
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_target {
|
||||||
|
local target_cfg=$1
|
||||||
|
local CFG=$XDIR/.config
|
||||||
|
local inc
|
||||||
|
local inclst
|
||||||
|
local incfn
|
||||||
|
|
||||||
rm -f $CFG
|
rm -f $CFG
|
||||||
cp -f $TARGETCFG $CFG
|
cp -f $target_cfg $CFG
|
||||||
if is_nss_repo $XDIR; then
|
if is_nss_repo $XDIR; then
|
||||||
sed -i "/#include _base/a #include _addons_nss.config" $CFG
|
sed -i "/#include _base/a #include _addons_nss.config" $CFG
|
||||||
fi
|
fi
|
||||||
@@ -169,12 +178,91 @@ if [ "$kmod_nf_nathelper_extra" = y ]; then
|
|||||||
echo net.netfilter.nf_conntrack_helper=1 >> $SYSCTLCONF_FN
|
echo net.netfilter.nf_conntrack_helper=1 >> $SYSCTLCONF_FN
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$MAKE_JOBS" ]; then
|
local make_jobs=$MAKE_JOBS
|
||||||
MAKE_JOBS=$( grep processor /proc/cpuinfo | tail -n 1 | awk '{print $3}' )
|
if [ -z "$make_jobs" ]; then
|
||||||
|
make_jobs=$( grep processor /proc/cpuinfo | tail -n 1 | awk '{print $3}' )
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#make tools/install -j$MAKE_JOBS
|
#make tools/install -j$make_jobs
|
||||||
#make toolchain/install -j$MAKE_JOBS
|
#make toolchain/install -j$make_jobs
|
||||||
|
|
||||||
make PARALLEL_BUILD=1 -j $MAKE_JOBS download world
|
make -j $make_jobs download world
|
||||||
|
}
|
||||||
|
|
||||||
|
function build_config {
|
||||||
|
local cfg=$1
|
||||||
|
local cfg_name=$( basename $cfg )
|
||||||
|
local target_name=${cfg_name%.*}
|
||||||
|
local board=$( get_cfg_board $cfg )
|
||||||
|
local subtarget=$( get_cfg_subtarget $cfg $board )
|
||||||
|
local device=$( get_cfg_dev_lst $cfg $board $subtarget )
|
||||||
|
local outdir=$XDIR/bin/targets/$board/$subtarget
|
||||||
|
echo Start build for target $cfg_name "($board-$subtarget-$device)"
|
||||||
|
|
||||||
|
build_target $cfg_name
|
||||||
|
|
||||||
|
if [ ! -f $outdir/kernel-debug.tar.zst ]; then
|
||||||
|
echo "ERROR: cannot build images for target $target_name"
|
||||||
|
rm -rf $outdir
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
rm -rf $outdir/packages
|
||||||
|
[ ! -d $XOUT/$target_name ] && mkdir -p $XOUT/$target_name
|
||||||
|
mv $outdir/* $XOUT/$target_name
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$XTARGET" != "*" ]; then
|
||||||
|
TARGETCFG=$XDIR/$XTARGET
|
||||||
|
XTARGET_EXT="${XTARGET##*.}"
|
||||||
|
[ $XTARGET_EXT != config ] && TARGETCFG=$TARGETCFG.config
|
||||||
|
[ ! -f $TARGETCFG ] && die "File '"`basename $TARGETCFG`"' not found!"
|
||||||
|
|
||||||
|
[ $OPT_FULL_REBUILD = true ] && clean_all
|
||||||
|
|
||||||
|
build_target $TARGETCFG
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
XOUT=$XDIR/xout
|
||||||
|
CFG_LIST=$( find $XDIR/* -maxdepth 1 -name '[a-z0-9]*.config' )
|
||||||
|
|
||||||
|
rm -rf $XOUT
|
||||||
|
|
||||||
|
if [ -z "$CFG_LIST" ]; then
|
||||||
|
echo "ERROR: Cannot found supported configs!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
INITRAMFS_COUNT=0
|
||||||
|
for CFG in $CFG_LIST; do
|
||||||
|
if [[ "$CFG" == *"_initramfs"* ]]; then
|
||||||
|
INITRAMFS_COUNT=$(( INITRAMFS_COUNT + 1 ))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $INITRAMFS_COUNT = 0 ] && [ $BUILD_ONLY_INITRAMFS = true ]; then
|
||||||
|
echo "ERROR: Cannot found initramfs configs!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $INITRAMFS_COUNT -gt 0 ] && [ $BUILD_SKIP_INITRAMFS != true ]; then
|
||||||
|
echo "Start make initramfs configs!"
|
||||||
|
clean_all
|
||||||
|
for CFG in $CFG_LIST; do
|
||||||
|
[[ "$CFG" != *"_initramfs"* ]] && continue # process only initramfs configs
|
||||||
|
build_config $CFG
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $BUILD_ONLY_INITRAMFS != true ]; then
|
||||||
|
echo "Start make non initramfs configs!"
|
||||||
|
clean_all
|
||||||
|
for CFG in $CFG_LIST; do
|
||||||
|
[[ "$CFG" == *"_initramfs"* ]] && continue # skip initramfs configs
|
||||||
|
build_config $CFG
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "All targets was builded!"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user