You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

214 lines
5.6 KiB

# Copyright 2018 Sen Han <00hnes@gmail.com>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http:#www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
OUTPUT_DIR="./output"
CFLAGS="-g -O2 -Wall -Werror"
#EXTRA_CFLAGS=""
OUTPUT_SUFFIX=""
makecc="cc"
if [ "$CC" ]
then
makecc="$CC"
fi
app_list='''
test_aco_tutorial_0
test_aco_tutorial_1
test_aco_tutorial_2
test_aco_tutorial_3 -lpthread
test_aco_tutorial_4
test_aco_tutorial_5
test_aco_tutorial_6
test_aco_synopsis
test_aco_benchmark
'''
gl_opt_no_m32=""
gl_opt_no_valgrind=""
OUTPUT_DIR="$OUTPUT_DIR""//file"
OUTPUT_DIR=`dirname "$OUTPUT_DIR"`
gl_trap_str=""
function error(){
>&2 echo "error: $*"
}
function assert(){
if [ "0" -ne "$?" ]
then
error "$0:""$*"
exit 1
fi
}
function tra(){
gl_trap_str="$gl_trap_str""$1"
trap "$gl_trap_str exit 1;" INT
assert "$LINENO:trap failed:$gl_trap_str:$1"
}
function untra(){
trap - INT
assert "$LINENO:untrap failed:$gl_trap_str:$1"
}
function build_f(){
declare file
declare cflags
declare build_cmd
declare tmp_ret
declare skip_flag
echo "OUTPUT_DIR: $OUTPUT_DIR"
echo "CFLAGS: $CFLAGS"
echo "EXTRA_CFLAGS: $EXTRA_CFLAGS"
echo "ACO_EXTRA_CFLAGS: $ACO_EXTRA_CFLAGS"
echo "OUTPUT_SUFFIX: $OUTPUT_SUFFIX"
echo "$app_list" | grep -Po '.+$' | while read read_in
do
file=`echo $read_in | grep -Po "^[^\s]+"`
cflags=`echo $read_in | sed -r 's/^\s*([^ ]+)(.*)$/\2/'`
if [ -z "$file" ]
then
continue
fi
#echo "<$file>:<$cflags>:$OUTPUT_DIR:$CFLAGS:$EXTRA_CFLAGS:$OUTPUT_SUFFIX"
build_cmd="$makecc $CFLAGS $ACO_EXTRA_CFLAGS $EXTRA_CFLAGS acosw.S aco.c $file.c $cflags -o $OUTPUT_DIR/$file$OUTPUT_SUFFIX"
skip_flag=""
if [ "$gl_opt_no_m32" ]
then
echo "$OUTPUT_SUFFIX" | grep -P "\bm32\b" &>/dev/null
tmp_ret=$?
if [ "$tmp_ret" -eq "0" ]
then
skip_flag="true"
elif [ "$tmp_ret" -eq "1" ]
then
:
else
error "grep failed: $tmp_ret"
exit $tmp_ret
fi
fi
if [ "$gl_opt_no_valgrind" ]
then
echo "$OUTPUT_SUFFIX" | grep -P "\bvalgrind\b" &>/dev/null
tmp_ret=$?
if [ "$tmp_ret" -eq "0" ]
then
skip_flag="true"
elif [ "$tmp_ret" -eq "1" ]
then
:
else
error "grep failed: $tmp_ret"
exit $tmp_ret
fi
fi
if [ "$skip_flag" ]
then
echo "skip $build_cmd"
else
echo " $build_cmd"
$build_cmd
assert "build fail"
fi
done
assert "exit"
}
function usage() {
echo "Usage: $0 [-o <no-m32|no-valgrind>] [-h]" 1>&2
echo '''
Example:
# default build
bash make.sh
# build without the i386 binary output
bash make.sh -o no-m32
# build without the valgrind supported binary output
bash make.sh -o no-valgrind
# build without the valgrind supported and i386 binary output
bash make.sh -o no-valgrind -o no-m32
''' 1>&2
}
gl_opt_value=""
while getopts ":o:h" o; do
case "${o}" in
o)
gl_opt_value=${OPTARG}
if [ "$gl_opt_value" = "no-m32" ]
then
gl_opt_no_m32="true"
elif [ "$gl_opt_value" = "no-valgrind" ]
then
gl_opt_no_valgrind="true"
else
usage
error unknow option value of '-o'
exit 1
fi
;;
h)
usage
exit 0
;;
*)
usage
error unknow option
exit 1
;;
esac
done
shift $((OPTIND-1))
#echo "o = $gl_opt_value"
#echo "gl_opt_no_valgrind:$gl_opt_no_valgrind"
#echo "gl_opt_no_m32:$gl_opt_no_m32"
if [ -e "$OUTPUT_DIR" ]
then
if [ -d "$OUTPUT_DIR" ]
then
:
else
error "\"$OUTPUT_DIR\" is not a directory"
exit 1
fi
else
error "directory \"$OUTPUT_DIR\" doesn't exist"
exit 1
fi
tra "echo;echo build has been interrupted"
# the matrix of the build config for later testing
# -m32 -DACO_CONFIG_SHARE_FPU_MXCSR_ENV -DACO_USE_VALGRIND
# 0 0 0
ACO_EXTRA_CFLAGS="" OUTPUT_SUFFIX="..no_valgrind.standaloneFPUenv" build_f
# 0 0 1
ACO_EXTRA_CFLAGS="-DACO_USE_VALGRIND" OUTPUT_SUFFIX="..valgrind.standaloneFPUenv" build_f
# 0 1 0
ACO_EXTRA_CFLAGS="-DACO_CONFIG_SHARE_FPU_MXCSR_ENV" OUTPUT_SUFFIX="..no_valgrind.shareFPUenv" build_f
# 0 1 1
ACO_EXTRA_CFLAGS="-DACO_CONFIG_SHARE_FPU_MXCSR_ENV -DACO_USE_VALGRIND" OUTPUT_SUFFIX="..valgrind.shareFPUenv" build_f
# 1 0 0
ACO_EXTRA_CFLAGS="-m32" OUTPUT_SUFFIX="..m32.no_valgrind.standaloneFPUenv" build_f
# 1 0 1
ACO_EXTRA_CFLAGS="-m32 -DACO_USE_VALGRIND" OUTPUT_SUFFIX="..m32.valgrind.standaloneFPUenv" build_f
# 1 1 0
ACO_EXTRA_CFLAGS="-m32 -DACO_CONFIG_SHARE_FPU_MXCSR_ENV" OUTPUT_SUFFIX="..m32.no_valgrind.shareFPUenv" build_f
# 1 1 1
ACO_EXTRA_CFLAGS="-m32 -DACO_CONFIG_SHARE_FPU_MXCSR_ENV -DACO_USE_VALGRIND" OUTPUT_SUFFIX="..m32.valgrind.shareFPUenv" build_f