[dpdk-dev] dpdk1.7.1 rte.app.mk add options not not build targerts

Message ID 1433844953-29887-1-git-send-email-maxim.uvarov@linaro.org (mailing list archive)
State Rejected, archived
Headers

Commit Message

Maxim Uvarov June 9, 2015, 10:15 a.m. UTC
  Inherit build varibles only so that this file can be included
from other projects.

Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
---
 mk/rte.app.mk | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
  

Comments

Olivier Matz June 9, 2015, 12:05 p.m. UTC | #1
Hello Maxim,

On 06/09/2015 12:15 PM, Maxim Uvarov wrote:
> Inherit build varibles only so that this file can be included
> from other projects.
>
> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>

Can you detail a bit more what you want to do?
Why do you need to include rte.app.mk? This file is
internal to the dpdk framework.

By the way, the title is not understandable:
- why dpdk1.7.1 ?
- targerts -> targets
- not not ?

Regards,
Olivier


> ---
>   mk/rte.app.mk | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/mk/rte.app.mk b/mk/rte.app.mk
> index 34dff2a..b75925d 100644
> --- a/mk/rte.app.mk
> +++ b/mk/rte.app.mk
> @@ -222,6 +222,7 @@ endif # ifeq ($(NO_AUTOLIBS),)
>
>   LDLIBS += $(CPU_LDLIBS)
>
> +ifneq ($(DPRK_APP_MK_SKIP_BUILD_TARGETS),1)
>   .PHONY: all
>   all: install
>
> @@ -232,6 +233,7 @@ _postinstall: build
>
>   .PHONY: build
>   build: _postbuild
> +endif
>
>   exe2cmd = $(strip $(call dotfile,$(patsubst %,%.cmd,$(1))))
>
> @@ -306,6 +308,7 @@ $(RTE_OUTPUT)/app/$(APP).map: $(APP)
>   	@[ -d $(RTE_OUTPUT)/app ] || mkdir -p $(RTE_OUTPUT)/app
>   	$(Q)cp -f $(APP).map $(RTE_OUTPUT)/app
>
> +ifneq ($(DPRK_APP_MK_SKIP_BUILD_TARGETS), 1)
>   #
>   # Clean all generated files
>   #
> @@ -317,7 +320,7 @@ clean: _postclean
>   doclean:
>   	$(Q)rm -rf $(APP) $(OBJS-all) $(DEPS-all) $(DEPSTMP-all) \
>   	  $(CMDS-all) $(INSTALL-FILES-all) .$(APP).cmd
> -
> +endif
>
>   include $(RTE_SDK)/mk/internal/rte.compile-post.mk
>   include $(RTE_SDK)/mk/internal/rte.install-post.mk
>
  
Maxim Uvarov June 9, 2015, 12:59 p.m. UTC | #2
On 06/09/15 15:05, Olivier MATZ wrote:
> Hello Maxim,
>
> On 06/09/2015 12:15 PM, Maxim Uvarov wrote:
>> Inherit build varibles only so that this file can be included
>> from other projects.
>>
>> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
>
> Can you detail a bit more what you want to do?
> Why do you need to include rte.app.mk? This file is
> internal to the dpdk framework.
>
> By the way, the title is not understandable:
> - why dpdk1.7.1 ?
> - targerts -> targets
> - not not ?
>
> Regards,
> Olivier

Sorry it was quick patch, some typos there. I intended to discuss the 
idea of what I need and might it it's useful for others.
I did ODP implementation with dpdk as back end. And staid on v1.7.1. But 
that patch should be good for the latest git,
if not I can update it.

So my environment is: I build library which calls dpdk functions. That 
library is used to build applications. I need to steal CFLAGS, LDFLAGS,
and build script from dpdk for my library and example apps. So I just 
point where dpdk is and my library build system should inherit the same
env which dpdk used. One reason is optimization and second reason is to 
compile in dpdk PMD drivers the same way as dpdk does that.

So in my Makefile I do: include $dpdk/mk/rte.app.mk

Is that needed for somebody else?

Thanks,
Maxim.

