[dpdk-dev,v3,1/2] build: add support for ARM builds
Checks
Commit Message
From: Bruce Richardson <bruce.richardson@intel.com>
Add files to enable compiling for ARM cross builds.
This can be tested by doing a cross-compile for armv8-a type using
the linaro gcc toolchain.
meson arm-build --cross-file aarch64_cross.txt
ninja -C arm-build
where aarch64_cross.txt contained the following
[binaries]
c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-cpp'
ar = 'aarch64-linux-gnu-ar'
[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'armv8-a'
endian = 'little'
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
---
v3 Changes:
- Fix missing SPDX license tags
v2 Changes:
- Merged RFC patch.
- Added framework to easily other vendor specific flags
- renamed machine_arg to machine_args
config/arm/meson.build | 36 ++++++++++++++++++++++
config/meson.build | 4 ++-
lib/librte_eal/common/arch/arm/meson.build | 5 +++
lib/librte_eal/common/include/arch/arm/meson.build | 29 +++++++++++++++++
4 files changed, 73 insertions(+), 1 deletion(-)
create mode 100644 config/arm/meson.build
create mode 100644 lib/librte_eal/common/arch/arm/meson.build
create mode 100644 lib/librte_eal/common/include/arch/arm/meson.build
--
2.15.1
Comments
On Fri, Jan 19, 2018 at 07:22:50PM +0530, Pavan Nikhilesh wrote:
> From: Bruce Richardson <bruce.richardson@intel.com>
>
> Add files to enable compiling for ARM cross builds.
> This can be tested by doing a cross-compile for armv8-a type using
> the linaro gcc toolchain.
>
> meson arm-build --cross-file aarch64_cross.txt
> ninja -C arm-build
>
> where aarch64_cross.txt contained the following
>
> [binaries]
> c = 'aarch64-linux-gnu-gcc'
> cpp = 'aarch64-linux-gnu-cpp'
> ar = 'aarch64-linux-gnu-ar'
>
> [host_machine]
> system = 'linux'
> cpu_family = 'aarch64'
> cpu = 'armv8-a'
> endian = 'little'
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> ---
> v3 Changes:
> - Fix missing SPDX license tags
>
> v2 Changes:
> - Merged RFC patch.
> - Added framework to easily other vendor specific flags
> - renamed machine_arg to machine_args
>
Set LGTM, but it would be nice to get an ACK or review from another ARM
expert. Any volunteers?
/Bruce
HI Bruce,
Are these planned for 18.02? If so, I will prioritize this work.
Regards,
Hemant
> -----Original Message-----
> From: Bruce Richardson [mailto:bruce.richardson@intel.com]
> Sent: Friday, January 19, 2018 9:54 PM
> To: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> Cc: jerin.jacob@caviumnetworks.com; harry.van.haaren@intel.com;
> herbert.guan@arm.com; dev@dpdk.org; Hemant Agrawal
> <hemant.agrawal@nxp.com>; Shreyansh Jain <shreyansh.jain@nxp.com>
> Subject: Re: [dpdk-dev] [PATCH v3 1/2] build: add support for ARM builds
> Importance: High
>
> On Fri, Jan 19, 2018 at 07:22:50PM +0530, Pavan Nikhilesh wrote:
> > From: Bruce Richardson <bruce.richardson@intel.com>
> >
> > Add files to enable compiling for ARM cross builds.
> > This can be tested by doing a cross-compile for armv8-a type using the
> > linaro gcc toolchain.
> >
> > meson arm-build --cross-file aarch64_cross.txt
> > ninja -C arm-build
> >
> > where aarch64_cross.txt contained the following
> >
> > [binaries]
> > c = 'aarch64-linux-gnu-gcc'
> > cpp = 'aarch64-linux-gnu-cpp'
> > ar = 'aarch64-linux-gnu-ar'
> >
> > [host_machine]
> > system = 'linux'
> > cpu_family = 'aarch64'
> > cpu = 'armv8-a'
> > endian = 'little'
> >
> > Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> > ---
> > v3 Changes:
> > - Fix missing SPDX license tags
> >
> > v2 Changes:
> > - Merged RFC patch.
> > - Added framework to easily other vendor specific flags
> > - renamed machine_arg to machine_args
> >
> Set LGTM, but it would be nice to get an ACK or review from another ARM
> expert. Any volunteers?
>
> /Bruce
On Fri, Jan 19, 2018 at 04:49:04PM +0000, Hemant Agrawal wrote:
> HI Bruce,
> Are these planned for 18.02? If so, I will prioritize this work.
>
> Regards,
> Hemant
>
Hi Hemant,
yes, this is planned to be merged as *experimental* for 18.02. If no
feedback, I'll pull them as-is for 18.02 and we can fix appropriately in
18.05. I've verified at least that cross-compiling for arm works with
them applied, but the changes for detecting platform in the
non-cross-compile case I can't test, so your input on that would be
appreciated.
/Bruce
new file mode 100644
@@ -0,0 +1,36 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2017 Intel Corporation.
+# Copyright(c) 2017 Cavium, Inc
+
+# for checking defines we need to use the correct compiler flags
+march_opt = '-march=@0@'.format(machine)
+
+dpdk_conf.set('RTE_FORCE_INTRINSICS', 1)
+if cc.sizeof('void *') == 8
+ dpdk_conf.set('RTE_CACHE_LINE_SIZE', 128)
+ dpdk_conf.set('RTE_ARCH_ARM64', 1)
+ dpdk_conf.set('RTE_ARCH_64', 1)
+else
+ dpdk_conf.set('RTE_CACHE_LINE_SIZE', 64)
+ dpdk_conf.set('RTE_ARCH_ARM', 1)
+ dpdk_conf.set('RTE_ARCH_ARMv7', 1)
+endif
+
+if cc.get_define('__ARM_NEON', args: march_opt) != ''
+ dpdk_conf.set('RTE_MACHINE_CPUFLAG_NEON', 1)
+ compile_time_cpuflags += ['RTE_CPUFLAG_NEON']
+endif
+
+if cc.get_define('__ARM_FEATURE_CRC32', args: march_opt) != ''
+ dpdk_conf.set('RTE_MACHINE_CPUFLAG_CRC32', 1)
+ compile_time_cpuflags += ['RTE_CPUFLAG_CRC32']
+endif
+
+if cc.get_define('__ARM_FEATURE_CRYPTO', args: march_opt) != ''
+ dpdk_conf.set('RTE_MACHINE_CPUFLAG_AES', 1)
+ dpdk_conf.set('RTE_MACHINE_CPUFLAG_PMULL', 1)
+ dpdk_conf.set('RTE_MACHINE_CPUFLAG_SHA1', 1)
+ dpdk_conf.set('RTE_MACHINE_CPUFLAG_SHA2', 1)
+ compile_time_cpuflags += ['RTE_CPUFLAG_AES', 'RTE_CPUFLAG_PMULL',
+ 'RTE_CPUFLAG_SHA1', 'RTE_CPUFLAG_SHA2']
+endif
@@ -56,8 +56,10 @@ endforeach
compile_time_cpuflags = []
if host_machine.cpu_family().startswith('x86')
arch_subdir = 'x86'
- subdir(arch_subdir)
+elif host_machine.cpu_family().startswith('arm') or host_machine.cpu_family().startswith('aarch')
+ arch_subdir = 'arm'
endif
+subdir(arch_subdir)
dpdk_conf.set('RTE_COMPILE_TIME_CPUFLAGS', ','.join(compile_time_cpuflags))
# set the install path for the drivers
new file mode 100644
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2017 Intel Corporation.
+
+eal_common_arch_sources = files('rte_cpuflags.c',
+ 'rte_cycles.c')
new file mode 100644
@@ -0,0 +1,29 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2017 Intel Corporation.
+
+install_headers(
+ 'rte_atomic_32.h',
+ 'rte_atomic_64.h',
+ 'rte_atomic.h',
+ 'rte_byteorder.h',
+ 'rte_cpuflags_32.h',
+ 'rte_cpuflags_64.h',
+ 'rte_cpuflags.h',
+ 'rte_cycles_32.h',
+ 'rte_cycles_64.h',
+ 'rte_cycles.h',
+ 'rte_io_64.h',
+ 'rte_io.h',
+ 'rte_memcpy_32.h',
+ 'rte_memcpy_64.h',
+ 'rte_memcpy.h',
+ 'rte_pause_32.h',
+ 'rte_pause_64.h',
+ 'rte_pause.h',
+ 'rte_prefetch_32.h',
+ 'rte_prefetch_64.h',
+ 'rte_prefetch.h',
+ 'rte_rwlock.h',
+ 'rte_spinlock.h',
+ 'rte_vect.h',
+ subdir: get_option('include_subdir_arch'))