mirror of
https://github.com/vczh-libraries/Release.git
synced 2026-05-12 01:46:38 +08:00
Refresh GitHub Ubuntu CI files
This commit is contained in:
Executable
+28
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
function Usage {
|
||||
echo "Usage: build.sh [-f]"
|
||||
}
|
||||
|
||||
if [ $# -gt 1 ]; then
|
||||
Usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $# -eq 1 ] && [ "$1" != "-f" ]; then
|
||||
Usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export VCPROOT="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||
export PATH="${VCPROOT}/vl/cmd:${PATH}"
|
||||
export SHELL=/bin/bash
|
||||
|
||||
vmake --make
|
||||
|
||||
if [ "$1" == "-f" ]; then
|
||||
vbuild -f
|
||||
else
|
||||
vbuild -b
|
||||
fi
|
||||
Executable
+158
@@ -0,0 +1,158 @@
|
||||
#!/bin/bash
|
||||
|
||||
function Help {
|
||||
echo "Usage:"
|
||||
echo "--clean"
|
||||
echo " Clean generated files."
|
||||
echo "-b, --build"
|
||||
echo " Incrementally build the current folder."
|
||||
echo "-f, --full-build, -f"
|
||||
echo " Rebuild the current folder."
|
||||
echo "-c, --build-coverage"
|
||||
echo " Rebuild the current folder with coverage."
|
||||
echo "-fc, --full-build-coverage"
|
||||
echo " Rebuild the current folder with coverage."
|
||||
echo "--build-gcc"
|
||||
echo " Incrementally build the current folder using G++."
|
||||
echo "--full-build-gcc"
|
||||
echo " Rebuild the current folder using G++."
|
||||
echo "-g, --generate"
|
||||
echo " Generate coverage data."
|
||||
echo "-r, --read"
|
||||
echo " Read coverage data."
|
||||
}
|
||||
|
||||
function Check {
|
||||
if ! [ -a vmake ]; then
|
||||
echo "Cannot find ./vmake ."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function Clean {
|
||||
Check
|
||||
make clean
|
||||
}
|
||||
|
||||
function Build {
|
||||
Check
|
||||
make
|
||||
}
|
||||
|
||||
function FullBuild {
|
||||
Check
|
||||
make clean
|
||||
make
|
||||
}
|
||||
|
||||
function BuildCoverage {
|
||||
Check
|
||||
make COVERAGE=YES
|
||||
}
|
||||
|
||||
function FullBuildCoverage {
|
||||
Check
|
||||
make clean
|
||||
make COVERAGE=YES
|
||||
}
|
||||
|
||||
function BuildGCC {
|
||||
Check
|
||||
make USE_GCC=YES
|
||||
}
|
||||
|
||||
function FullBuildGCC {
|
||||
Check
|
||||
make clean
|
||||
make USE_GCC=YES
|
||||
}
|
||||
|
||||
function Generate {
|
||||
Check
|
||||
lcov --directory ./Obj/ --base-directory . --gcov-tool ${VCPROOT}/vl/llvm-gcov.sh --capture -o ./Coverage/cov.info
|
||||
genhtml ./Coverage/cov.info -o ./Coverage/HTML/
|
||||
}
|
||||
|
||||
function Read {
|
||||
Check
|
||||
firefox `pwd`/Coverage/HTML/index.html
|
||||
#sensible-browser ./Coverage/HTML/index.html
|
||||
}
|
||||
|
||||
case $1 in
|
||||
--help)
|
||||
Help
|
||||
;;
|
||||
|
||||
--clean)
|
||||
Clean
|
||||
;;
|
||||
|
||||
-b|--build)
|
||||
Build
|
||||
;;
|
||||
|
||||
-f|--full-build)
|
||||
FullBuild
|
||||
;;
|
||||
|
||||
-c|--build-coverage)
|
||||
BuildCoverage
|
||||
;;
|
||||
|
||||
-fc|--full-build-coverage)
|
||||
FullBuildCoverage
|
||||
;;
|
||||
|
||||
--build-gcc)
|
||||
BuildGCC
|
||||
;;
|
||||
|
||||
--full-build-gcc)
|
||||
FullBuildGCC
|
||||
;;
|
||||
|
||||
-g|--generate)
|
||||
Generate
|
||||
;;
|
||||
|
||||
-r|--read)
|
||||
Read
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Use --help for more information."
|
||||
;;
|
||||
esac
|
||||
|
||||
# original makefile-cpp with gcc code coverage
|
||||
|
||||
#COVERAGE?=NO
|
||||
#
|
||||
#ifeq ($(COVERAGE),NO)
|
||||
#CPP_LINK=clang++ -std=c++20 -pthread -g $(CPP_COMPILE_OPTIONS) -o $@ $^
|
||||
#else
|
||||
#CPP_LINK=g++ -std=c++20 -g -fprofile-arcs -pthread $(CPP_LINK_OPTIONS) -o $@ $^
|
||||
#endif
|
||||
#
|
||||
#ifeq ($(COVERAGE),NO)
|
||||
#CPP_COMPILE=clang++ -std=c++20 -g $(CPP_COMPILE_OPTIONS) -o $@ -c $<
|
||||
#else
|
||||
#CPP_COMPILE=g++ -std=c++20 -g -fprofile-arcs -ftest-coverage $(CPP_COMPILE_OPTIONS) -o $@ -c $<
|
||||
#endif
|
||||
|
||||
#function Generate {
|
||||
# Check
|
||||
# PATTERN='^(.+)?\.o:\s*((.+)?.cpp).*$'
|
||||
# CPP_FILES=`cat makefile \
|
||||
# | grep -E ${PATTERN} \
|
||||
# | sed -r -e 's%'${PATTERN}'%../\2%g'
|
||||
# `
|
||||
# rm -rf ./Coverage/*
|
||||
# gcov -o ./Obj/ ${CPP_FILES} > /dev/null
|
||||
# mv -f *.gcov ./Coverage/
|
||||
# pushd ./Coverage > /dev/null
|
||||
# lcov --directory ../Obj/ --capture --output-file lcov.info
|
||||
# genhtml -o HTML lcov.info > /dev/null
|
||||
# popd > /dev/null
|
||||
#}
|
||||
Executable
+30
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
|
||||
function Help {
|
||||
echo "Usage:"
|
||||
echo "--make"
|
||||
echo " Update ./makefile and ./vmake.txt from ./vmake."
|
||||
}
|
||||
|
||||
function Make {
|
||||
if [ -a vmake ]; then
|
||||
vt4 --preprocess ./vmake | vt4 --evaluate | ${SHELL} > makefile
|
||||
else
|
||||
echo "Cannot find ./vmake ."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
case $1 in
|
||||
--help)
|
||||
Help
|
||||
;;
|
||||
|
||||
--make)
|
||||
Make
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Use --help for more information."
|
||||
;;
|
||||
esac
|
||||
Executable
+123
@@ -0,0 +1,123 @@
|
||||
#!/bin/bash
|
||||
|
||||
function Help {
|
||||
echo "Usage:"
|
||||
echo "--preprocess <t4-template-file>"
|
||||
echo " Preprocess the template file and print to standard output."
|
||||
echo "--evaluate <t4-template-file>"
|
||||
echo " Evaluate the preprocessed template file and print to standard output."
|
||||
}
|
||||
|
||||
function Error {
|
||||
(>&2 echo "Error(Row:${ROW_NUMBER}, Col:${COLUMN_NUMBER}): $1")
|
||||
(>&2 echo " In: ${LINE}")
|
||||
exit 1
|
||||
}
|
||||
|
||||
function Preprocess {
|
||||
PATTERN='^\s*<#@\s*include\s*"([^"]*)"\s*#>\s*$'
|
||||
cat $1 | while read -r LINE; do
|
||||
INCLUDE_STAT=`echo "${LINE}" | grep -E ${PATTERN}`
|
||||
if [[ "$INCLUDE_STAT" == "" ]]; then
|
||||
echo "${LINE}"
|
||||
else
|
||||
INCLUDE_FILE=`echo "${LINE}" | sed -r -e 's%'${PATTERN}'%\1%g'`
|
||||
INCLUDE_DIR=`dirname ${INCLUDE_FILE}`
|
||||
INCLUDE_NAME=`basename ${INCLUDE_FILE}`
|
||||
|
||||
eval INCLUDE_DIR=$INCLUDE_DIR
|
||||
pushd ${INCLUDE_DIR} > /dev/null
|
||||
vt4 --preprocess "${INCLUDE_NAME}"
|
||||
popd > /dev/null
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function Evaluate {
|
||||
STATE_TEXT=1
|
||||
STATE_CODE=2
|
||||
STATE_EXPR=3
|
||||
|
||||
STATE=$STATE_TEXT
|
||||
ROW_NUMBER=1
|
||||
|
||||
echo "#!/bin/bash"
|
||||
echo ""
|
||||
|
||||
cat $1 | while read -r LINE; do
|
||||
COLUMN_NUMBER=0
|
||||
|
||||
PARTS=`echo $LINE | sed -r -e 's%(<#=\s*|<#\s*|\s*#>)%\n\1\n%g'`
|
||||
PARTS=`echo "$PARTS" | sed -r -e 's%^<#=\s*$%<#=%g;s%^<#\s*$%<#%g;s%^\s*#>$%#>%g'`
|
||||
PURE_COMMAND=1
|
||||
|
||||
while read -r PART; do
|
||||
case "$PART" in
|
||||
"")
|
||||
;;
|
||||
|
||||
"<#")
|
||||
if [ $STATE == $STATE_TEXT ]; then
|
||||
STATE=$STATE_CODE
|
||||
else
|
||||
Error "\"<#\" and \"<#=\" cannot be embedded in each other."
|
||||
fi
|
||||
;;
|
||||
|
||||
"<#=")
|
||||
if [ $STATE == $STATE_TEXT ]; then
|
||||
STATE=$STATE_EXPR
|
||||
else
|
||||
Error "\"<#\" and \"<#=\" cannot be embedded in each other."
|
||||
fi
|
||||
;;
|
||||
|
||||
"#>")
|
||||
if [ $STATE == $STATE_TEXT ]; then
|
||||
Error "Wrong place for \"#>\"."
|
||||
else
|
||||
STATE=$STATE_TEXT
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
if [ $STATE == $STATE_CODE ]; then
|
||||
echo "${PART}"
|
||||
elif [ $STATE == $STATE_EXPR ]; then
|
||||
PURE_COMMAND=0
|
||||
echo "echo -n ${PART}"
|
||||
else
|
||||
PURE_COMMAND=0
|
||||
echo "echo -n '${PART}'"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
COLUMN_NUMBER=`echo "$(($COLUMN_NUMBER+${#PARTS}))"`
|
||||
done <<< "${PARTS}"
|
||||
|
||||
if ( [ "$LINE" == "" ] && [ $STATE == $STATE_TEXT ] ) || [ $PURE_COMMAND == 0 ]; then
|
||||
echo 'echo ""'
|
||||
fi
|
||||
ROW_NUMBER=`echo "$(($ROW_NUMBER+1))"`
|
||||
done
|
||||
}
|
||||
|
||||
IFS=
|
||||
case $1 in
|
||||
--help)
|
||||
Help
|
||||
;;
|
||||
|
||||
--preprocess)
|
||||
Preprocess $2
|
||||
;;
|
||||
|
||||
--evaluate)
|
||||
Evaluate $2
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Use --help for more information."
|
||||
;;
|
||||
esac
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo `clang++ --std=c++20 $1 -MM $2` | sed -r -e 's%[\]\s*%%g'
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
# read the input *.vcxproj
|
||||
if [ "$1" == "" ]; then
|
||||
exit 0
|
||||
fi
|
||||
CONTENT=`cat $1`
|
||||
|
||||
# extract all cpp files
|
||||
PATTERN='<ClCompile\s+Include="(\$\(MSBuildThisFileDirectory\))?([^"]+.cpp)"\s*/?\s*>'
|
||||
COMPILES=`echo "${CONTENT}" | grep -E ${PATTERN}`
|
||||
CPPS=`echo "${COMPILES}" | sed -r -e 's%\s*'${PATTERN}'\s*%\2%g'`
|
||||
|
||||
# refine file names
|
||||
CPPS=`echo "${CPPS}" | sed -e 's%[\]%/%g'`
|
||||
CPPS=`echo "${CPPS}" | sed -e 's%^%'${PWD}/$(dirname $1)/'%g'`
|
||||
echo "${CPPS}" | while read -r CPP; do
|
||||
realpath --relative-to="${PWD}" ${CPP}
|
||||
done
|
||||
@@ -0,0 +1,20 @@
|
||||
COVERAGE?=NO
|
||||
USE_GCC?=NO
|
||||
|
||||
# add "--stdlib=libc++" after bug #808086 is fixed
|
||||
|
||||
ifeq ($(USE_GCC), YES)
|
||||
CPP_LINK=g++ -std=c++20 -g -pthread $(CPP_LINK_OPTIONS) -o $@ $^
|
||||
else ifeq ($(COVERAGE),NO)
|
||||
CPP_LINK=clang++ -std=c++20 -pthread -g $(CPP_COMPILE_OPTIONS) -o $@ $^
|
||||
else
|
||||
CPP_LINK=clang++ -std=c++20 -pthread -g --coverage $(CPP_LINK_OPTIONS) -o $@ $^
|
||||
endif
|
||||
|
||||
ifeq ($(USE_GCC), YES)
|
||||
CPP_COMPILE=g++ -std=c++20 -g $(CPP_COMPILE_OPTIONS) -o $@ -c $<
|
||||
else ifeq ($(COVERAGE),NO)
|
||||
CPP_COMPILE=clang++ -std=c++20 -g $(CPP_COMPILE_OPTIONS) -o $@ -c $<
|
||||
else
|
||||
CPP_COMPILE=clang++ -std=c++20 -g -fprofile-arcs -ftest-coverage $(CPP_COMPILE_OPTIONS) -o $@ -c $<
|
||||
endif
|
||||
@@ -0,0 +1,75 @@
|
||||
<#
|
||||
if ! [ "$CPP_VCXPROJ" == "" ]; then
|
||||
CPP_FILES=($(vutil_CppFromVcxproj $CPP_VCXPROJ))
|
||||
fi
|
||||
|
||||
for CPP_VCXPROJ_ITEM in "${CPP_VCXPROJS[@]}"; do
|
||||
CPP_FILES_FROM_VCXPROJ=($(vutil_CppFromVcxproj $CPP_VCXPROJ_ITEM))
|
||||
CPP_FILES=(${CPP_FILES[@]} ${CPP_FILES_FROM_VCXPROJ[@]})
|
||||
done
|
||||
|
||||
# Remove duplicated items (preserve the first occurrence, like LINQ Distinct)
|
||||
declare -A __vutil_seen_cpp_files
|
||||
__vutil_distinct_cpp_files=()
|
||||
for __vutil_cpp_file in "${CPP_FILES[@]}"; do
|
||||
if [ "${__vutil_seen_cpp_files["${__vutil_cpp_file}"]+x}" == "" ]; then
|
||||
__vutil_seen_cpp_files["${__vutil_cpp_file}"]=1
|
||||
__vutil_distinct_cpp_files+=("${__vutil_cpp_file}")
|
||||
fi
|
||||
done
|
||||
CPP_FILES=("${__vutil_distinct_cpp_files[@]}")
|
||||
unset __vutil_seen_cpp_files __vutil_distinct_cpp_files __vutil_cpp_file
|
||||
|
||||
for CPP_REMOVE in "${CPP_REMOVES[@]}"; do
|
||||
CPP_FILES=(${CPP_FILES[@]/$CPP_REMOVE})
|
||||
done
|
||||
|
||||
for CPP_ADD in "${CPP_ADDS[@]}"; do
|
||||
CPP_FILES=(${CPP_FILES[@]} $CPP_ADD)
|
||||
done
|
||||
|
||||
CPP_FILE_LIST=("${CPP_FILES[@]}")
|
||||
printf -v CPP_FILES "%s\n" "${CPP_FILE_LIST[@]}"
|
||||
CPP_FILES=${CPP_FILES%?}
|
||||
|
||||
O_FILES=`echo "${CPP_FILES}" | sed -r -e 's%([^/]*/)*([^/]+).cpp%./Obj/\2.o%g'`
|
||||
O_FILES=`echo ${O_FILES}`
|
||||
|
||||
printf "%s\n" "${CPP_FILE_LIST[@]}" > vmake.txt
|
||||
#>
|
||||
.PHONY: all clean pre-build
|
||||
.DEFAULT_GOAL := all
|
||||
|
||||
<#if ! [ "$CPP_COMPILE_OPTIONS" == "" ]; then#>
|
||||
CPP_COMPILE_OPTIONS=<#= $CPP_COMPILE_OPTIONS #>
|
||||
<#fi#>
|
||||
<#if ! [ "$CPP_LINK_OPTIONS" == "" ]; then#>
|
||||
CPP_LINK_OPTIONS = <#= $CPP_LINK_OPTIONS #>
|
||||
<#fi#>
|
||||
include $(VCPROOT)/vl/makefile-cpp
|
||||
|
||||
pre-build:
|
||||
if ! [ -d ./Bin ]; then mkdir ./Bin; fi
|
||||
if ! [ -d ./Obj ]; then mkdir ./Obj; fi
|
||||
if ! [ -d ./Coverage ]; then mkdir ./Coverage; fi
|
||||
<#for FOLDER in "${FOLDERS[@]}"; do#>
|
||||
if ! [ -d <#= $FOLDER #> ]; then mkdir <#= $FOLDER #>; fi
|
||||
<#done#>
|
||||
|
||||
clean:
|
||||
if [ -d ./Bin ]; then rm -r ./Bin; fi
|
||||
if [ -d ./Obj ]; then rm -r ./Obj; fi
|
||||
if [ -d ./Coverage ]; then rm -r ./Coverage; fi
|
||||
<#for FOLDER in "${FOLDERS[@]}"; do#>
|
||||
if [ -d ./<#= $FOLDER #> ]; then rm -r <#= $FOLDER #>; fi
|
||||
<#done#>
|
||||
|
||||
all:pre-build <#= ${TARGETS[@]} #>
|
||||
|
||||
<#= $CPP_TARGET #>:<#= ${O_FILES} #>
|
||||
$(CPP_LINK)
|
||||
<#echo "${CPP_FILES}" | while read -r CPP_FILE; do#>
|
||||
|
||||
./Obj/<#= `vutil_CppDependencies "${CPP_COMPILE_OPTIONS}" ${CPP_FILE}` #>
|
||||
$(CPP_COMPILE)
|
||||
<#done#>
|
||||
Reference in New Issue
Block a user