[dpdk-dev] [PATCH v5] devtools: add tags and cscope index file generation support

Jerin Jacob jerin.jacob at caviumnetworks.com
Fri Apr 14 14:44:31 CEST 2017


-----Original Message-----
> Date: Wed, 22 Mar 2017 14:00:04 +0530
> From: Jerin Jacob <jerin.jacob at caviumnetworks.com>
> To: dev at dpdk.org
> Cc: thomas.monjalon at 6wind.com, Jerin Jacob <jerin.jacob at caviumnetworks.com>
> Subject: [dpdk-dev] [PATCH v5] devtools: add tags and cscope index file
>  generation support
> X-Mailer: git-send-email 2.5.5
> 
> This script generates cscope, gtags, and tags index files based on
> EAL environment(architecture and OS(linux/bsd)).
> 
> Selection of the architecture and OS environment is based on dpdk
> configuration target(T=).If EAL environment(T=) is not specified,
> the script generates tag files based on available source code.
> 
> Usage: make tags|cscope|gtags|etags [T=config]
> 
> example usage:
> make cscope
> make tags T=x86_64-native-linuxapp-gcc
> make gtags T=arm64-armv8a-linuxapp-gcc
> 
> Signed-off-by: Jerin Jacob <jerin.jacob at caviumnetworks.com>
> Reviewed-by: Yuanhan Liu <yuanhan.liu at linux.intel.com>
> Reviewed-by: Ferruh Yigit <ferruh.yigit at intel.com>

Ping.


