DPDK patches and discussions
 help / color / mirror / Atom feed
From: Neil Horman <nhorman@tuxdriver.com>
To: Hemant Agrawal <hemant.agrawal@nxp.com>
Cc: Jerin Jacob <jerin.jacob@caviumnetworks.com>,
	"dev@dpdk.org" <dev@dpdk.org>, "users@dpdk.org" <users@dpdk.org>,
	"Jacob, Jerin" <Jerin.Jacob@cavium.com>,
	Jan Viktorin <viktorin@rehivetech.com>
Subject: Re: [dpdk-dev] pmdinfogen issues: cross compilation for ARM fails with older host compiler
Date: Tue, 15 Nov 2016 09:27:50 -0500	[thread overview]
Message-ID: <20161115142750.GA11283@hmsreliant.think-freely.org> (raw)
In-Reply-To: <DB5PR04MB1605203F2297ED88A47270F189BF0@DB5PR04MB1605.eurprd04.prod.outlook.com>

On Tue, Nov 15, 2016 at 09:34:16AM +0000, Hemant Agrawal wrote:
> > On Mon, Nov 14, 2016 at 02:29:24AM +0530, Jerin Jacob wrote:
> > > On Fri, Nov 11, 2016 at 10:34:39AM +0000, Hemant Agrawal wrote:
> > > > Hi Neil,
> > > >                Pmdinfogen compiles with host compiler. It usages rte_byteorder.h
> > of the target platform.
> > > > However, if the host compiler is older than 4.8, it will be an issue during cross
> > compilation for some platforms.
> > > > e.g. if we are compiling on x86 host for ARM, x86 host compiler will not
> > understand the arm asm instructions.
> > > >
> > > > /* fix missing __builtin_bswap16 for gcc older then 4.8 */ #if
> > > > !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) static
> > > > inline uint16_t rte_arch_bswap16(uint16_t _x) {
> > > >                register uint16_t x = _x;
> > > >                asm volatile ("rev16 %0,%1"
> > > >                                     : "=r" (x)
> > > >                                     : "r" (x)
> > > >                                     );
> > > >                return x;
> > > > }
> > > > #endif
> > > >
> > > > One easy solution is that we add compiler platform check in this
> > > > code section of rte_byteorder.h e.g #if !(defined __arm__ || defined
> > > > __aarch64__) static inline uint16_t rte_arch_bswap16(uint16_t _x) {
> > > >                return (_x >> 8) | ((_x << 8) & 0xff00); } #else ….
> > > >
> > > > Is there a better way to fix it?
> > >
> > > IMO, It is a HOST build infrastructure issue. If a host app is using
> > > the dpdk service then it should compile and link against HOST
> > > target(in this specific case, build/x86_64-native-linuxapp-gcc). I
> > > think, introducing the HOSTTARGET kind of scheme is a clean solution.
> > >
> > > /Jerin
> > >
> > >
> > That would be accurate.  That is to say, pmdinfogen is a tool that should only be
> > run on the host doing the build, by the host doing the build, and so should be
> > compiled to run on the host, not on the target being built for.
> > 
> > Yeah, so what we need is a way to get to the host version of rte_byteorder.h
> > when building in a cross environment
> > 
> +1 
> 
> > Neil
> 
Actually, looking at this, I think we're 90% there anyway.  The buildtools
already uses the hostapp.mk file (as it should), to target the host build
system, rather than any cross target, so we're good there.  The only question
is, should we be using rte_byteorder.h at all, and I think the answer is no, we
shouldn't.  I assert that because the byteorder file is configured for the
target, not the host, and so we shouldn't be touching it at all.  Instead we
should just be using the posix htobe*/htole*/letoh*/betoh* variants to do the
endian conversion, as those are always configured to work on the local build
host.


I'll propose a patch shortly for you to test.
Neil

  reply	other threads:[~2016-11-15 14:28 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-11 10:34 Hemant Agrawal
2016-11-11 13:48 ` Jan Viktorin
2016-11-11 19:25   ` Neil Horman
2016-11-13 20:59 ` Jerin Jacob
2016-11-14 14:48   ` Neil Horman
2016-11-15  9:34     ` Hemant Agrawal
2016-11-15 14:27       ` Neil Horman [this message]
2016-11-15 16:33         ` Thomas Monjalon
2016-11-15 15:08       ` Neil Horman
2016-11-18 12:03         ` Hemant Agrawal
2016-11-18 13:50           ` Neil Horman
2016-11-18 16:37             ` Bruce Richardson
2016-11-18 18:39               ` Neil Horman

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=20161115142750.GA11283@hmsreliant.think-freely.org \
    --to=nhorman@tuxdriver.com \
    --cc=Jerin.Jacob@cavium.com \
    --cc=dev@dpdk.org \
    --cc=hemant.agrawal@nxp.com \
    --cc=jerin.jacob@caviumnetworks.com \
    --cc=users@dpdk.org \
    --cc=viktorin@rehivetech.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).