[dpdk-dev,v6,1/4] build: add support for ARM builds
Checks
Commit Message
From: Bruce Richardson <bruce.richardson@intel.com>
Add files to enable compiling for ARM native/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>
---
v6 Changes:
- add documentation for cross compiling with meson
- rebase onto master
- fix commit logs
v5 Changes:
- Use generic_armv8 config when script returns unknows machine args
v4 Changes:
- use set_quoted to set config instead of explicitly using quotes.
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.16.0
Comments
On Mon, Jan 22, 2018 at 08:56:29PM +0530, Pavan Nikhilesh wrote:
> From: Bruce Richardson <bruce.richardson@intel.com>
>
> Add files to enable compiling for ARM native/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>
> ---
Set LGTM. No issues in my cross-compilation testing.
I'd appreciate a final Ack from someone more familiar with ARM than me
before applying.
Thanks,
/Bruce
-----Original Message-----
> Date: Mon, 22 Jan 2018 20:56:29 +0530
> From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> To: jerin.jacob@caviumnetworks.com, bruce.richardson@intel.com,
> harry.van.haaren@intel.com, herbert.guan@arm.com, hemant.agrawal@nxp.com
> Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> Subject: [dpdk-dev] [PATCH v6 1/4] build: add support for ARM builds
> X-Mailer: git-send-email 2.14.1
>
> From: Bruce Richardson <bruce.richardson@intel.com>
>
> Add files to enable compiling for ARM native/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>
Series Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
On Mon, Jan 22, 2018 at 09:50:04PM +0530, Jerin Jacob wrote:
> -----Original Message-----
> > Date: Mon, 22 Jan 2018 20:56:29 +0530
> > From: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> > To: jerin.jacob@caviumnetworks.com, bruce.richardson@intel.com,
> > harry.van.haaren@intel.com, herbert.guan@arm.com, hemant.agrawal@nxp.com
> > Cc: dev@dpdk.org, Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> > Subject: [dpdk-dev] [PATCH v6 1/4] build: add support for ARM builds
> > X-Mailer: git-send-email 2.14.1
> >
> > From: Bruce Richardson <bruce.richardson@intel.com>
> >
> > Add files to enable compiling for ARM native/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>
>
> Series Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
>
Applied to dpdk-next-build.
Thanks,
/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'))