> ---
> v5:
> - Added cscope,tags,gtags,etags makefile targets (Cristian)
> 
> v4:
> - Accommodate the latest "test" directory rework change in master
> 
> v3:
> - Added etags target for Emacs(John)
> - EAL environment(config) is optional now(Thomas)
> - Changed bash shebang to /bin/sh (Thomas)
> - getopts based -v and -h option (Thomas)
> - used $() instead of backquotes (Thomas)
> - Removed "make" based frontend to the script to make it inline with
> other devtools scripts in DPDK (Jerin)
> 
> v2:
> - Moved tag.sh to devtools from scripts
> - Rebased to master
> ---
>  .gitignore             |   9 ++
>  devtools/build-tags.sh | 271 +++++++++++++++++++++++++++++++++++++++++++++++++
>  mk/rte.sdkroot.mk      |   8 ++
>  3 files changed, 288 insertions(+)
>  create mode 100755 devtools/build-tags.sh
> 
> diff --git a/.gitignore b/.gitignore
> index a722abe..7eade38 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -1 +1,10 @@
>  doc/guides/nics/overview_table.txt
> +cscope.out.po
> +cscope.out.in
> +cscope.out
> +cscope.files
> +GTAGS
> +GPATH
> +GRTAGS
> +tags
> +TAGS
> diff --git a/devtools/build-tags.sh b/devtools/build-tags.sh
> new file mode 100755
> index 0000000..ca5317f
> --- /dev/null
> +++ b/devtools/build-tags.sh
> @@ -0,0 +1,271 @@
> +#!/bin/sh -e
> +# Generate tags or gtags or cscope or etags files
> +#
> +#   BSD LICENSE
> +#
> +#   Copyright 2017 Cavium Networks
> +#
> +#   Redistribution and use in source and binary forms, with or without
> +#   modification, are permitted provided that the following conditions
> +#   are met:
> +#
> +#     * Redistributions of source code must retain the above copyright
> +#       notice, this list of conditions and the following disclaimer.
> +#     * Redistributions in binary form must reproduce the above copyright
> +#       notice, this list of conditions and the following disclaimer in
> +#       the documentation and/or other materials provided with the
> +#       distribution.
> +#     * Neither the name of Cavium networks nor the names of its
> +#       contributors may be used to endorse or promote products derived
> +#       from this software without specific prior written permission.
> +#
> +#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> +#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> +#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> +#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> +#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> +#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> +#   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.
> +
> +verbose=false
> +linuxapp=false
> +bsdapp=false
> +x86_64=false
> +arm=false
> +arm64=false
> +ia_32=false
> +ppc_64=false
> +
> +print_usage()
> +{
> +	echo "Usage: $(basename $0) [-h] [-v] tags|cscope|gtags|etags [config]"
> +	echo "Valid configs are:"
> +	make showconfigs | sed 's,^,\t,'
> +}
> +
> +while getopts hv ARG ; do
> +	case $ARG in
> +		v ) verbose=true ;;
> +		h ) print_usage; exit 0 ;;
> +		? ) print_usage; exit 1 ;;
> +	esac
> +done
> +shift $(($OPTIND - 1))
> +
> +#ignore version control files
> +ignore="( -name .svn -o -name CVS -o -name .hg -o -name .git ) -prune -o"
> +
> +source_dirs="test app buildtools drivers examples lib"
> +
> +skip_bsd="( -name bsdapp ) -prune -o"
> +skip_linux="( -name linuxapp ) -prune -o"
> +skip_arch="( -name arch ) -prune -o"
> +skip_sse="( -name *_sse*.[chS] ) -prune -o"
> +skip_avx="( -name *_avx*.[chS] ) -prune -o"
> +skip_neon="( -name *_neon*.[chS] ) -prune -o"
> +skip_altivec="( -name *_altivec*.[chS] ) -prune -o"
> +skip_arm64="( -name *arm64*.[chS] ) -prune -o"
> +skip_x86="( -name *x86*.[chS] ) -prune -o"
> +skip_32b_files="( -name *_32.h ) -prune -o"
> +skip_64b_files="( -name *_64.h ) -prune -o"
> +
> +skiplist="$skip_bsd $skip_linux $skip_arch $skip_sse $skip_avx \
> +		 $skip_neon $skip_altivec $skip_x86 $skip_arm64"
> +
> +find_sources()
> +{
> +	find $1 $ignore $3 -name $2 -not -type l -print
> +}
> +
> +common_sources()
> +{
> +	find_sources "$source_dirs" '*.[chS]' "$skiplist"
> +}
> +
> +linuxapp_sources()
> +{
> +	find_sources "lib/librte_eal/linuxapp" '*.[chS]'
> +}
> +
> +bsdapp_sources()
> +{
> +	find_sources "lib/librte_eal/bsdapp" '*.[chS]'
> +}
> +
> +arm_common()
> +{
> +	find_sources "lib/librte_eal/common/arch/arm" '*.[chS]'
> +	find_sources "$source_dirs" '*neon*.[chS]'
> +}
> +
> +arm_sources()
> +{
> +	arm_common
> +	find_sources "lib/librte_eal/common/include/arch/arm" '*.[chS]' \
> +					"$skip_64b_files"
> +}
> +
> +arm64_sources()
> +{
> +	arm_common
> +	find_sources "lib/librte_eal/common/include/arch/arm" '*.[chS]' \
> +					 "$skip_32b_files"
> +	find_sources "$source_dirs" '*arm64.[chS]'
> +}
> +
> +ia_common()
> +{
> +	find_sources "lib/librte_eal/common/arch/x86" '*.[chS]'
> +
> +	find_sources "examples/performance-thread/common/arch/x86" '*.[chS]'
> +	find_sources "$source_dirs" '*_sse*.[chS]'
> +	find_sources "$source_dirs" '*_avx*.[chS]'
> +	find_sources "$source_dirs" '*x86.[chS]'
> +}
> +
> +i686_sources()
> +{
> +	ia_common
> +	find_sources "lib/librte_eal/common/include/arch/x86" '*.[chS]' \
> +					"$skip_64b_files"
> +}
> +
> +x86_64_sources()
> +{
> +	ia_common
> +	find_sources "lib/librte_eal/common/include/arch/x86" '*.[chS]' \
> +					"$skip_32b_files"
> +}
> +
> +ppc64_sources()
> +{
> +	find_sources "lib/librte_eal/common/arch/ppc_64" '*.[chS]'
> +	find_sources "lib/librte_eal/common/include/arch/ppc_64" '*.[chS]'
> +	find_sources "$source_dirs" '*altivec*.[chS]'
> +}
> +
> +config_file()
> +{
> +	if [ -f $RTE_SDK/$RTE_TARGET/include/rte_config.h ]; then
> +		ls $RTE_SDK/$RTE_TARGET/include/rte_config.h
> +	fi
> +}
> +
> +check_valid_config()
> +{
> +	cfgfound=false
> +	allconfigs=$(make showconfigs)
> +	for cfg in $allconfigs
> +	do
> +		if [ "$cfg" = "$1" ] ; then
> +			cfgfound=true
> +		fi
> +	done
> +	$cfgfound || echo "Invalid config: $1"
> +	$cfgfound || print_usage
> +	$cfgfound || exit 0
> +}
> +
> +if [ -n "$2" ]; then
> +	check_valid_config $2
> +
> +	if [ $(echo $2 | grep -c "linuxapp-") -gt 0 ]; then
> +		linuxapp=true
> +	fi
> +
> +	if [ $(echo $2 | grep -c "bsdapp-") -gt 0 ]; then
> +		bsdapp=true
> +	fi
> +
> +	if [ $(echo $2 | grep -c "x86_64-") -gt 0  ]; then
> +		x86_64=true
> +	fi
> +
> +	if [ $(echo $2 | grep -c "i686-") -gt 0 ]; then
> +		ia_32=true
> +	fi
> +
> +	if [ $(echo $2 | grep -c "x32-") -gt 0 ]; then
> +		ia_32=true
> +	fi
> +
> +	if [ $(echo $2 | grep -c "arm-") -gt 0 ]; then
> +		arm=true
> +	fi
> +
> +	if [ $(echo $2 | grep -c "arm64-") -gt 0 ]; then
> +		arm64=true
> +	fi
> +
> +	if [ $(echo $2 | grep -c "ppc_64-") -gt 0 ]; then
> +		ppc_64=true
> +	fi
> +
> +else
> +	linuxapp=true
> +	bsdapp=true
> +	x86_64=true
> +	arm=true
> +	arm64=true
> +	ia_32=true
> +	ppc_64=true
> +fi
> +
> +all_sources()
> +{
> +	common_sources
> +	$linuxapp && linuxapp_sources
> +	$bsdapp && bsdapp_sources
> +	$x86_64 && x86_64_sources
> +	$ia_32 && i686_sources
> +	$arm && arm_sources
> +	$arm64 && arm64_sources
> +	$ppc_64 && ppc64_sources
> +	config_file
> +}
> +
> +show_flags()
> +{
> +	$verbose && echo "mode:     $1"
> +	$verbose && echo "config:   $2"
> +	$verbose && echo "linuxapp: $linuxapp"
> +	$verbose && echo "bsdapp:   $bsdapp"
> +	$verbose && echo "ia_32:    $ia_32"
> +	$verbose && echo "x86_64:   $x86_64"
> +	$verbose && echo "arm:      $arm"
> +	$verbose && echo "arm64:    $arm64"
> +	$verbose && echo "ppc_64:   $ppc_64"
> +	if [ -f $RTE_SDK/$RTE_TARGET/include/rte_config.h ]; then
> +		$verbose && echo "target:   $RTE_SDK/$RTE_TARGET"
> +	fi
> +}
> +
> +case "$1" in
> +	"cscope")
> +		show_flags $1 $2
> +		all_sources > cscope.files
> +		cscope -q -b -f cscope.out
> +		;;
> +	"gtags")
> +		show_flags $1 $2
> +		all_sources | gtags -i -f -
> +		;;
> +	"tags")
> +		show_flags $1 $2
> +		rm -f tags
> +		all_sources | xargs ctags -a
> +		;;
> +	"etags")
> +		show_flags $1 $2
> +		rm -f TAGS
> +		all_sources | xargs etags -a
> +		;;
> +	*)
> +		echo "Invalid mode: $1"
> +		print_usage
> +		;;
> +esac
> diff --git a/mk/rte.sdkroot.mk b/mk/rte.sdkroot.mk
> index 7598bde..6f9bfc5 100644
> --- a/mk/rte.sdkroot.mk
> +++ b/mk/rte.sdkroot.mk
> @@ -92,6 +92,14 @@ default: all
>  config showconfigs showversion showversionum:
>  	$(Q)$(MAKE) -f $(RTE_SDK)/mk/rte.sdkconfig.mk $@
>  
> +.PHONY: cscope gtags tags etags
> +cscope gtags tags etags:
> +ifdef T
> +	$(Q)$(RTE_SDK)/devtools/build-tags.sh $@ ${T}
> +else
> +	$(Q)$(RTE_SDK)/devtools/build-tags.sh $@
> +endif
> +
>  .PHONY: test test-basic test-fast test-ring test-mempool test-perf coverage
>  test test-basic test-fast test-ring test-mempool test-perf coverage:
>  	$(Q)$(MAKE) -f $(RTE_SDK)/mk/rte.sdktest.mk $@
> -- 
> 2.5.5
> 


More information about the dev mailing list