devtools: add tags and cscope index generation
authorJerin Jacob <jerin.jacob@caviumnetworks.com>
Sat, 29 Apr 2017 10:51:18 +0000 (16:21 +0530)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 30 Apr 2017 10:57:04 +0000 (12:57 +0200)
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@caviumnetworks.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: Thomas Monjalon <thomas@monjalon.net>
.gitignore
devtools/build-tags.sh [new file with mode: 0755]
mk/rte.sdkroot.mk

index c733967..6df5ba0 100644 (file)
@@ -3,3 +3,12 @@ doc/guides/cryptodevs/overview_feature_table.txt
 doc/guides/cryptodevs/overview_cipher_table.txt
 doc/guides/cryptodevs/overview_auth_table.txt
 doc/guides/cryptodevs/overview_aead_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 (executable)
index 0000000..0db406d
--- /dev/null
@@ -0,0 +1,233 @@
+#!/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
+linux=true
+bsd=true
+x86_32=true
+x86_64=true
+ppc_64=true
+arm_32=true
+arm_64=true
+
+print_usage()
+{
+       echo "Usage: $(basename $0) [-h] [-v] tags|cscope|gtags|etags [config]"
+       echo "Valid configs are:"
+       make showconfigs | sed 's,^,\t,'
+}
+
+# Move to the root of the git tree
+cd $(dirname $0)/..
+
+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"
+}
+
+linux_sources()
+{
+       find_sources "lib/librte_eal/linuxapp" '*.[chS]'
+}
+
+bsd_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_32_sources()
+{
+       arm_common
+       find_sources "lib/librte_eal/common/include/arch/arm" '*.[chS]' \
+                                       "$skip_64b_files"
+}
+
+arm_64_sources()
+{
+       arm_common
+       find_sources "lib/librte_eal/common/include/arch/arm" '*.[chS]' \
+                                        "$skip_32b_files"
+       find_sources "$source_dirs" '*arm64.[chS]'
+}
+
+x86_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]'
+}
+
+x86_32_sources()
+{
+       x86_common
+       find_sources "lib/librte_eal/common/include/arch/x86" '*.[chS]' \
+                                       "$skip_64b_files"
+}
+
+x86_64_sources()
+{
+       x86_common
+       find_sources "lib/librte_eal/common/include/arch/x86" '*.[chS]' \
+                                       "$skip_32b_files"
+}
+
+ppc_64_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]'
+}
+
+check_valid_target()
+{
+       cfgfound=false
+       allconfigs=$(make showconfigs)
+       for cfg in $allconfigs ; do
+               if [ "$cfg" = "$1" ] ; then
+                       cfgfound=true
+               fi
+       done
+       if ! $cfgfound ; then
+               echo "Invalid config: $1"
+               print_usage
+               exit 0
+       fi
+}
+
+if [ -n "$2" ]; then
+       check_valid_target $2
+
+       echo $2 | grep -q "linuxapp-" || linux=false
+       echo $2 | grep -q "bsdapp-" || bsd=false
+       echo $2 | grep -q "x86_64-" || x86_64=false
+       echo $2 | grep -q "arm-" || arm_32=false
+       echo $2 | grep -q "arm64-" || arm_64=false
+       echo $2 | grep -q "ppc_64-" || ppc_64=false
+       echo $2 | grep -q -e "i686-" -e "x32-" || x86_32=false
+fi
+
+all_sources()
+{
+       common_sources
+       if $linux ; then linux_sources ; fi
+       if $bsd ; then bsd_sources ; fi
+       if $x86_64 ; then x86_64_sources ; fi
+       if $x86_32 ; then x86_32_sources ; fi
+       if $ppc_64 ; then ppc_64_sources ; fi
+       if $arm_32 ; then arm_32_sources ; fi
+       if $arm_64 ; then arm_64_sources ; fi
+}
+
+show_flags()
+{
+       if $verbose ; then
+               echo "mode:     $1"
+               echo "config:   $2"
+               echo "linux:    $linux"
+               echo "bsd:      $bsd"
+               echo "x86_32:   $x86_32"
+               echo "x86_64:   $x86_64"
+               echo "ppc_64:   $ppc_64"
+               echo "arm_32:   $arm_32"
+               echo "arm_64:   $arm_64"
+       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
index 685d2f5..2843b7d 100644 (file)
@@ -92,6 +92,10 @@ default: all
 config showconfigs showversion showversionum:
        $(Q)$(MAKE) -f $(RTE_SDK)/mk/rte.sdkconfig.mk $@
 
+.PHONY: cscope gtags tags etags
+cscope gtags tags etags:
+       $(Q)$(RTE_SDK)/devtools/build-tags.sh $@ $T
+
 .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 $@