>
>
>> ---
>>   mk/rte.app.mk | 5 ++++-
>>   1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/mk/rte.app.mk b/mk/rte.app.mk
>> index 34dff2a..b75925d 100644
>> --- a/mk/rte.app.mk
>> +++ b/mk/rte.app.mk
>> @@ -222,6 +222,7 @@ endif # ifeq ($(NO_AUTOLIBS),)
>>
>>   LDLIBS += $(CPU_LDLIBS)
>>
>> +ifneq ($(DPRK_APP_MK_SKIP_BUILD_TARGETS),1)
>>   .PHONY: all
>>   all: install
>>
>> @@ -232,6 +233,7 @@ _postinstall: build
>>
>>   .PHONY: build
>>   build: _postbuild
>> +endif
>>
>>   exe2cmd = $(strip $(call dotfile,$(patsubst %,%.cmd,$(1))))
>>
>> @@ -306,6 +308,7 @@ $(RTE_OUTPUT)/app/$(APP).map: $(APP)
>>       @[ -d $(RTE_OUTPUT)/app ] || mkdir -p $(RTE_OUTPUT)/app
>>       $(Q)cp -f $(APP).map $(RTE_OUTPUT)/app
>>
>> +ifneq ($(DPRK_APP_MK_SKIP_BUILD_TARGETS), 1)
>>   #
>>   # Clean all generated files
>>   #
>> @@ -317,7 +320,7 @@ clean: _postclean
>>   doclean:
>>       $(Q)rm -rf $(APP) $(OBJS-all) $(DEPS-all) $(DEPSTMP-all) \
>>         $(CMDS-all) $(INSTALL-FILES-all) .$(APP).cmd
>> -
>> +endif
>>
>>   include $(RTE_SDK)/mk/internal/rte.compile-post.mk
>>   include $(RTE_SDK)/mk/internal/rte.install-post.mk
>>
>
  
Olivier Matz June 9, 2015, 2:37 p.m. UTC | #3
Hi Maxim,

On 06/09/2015 02:59 PM, Maxim Uvarov wrote:
> On 06/09/15 15:05, Olivier MATZ wrote:
>> Hello Maxim,
>>
>> On 06/09/2015 12:15 PM, Maxim Uvarov wrote:
>>> Inherit build varibles only so that this file can be included
>>> from other projects.
>>>
>>> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
>>
>> Can you detail a bit more what you want to do?
>> Why do you need to include rte.app.mk? This file is
>> internal to the dpdk framework.
>>
>> By the way, the title is not understandable:
>> - why dpdk1.7.1 ?
>> - targerts -> targets
>> - not not ?
>>
>> Regards,
>> Olivier
>
> Sorry it was quick patch, some typos there. I intended to discuss the
> idea of what I need and might it it's useful for others.
> I did ODP implementation with dpdk as back end. And staid on v1.7.1. But
> that patch should be good for the latest git,
> if not I can update it.
>
> So my environment is: I build library which calls dpdk functions. That
> library is used to build applications. I need to steal CFLAGS, LDFLAGS,
> and build script from dpdk for my library and example apps. So I just
> point where dpdk is and my library build system should inherit the same
> env which dpdk used. One reason is optimization and second reason is to
> compile in dpdk PMD drivers the same way as dpdk does that.
>
> So in my Makefile I do: include $dpdk/mk/rte.app.mk
>
> Is that needed for somebody else?

Maybe you can use rte.extapp.mk and rte.extlib.mk instead?

There is no example for rte.extlib.mk, but it works the same
as rte.extapp.mk. You can start from an example in dpdk/examples
directory (for instance skeleton):
- remove the main()
- change "APP = basicfwd" to "LIB = basicfwd.a"
- change "include $(RTE_SDK)/mk/rte.extapp.mk" to
   "include $(RTE_SDK)/mk/rte.extlib.mk"

Then:
   cd examples/skeleton
   make RTE_SDK=/path/to/dpdk \
     RTE_TARGET=x86_64-native-linuxapp-gcc \
     O=/path/to/dstdir

This should generate a static lib that you can use in another
application example.

If you cannot use this model, another solution would be to generate
a pkg-config file in dpdk framework that could be used by other
build frameworks.

Regards,
Olivier
  
