DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Juraj Linkeš <juraj.linkes@pantheon.tech>,
	Thomas Monjalon <thomas@monjalon.net>
Cc: "arybchenko@solarflare.com" <arybchenko@solarflare.com>,
	"dev@dpdk.org" <dev@dpdk.org>,
	Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
Subject: Re: [dpdk-dev] [PATCH] ethdev: fix dpdk gcc build on Arm
Date: Thu, 4 Jun 2020 14:29:57 +0100
Message-ID: <e2155325-b8d1-9297-9fb1-44ff568d2c2c@intel.com> (raw)
In-Reply-To: <235a60eb9b164c3e8b62ef531db784b5@pantheon.tech>

On 6/4/2020 1:55 PM, Juraj Linkeš wrote:
>> -----Original Message-----
>> From: Ferruh Yigit <ferruh.yigit@intel.com>
>> Sent: Thursday, June 4, 2020 2:23 PM
>> To: Juraj Linkeš <juraj.linkes@pantheon.tech>; Thomas Monjalon
>> <thomas@monjalon.net>
>> Cc: arybchenko@solarflare.com; dev@dpdk.org; Honnappa Nagarahalli
>> <Honnappa.Nagarahalli@arm.com>
>> Subject: Re: [PATCH] ethdev: fix dpdk gcc build on Arm
>>
>> On 6/4/2020 11:36 AM, Juraj Linkeš wrote:
>>>
>>>
>>>> -----Original Message-----
>>>> From: Ferruh Yigit <ferruh.yigit@intel.com>
>>>> Sent: Wednesday, June 3, 2020 1:41 PM
>>>> To: Thomas Monjalon <thomas@monjalon.net>; Juraj Linkeš
>>>> <juraj.linkes@pantheon.tech>
>>>> Cc: arybchenko@solarflare.com; dev@dpdk.org
>>>> Subject: Re: [PATCH] ethdev: fix dpdk gcc build on Arm
>>>>
>>>> On 6/3/2020 11:16 AM, Thomas Monjalon wrote:
>>>>> 03/06/2020 11:48, Juraj Linkeš:
>>>>>> Directive #include <file> in gcc implementation searches for files
>>>>>> in a standard list of system directories, which leads to a
>>>>>> sporadici build error on Taishan arm machines:
>>>>>> /tmp/openvpp-testing/dpdk/lib/librte_ethdev/rte_ethdev.h:4287:10:
>>>>>> fatal error: rte_ethdev_core.h:
>>>>>> No such file or directory #include <rte_ethdev_core.h>
>>>>>
>>>>> Would be interesting to know why nobody else hit such error?
>>>>
>>>>
>>>> I can't see why this is happening, in the 'mk/rte.lib.mk' we have following:
>>>>
>>>> "
>>>> install: _preinstall build _postinstall
>>>> build: _preinstall
>>>> "
>>>>
>>>> Which should cause the library header files installed before building
>>>> .c files in that library.
>>>> So when compiling 'rte_class_eth.c', the header files should be
>>>> already in install folder.
>>>>
>>>>
>>>> I can see how/why changing to "" fixes the issue but I am not sure about this
>> fix.
>>>> "rte_ethdev.h" is a public header file, that applications will
>>>> include it in their applications. In the public library it is more
>>>> proper to have other includes from system folder, using format <>.
>>>> Again, I can't see why it is failing but I believe we should find
>>>> another solution for _internal_ build error.
>>>>
>>>>
>>>> A very simple solution can be following, but that is also not good,
>>>> since it solves the issue by creating a dependency to the order of the header
>> includes:
>>>>  diff --git a/lib/librte_ethdev/rte_class_eth.c
>>>> b/lib/librte_ethdev/rte_class_eth.c
>>>>  index 6338355e25..3030c49020 100644
>>>>  --- a/lib/librte_ethdev/rte_class_eth.c
>>>>  +++ b/lib/librte_ethdev/rte_class_eth.c
>>>>  @@ -10,8 +10,8 @@
>>>>   #include <rte_kvargs.h>
>>>>   #include <rte_log.h>
>>>>
>>>>  -#include "rte_ethdev.h"
>>>>   #include "rte_ethdev_core.h"
>>>>  +#include "rte_ethdev.h"
>>>>   #include "rte_ethdev_driver.h"
>>>>   #include "ethdev_private.h"
>>>>
>>>
>>> Thomas, Ferruh, what should be the solution? I'm not an expert on this and I
>> can't really offer anything better, but I'd like that this gets fixed.
>>
>> First we need to root cause this before trying to solve it. Honnappa also said he
>> can reproduce this but our CI builds can't (we are talking about tens of builds
>> daily on various platforms), need to understand why.
>> Also from Makefile I can't see how this is happening, I am feeling uneasy to fix
>> something before figuring out how/why it is failing.
>>
>> Can you please try to collect more data on when/how this happens, initial
>> questions I can think of:
>> - Can you reproduce this with meson build?
>> - Is it bare DPDK build, or build part of other project (I guess I saw fd.io on the
>> link)
>> - - If this is not bare DPDK build what changes has been done to build system?
>> - Do you see this with fresh build (new clone) or rebuild of existing clone?
>> - Can you confirm you have correct RTE_SDK and RTE_TARGET environment
>> variables?
>> - Can you please share your build command?
>>
> 
> I sent an e-mail to dpdk dev a few days back asking for help where I outlined what we're doing:
> We're not doing anything special, just downloading and extracting the archive, then setting CONFIG_RTE_LIBRTE_MLX5_PMD and CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC to y in config/common_base and then running make install T=arm64-armv8a-linuxapp-gcc -j. As mentioned in the subject, the build server is a Taishan ARM server.
> 
> We're doing a fresh rebuild everytime. The error doesn't happen everytime, just sometimes - it seems to be random.
> 
> We don't set RTE_SDK nor RTE_TARGET since https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html#installation-of-dpdk-target-environment-using-make doesn't mention those.

