From 5a72e425f9c2d5ca049fd05cd280c4bff5f73d57 Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Tue, 13 Mar 2018 12:54:43 -0400 Subject: [PATCH] Clean up vpp build bootstrap step Net of rewriting vppapigen in python-ply, there's no need to compile vppinfra. Install a copy of vppapigen in .../build-root/tools/bin, so the sample plugin build will work. Rationalize suffix-rules.mk. Add clang, clang++ links to .../build-root/ccache-bin. Change-Id: Ib4017848b7767b6054238ea544ee5319667c3659 Signed-off-by: Dave Barach --- Makefile | 9 ++++++-- build-root/Makefile | 12 ++-------- build-root/bootstrap.sh | 26 ++++++++------------- build-root/packages/src.mk | 17 -------------- build-root/packages/tools.mk | 16 ------------- .../{packages/vppinfra.mk => scripts/set-rpath} | 27 +++++++++++++++++++++- src/examples/sample-plugin/Makefile.am | 7 +++--- src/suffix-rules.mk | 12 +++++----- 8 files changed, 55 insertions(+), 71 deletions(-) delete mode 100644 build-root/packages/src.mk delete mode 100644 build-root/packages/tools.mk rename build-root/{packages/vppinfra.mk => scripts/set-rpath} (57%) mode change 100644 => 100755 diff --git a/Makefile b/Makefile index b3eb9cc285a..8168b9434da 100644 --- a/Makefile +++ b/Makefile @@ -262,8 +262,13 @@ else @mkdir -p $(BR)/tools/ccache-bin @ln -s /usr/bin/ccache $(BR)/tools/ccache-bin/gcc @ln -s /usr/bin/ccache $(BR)/tools/ccache-bin/g++ + @ln -s /usr/bin/ccache $(BR)/tools/ccache-bin/clang + @ln -s /usr/bin/ccache $(BR)/tools/ccache-bin/clang++ + @mkdir -p $(BR)/tools/bin + @rm -f $(BR)/tools/bin/vppapigen + @ln -s $(WS_ROOT)/src/tools/vppapigen/vppapigen \ + $(BR)/tools/bin/vppapigen endif - @make -C $(BR) V=$(V) is_build_tool=yes tools-install @touch $@ bootstrap: $(BR)/.bootstrap.ok @@ -327,7 +332,7 @@ dist: @ln -rs $(DIST_FILE).xz $(BR)/vpp-latest.tar.xz build: $(BR)/.bootstrap.ok - $(call make,$(PLATFORM)_debug,$(addsuffix -install,$(TARGETS))) + $(call make,$(PLATFORM),$(addsuffix -install,$(TARGETS))) wipedist: @$(RM) $(BR)/*.tar.xz diff --git a/build-root/Makefile b/build-root/Makefile index 8154ecdaa7b..9190803c3ab 100644 --- a/build-root/Makefile +++ b/build-root/Makefile @@ -929,11 +929,7 @@ install-packages: $(patsubst %,%-find-source,$(ROOT_PACKAGES)) basic_system \ $(ROOT_PACKAGES)) || exit 1; \ $(call build_msg_fn, Relocating ELF executables to run in $${d}) ; \ - find $${d} -type f \ - -exec elftool quiet in '{}' out '{}' \ - set-interpreter \ - $${d}/$(arch_lib_dir)/$(DYNAMIC_LINKER) \ - set-rpath $${d}/$(arch_lib_dir):$${d}/lib ';' ; \ + scripts/set-rpath $${d} $${d}/$(arch_lib_dir) ; \ : strip symbols from files ; \ if [ $${strip_symbols:-no} = 'yes' ] ; then \ $(call build_msg_fn, Stripping symbols from files) ; \ @@ -968,11 +964,7 @@ $(PLATFORM_IMAGE_DIR)/ro.img ro-image: $(patsubst %,%-find-source,$(ROOT_PACKAGE : make dev directory ; \ $(linuxrc_makedev) ; \ echo @@@@ Relocating ELF executables to run in / @@@@ ; \ - find $${d} -type f \ - -exec elftool quiet in '{}' out '{}' \ - set-interpreter \ - /$(arch_lib_dir)/$(DYNAMIC_LINKER) \ - set-rpath /$(arch_lib_dir):/lib ';' ; \ + scripts/set-rpath /$(arch_lib_dir):/lib ; \ : strip symbols from files ; \ if [ '$${strip_symbols:-yes}' = 'yes' ] ; then \ echo @@@@ Stripping symbols from files @@@@ ; \ diff --git a/build-root/bootstrap.sh b/build-root/bootstrap.sh index 3f71cefe2e8..c3b355b4f8c 100755 --- a/build-root/bootstrap.sh +++ b/build-root/bootstrap.sh @@ -38,28 +38,22 @@ EOF # regenerate tools/ccache-bin rm -rf tools/ccache-bin -mkdir -p tools/ccache-bin +mkdir -p tools/ccache-bin tools/bin if [ ! -f /usr/bin/ccache ] ; then - echo Please install ccache AYEC and re-run this script + echo CCACHE is required. Please install it! + exit 1 fi cd tools/ccache-bin -for c in gcc g++ - do - if [ -f /usr/bin/ccache ] ; then - ln -s /usr/bin/ccache $c - else - ln -s /usr/bin/gcc - fi +for c in gcc g++ clang clang++ +do + ln -s /usr/bin/ccache $c done - -cd $wsroot +cd ../ +ln -s $wsroot/src/tools/vppapigen/vppapigen \ + $build_root/tools/bin/vppapigen cd $build_root -echo Compile native tools -for tool in tools -do - make V=0 is_build_tool=yes $tool-install -done +exit 0 diff --git a/build-root/packages/src.mk b/build-root/packages/src.mk deleted file mode 100644 index 4f7e823078f..00000000000 --- a/build-root/packages/src.mk +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2015 Cisco and/or its affiliates. -# 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. - -# nothing - - - diff --git a/build-root/packages/tools.mk b/build-root/packages/tools.mk deleted file mode 100644 index 7db04e62eb1..00000000000 --- a/build-root/packages/tools.mk +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2015 Cisco and/or its affiliates. -# 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. - -tools_source = src -tools_configure_args = --disable-vlib --disable-svm --disable-japi - diff --git a/build-root/packages/vppinfra.mk b/build-root/scripts/set-rpath old mode 100644 new mode 100755 similarity index 57% rename from build-root/packages/vppinfra.mk rename to build-root/scripts/set-rpath index 40d9c735dc9..f20ff3f6f40 --- a/build-root/packages/vppinfra.mk +++ b/build-root/scripts/set-rpath @@ -1,3 +1,5 @@ +#!/bin/bash + # Copyright (c) 2015 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,8 +13,31 @@ # See the License for the specific language governing permissions and # limitations under the License. +if [ -z $1 ]; then + echo "Please specify path" + exit 1 +fi + +which chrpath &> /dev/null + +if [ $? -ne 0 ] ; then + echo "Please install chrpath tool" + exit 1 +fi + +cd $1 -# nothing +libs=$(find * -type f -name \*.so\*) +execs=$(find * -type f -path bin/\* ) +echo "Setting RPATH to $2 ..." +for i in $libs $execs; do + # in case non-ELF file is found + chrpath $i 2> /dev/null > /dev/null + if [ $? -eq 0 ] ; then + echo $i + chrpath -r $2 + fi +done diff --git a/src/examples/sample-plugin/Makefile.am b/src/examples/sample-plugin/Makefile.am index 5c279c44b11..1825a8f111f 100644 --- a/src/examples/sample-plugin/Makefile.am +++ b/src/examples/sample-plugin/Makefile.am @@ -31,12 +31,13 @@ vpppluginsdir = ${libdir}/vpp_plugins include sample.am %.api.h: %.api - mkdir -p `dirname $@` ; \ + @echo " APIGEN " $@ ; \ + mkdir -p `dirname $@` ; \ vppapigen --input $^ --output $@ %.api.json: %.api - @echo " JSON APIGEN " $@ ; \ - mkdir -p `dirname $@` ; \ + @echo " JSON APIGEN " $@ ; \ + mkdir -p `dirname $@` ; \ vppapigen --input $^ JSON --output $@ apidir = $(prefix)/api/plugins diff --git a/src/suffix-rules.mk b/src/suffix-rules.mk index 8b1ab83b28b..1e701651822 100644 --- a/src/suffix-rules.mk +++ b/src/suffix-rules.mk @@ -14,13 +14,13 @@ # Shared suffix rules # Please do not set "SUFFIXES = .api.h .api" here -VPPAPIGEN = $(top_srcdir)/tools/vppapigen/vppapigen +VPPAPIGEN = vppapigen %.api.h: %.api - @echo " APIGEN " $@ ; \ - mkdir -p `dirname $@` ; \ + @echo " APIGEN " $@ ; \ + mkdir -p `dirname $@` ; \ $(VPPAPIGEN) --includedir $(top_srcdir) --input $< --output $@ -%.api.json: %.api - @echo " JSON API" $@ ; \ - mkdir -p `dirname $@` ; \ +%.api.json: %.api + @echo " JSON API" $@ ; \ + mkdir -p `dirname $@` ; \ $(VPPAPIGEN) --includedir $(top_srcdir) --input $< JSON --output $@ -- 2.16.6