[dpdk-dev] rte.extvars.mk: allow overriding RTE_SDK_BIN from the environment

Message ID 1453267824-2880-1-git-send-email-mhall@mhcomputing.net (mailing list archive)
State Rejected, archived
Delegated to: Thomas Monjalon
Headers

Commit Message

Matthew Hall Jan. 20, 2016, 5:30 a.m. UTC
  Currently pktgen-dpdk and many other external apps will fail to compile
if the build output directory name is not equal to the target name.

This causes problems if you used an alternative build output directory.

Signed-off-by: Matthew Hall <mhall@mhcomputing.net>
---
 mk/internal/rte.extvars.mk | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Thomas Monjalon Jan. 20, 2016, 3:27 p.m. UTC | #1
Hi Matthew,

RTE_SDK_BIN is an internal variable and should not be overriden.

2016-01-19 21:30, Matthew Hall:
> Currently pktgen-dpdk and many other external apps will fail to compile
> if the build output directory name is not equal to the target name.
> 
> This causes problems if you used an alternative build output directory.

Have you installed DPDK somewhere? Example:
	make install O=mybuild DESTDIR=mylocalinstall

Then you should build your app like this:
	make RTE_SDK=$(readlink -e ../dpdk/mylocalinstall/usr/local/share/dpdk)
  
Matthew Hall Jan. 21, 2016, 5:15 a.m. UTC | #2
On 1/20/16 7:27 AM, Thomas Monjalon wrote:
> Hi Matthew,
>
> RTE_SDK_BIN is an internal variable and should not be overriden.
 >
> Have you installed DPDK somewhere? Example:
> 	make install O=mybuild DESTDIR=mylocalinstall
>
> Then you should build your app like this:
> 	make RTE_SDK=$(readlink -e ../dpdk/mylocalinstall/usr/local/share/dpdk)

Hello Thomas,

Is the way the make install target really works documented somewhere?

This target did not exist when I first used DPDK in 2011, and since then 
I saw various documentation on building DPDK in various places, but not 
that much explanation what make install actually does. I recall various 
list threads about changing its behavior as well.

For example, if I look at this apparently most official document:

http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html

It has build examples such as:

make install T=x86_64-native-linuxapp-gcc

But it does not discuss "O=" or "DESTDIR=" or any other additional 
options. From some experiments on my machine, it looks like maybe I 
could do this:

make install "T=${RTE_TARGET}" "O=build" "DESTDIR=build"

Is that a valid possibility, to keep it all in one easy directory?

Thanks,
Matthew.
  
Thomas Monjalon Jan. 27, 2016, 1:38 p.m. UTC | #3
2016-01-20 21:15, Matthew Hall:
> On 1/20/16 7:27 AM, Thomas Monjalon wrote:
> > Hi Matthew,
> >
> > RTE_SDK_BIN is an internal variable and should not be overriden.
>  >
> > Have you installed DPDK somewhere? Example:
> > 	make install O=mybuild DESTDIR=mylocalinstall
> >
> > Then you should build your app like this:
> > 	make RTE_SDK=$(readlink -e ../dpdk/mylocalinstall/usr/local/share/dpdk)
> 
> Hello Thomas,
> 
> Is the way the make install target really works documented somewhere?

It is poorly described here:
http://dpdk.org/doc/guides/prog_guide/dev_kit_root_make_help.html#install-targets

> This target did not exist when I first used DPDK in 2011, and since then 
> I saw various documentation on building DPDK in various places, but not 
> that much explanation what make install actually does. I recall various 
> list threads about changing its behavior as well.

Historically, "make install" was a convenient default build (with T= option).
The DESTDIR option was added to make a real install after building.
The standard form (without T=) is now implemented to do a real install.

> For example, if I look at this apparently most official document:
> 
> http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html
> 
> It has build examples such as:
> 
> make install T=x86_64-native-linuxapp-gcc

This command finishes with this message:
	Installation cannot run with T defined and DESTDIR undefined

Yes you are right, some docs are neither complete nor up-to-date.
Volunteers are welcome.

> But it does not discuss "O=" or "DESTDIR=" or any other additional 
> options. From some experiments on my machine, it looks like maybe I 
> could do this:
> 
> make install "T=${RTE_TARGET}" "O=build" "DESTDIR=build"
> 
> Is that a valid possibility, to keep it all in one easy directory?

Yes you can install where you want.
Note that this command (with T= and O=) will build in the directory $O/$T
i.e. build/${RTE_TARGET} and install in build/

Please confirm that this patch is not needed. Thanks
  

Patch

diff --git a/mk/internal/rte.extvars.mk b/mk/internal/rte.extvars.mk
index 040d39f..3d5ba1f 100644
--- a/mk/internal/rte.extvars.mk
+++ b/mk/internal/rte.extvars.mk
@@ -52,7 +52,7 @@  RTE_EXTMK ?= $(RTE_SRCDIR)/Makefile
 export RTE_EXTMK
 
 # RTE_SDK_BIN must point to .config, include/ and lib/.
-RTE_SDK_BIN := $(RTE_SDK)/$(RTE_TARGET)
+RTE_SDK_BIN ?= $(RTE_SDK)/$(RTE_TARGET)
 ifeq ($(wildcard $(RTE_SDK_BIN)/.config),)
 $(error Cannot find .config in $(RTE_SDK))
 endif