Maxim Uvarov June 9, 2015, 3:29 p.m. UTC | #4
On 06/09/15 17:37, Olivier MATZ wrote:
> Hi Maxim,
>
> On 06/09/2015 02:59 PM, Maxim Uvarov wrote:
>> On 06/09/15 15:05, Olivier MATZ wrote:
>>> Hello Maxim,
>>>
>>> On 06/09/2015 12:15 PM, Maxim Uvarov wrote:
>>>> Inherit build varibles only so that this file can be included
>>>> from other projects.
>>>>
>>>> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
>>>
>>> Can you detail a bit more what you want to do?
>>> Why do you need to include rte.app.mk? This file is
>>> internal to the dpdk framework.
>>>
>>> By the way, the title is not understandable:
>>> - why dpdk1.7.1 ?
>>> - targerts -> targets
>>> - not not ?
>>>
>>> Regards,
>>> Olivier
>>
>> Sorry it was quick patch, some typos there. I intended to discuss the
>> idea of what I need and might it it's useful for others.
>> I did ODP implementation with dpdk as back end. And staid on v1.7.1. But
>> that patch should be good for the latest git,
>> if not I can update it.
>>
>> So my environment is: I build library which calls dpdk functions. That
>> library is used to build applications. I need to steal CFLAGS, LDFLAGS,
>> and build script from dpdk for my library and example apps. So I just
>> point where dpdk is and my library build system should inherit the same
>> env which dpdk used. One reason is optimization and second reason is to
>> compile in dpdk PMD drivers the same way as dpdk does that.
>>
>> So in my Makefile I do: include $dpdk/mk/rte.app.mk
>>
>> Is that needed for somebody else?
>
> Maybe you can use rte.extapp.mk and rte.extlib.mk instead?
>
> There is no example for rte.extlib.mk, but it works the same
> as rte.extapp.mk. You can start from an example in dpdk/examples
> directory (for instance skeleton):
> - remove the main()
> - change "APP = basicfwd" to "LIB = basicfwd.a"
> - change "include $(RTE_SDK)/mk/rte.extapp.mk" to
>   "include $(RTE_SDK)/mk/rte.extlib.mk"
>
> Then:
>   cd examples/skeleton
>   make RTE_SDK=/path/to/dpdk \
>     RTE_TARGET=x86_64-native-linuxapp-gcc \
>     O=/path/to/dstdir
>
> This should generate a static lib that you can use in another
> application example.
>
> If you cannot use this model, another solution would be to generate
> a pkg-config file in dpdk framework that could be used by other
> build frameworks.
>
> Regards,
> Olivier
>

mk/rte.extlib.mk also references to mk/rte.lib.mk which has all: target.
And as soon I will include that Makefile it will do make all first. But 
I need only
cflags and ldflags.

To link pmds we did that hack:
https://git.linaro.org/lng/odp-dpdk.git/commitdiff/9e41f167a8f44b74af6a1e1ffe00dc6d305ac8a4?hp=ac1789bfe9ceb6bbe04b6455f996680a20441813
Which mostly solved problem. But I would add sse and other cflags 
especially for inline functions to or link.

Will take a look at examples/skeleton. Before I looked only to 1.7.1 and 
there is no such example. Looks like it appeared later.

Thank you,
Maxim.
  

Patch

diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 34dff2a..b75925d 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -222,6 +222,7 @@  endif # ifeq ($(NO_AUTOLIBS),)
 
 LDLIBS += $(CPU_LDLIBS)
 
+ifneq ($(DPRK_APP_MK_SKIP_BUILD_TARGETS),1)
 .PHONY: all
 all: install
 
@@ -232,6 +233,7 @@  _postinstall: build
 
 .PHONY: build
 build: _postbuild
+endif
 
 exe2cmd = $(strip $(call dotfile,$(patsubst %,%.cmd,$(1))))
 
@@ -306,6 +308,7 @@  $(RTE_OUTPUT)/app/$(APP).map: $(APP)
 	@[ -d $(RTE_OUTPUT)/app ] || mkdir -p $(RTE_OUTPUT)/app
 	$(Q)cp -f $(APP).map $(RTE_OUTPUT)/app
 
+ifneq ($(DPRK_APP_MK_SKIP_BUILD_TARGETS), 1)
 #
 # Clean all generated files
 #
@@ -317,7 +320,7 @@  clean: _postclean
 doclean:
 	$(Q)rm -rf $(APP) $(OBJS-all) $(DEPS-all) $(DEPSTMP-all) \
 	  $(CMDS-all) $(INSTALL-FILES-all) .$(APP).cmd
-
+endif
 
 include $(RTE_SDK)/mk/internal/rte.compile-post.mk
 include $(RTE_SDK)/mk/internal/rte.install-post.mk