Can you please try with "V=1",
"make install T=arm64-armv8a-linuxapp-gcc -j V=1",
this will generate verbose output.

And _before_ lines compiling the 'rte_class_eth.c' you should see something like
following lines, can you please check:
"
SYMLINK-FILE include/rte_ethdev_core.h

ln -nsf `.../buildtools/relpath.sh .../lib/librte_ethdev/rte_ethdev_core.h
.../x86_64-native-linux-gcc/include` .../x86_64-native-linux-gcc/include
"

Also for the failed case, after fail can you please check if
a) '.../arm64-armv8a-linuxapp-gcc/build/lib/librte_ethdev/_preinstall' file exists
b) '.../x86_64-native-linux-gcc/include/rte_ethdev_core.h' exists and it linked
to correct file '../../lib/librte_ethdev/rte_ethdev_core.h'


> 
> I'll try Meson build a few times. How can I enable those two config options in Meson?
> 
>> Thanks,
>> ferruh
>>
>>>
>>>>>
>>>>>
>>>>>> Fix this by replacing the directive with #include "file" which
>>>>>> searches for files first in the directory containing the current
>>>>>> file and other directories only after that.
>>>>>>
>>>>>> Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
>>>>>
>>>>> What about #include <rte_ethdev_trace.h> ?
>>>>>
>>>>> Except this,
>>>>> Acked-by: Thomas Monjalon <thomas@monjalon.net>
>>>>>
>>>>>
>>>>> I would change the title to be more generic (nothing specific to gcc
>>>>> or Arm
>>>> here):
>>>>> 	ethdev: fix local include
>>>>>
>>>>> It needs to be backported, so these lines are required:
>>>>> 	Fixes: 7f0a669e7b04 ("ethdev: add allocation helper for virtual drivers")
>>>>> 	Fixes: dcd5c8112bc3 ("ethdev: add PCI driver helpers")
>>>>> 	Fixes: ffc905f3b856 ("ethdev: separate driver APIs")
>>>>> 	Fixes: 331c447ad913 ("ethdev: separate internal structures into own
>>>> header")
>>>>> 	Cc: stable@dpdk.org
>>>>>
>>>>>
>>>>>
>>>
> 


  reply	other threads:[~2020-06-04 13:30 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-03  9:48 Juraj Linkeš
2020-06-03 10:16 ` Thomas Monjalon
2020-06-03 10:23   ` Ananyev, Konstantin
2020-06-03 10:47   ` Juraj Linkeš
2020-06-03 12:05     ` Thomas Monjalon
2020-06-03 11:40   ` Ferruh Yigit
2020-06-04 10:36     ` Juraj Linkeš
2020-06-04 12:22       ` Ferruh Yigit
2020-06-04 12:50         ` Ferruh Yigit
2020-06-04 12:55         ` Juraj Linkeš
2020-06-04 13:29           ` Ferruh Yigit [this message]
2020-06-05 11:59             ` Juraj Linkeš
2020-06-08  8:17             ` Juraj Linkeš
2020-06-08 11:38               ` Ferruh Yigit
2020-06-08 12:03                 ` Juraj Linkeš
2020-06-08 12:39                   ` Ferruh Yigit
2020-06-08 13:19                     ` Juraj Linkeš
2020-06-08 13:46                       ` Ferruh Yigit
2020-06-04 13:41           ` Bruce Richardson
2020-06-05 12:00             ` Juraj Linkeš
2020-06-05 12:55               ` Bruce Richardson
2020-06-03 13:58   ` Honnappa Nagarahalli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e2155325-b8d1-9297-9fb1-44ff568d2c2c@intel.com \
    --to=ferruh.yigit@intel.com \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=arybchenko@solarflare.com \
    --cc=dev@dpdk.org \
    --cc=juraj.linkes@pantheon.tech \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git