Skip to content

pkhao75/Ne10

 
 

Repository files navigation

README

Fork Notice

This is a fork of Project Ne10, adapted to support modern Android toolchains (NDK r25+), for both 64-bit and 32-bit targets, using a fully CMake-based workflow.

We made an important modification to still support 32 bit tragets. This edit introduces a Python script that transparently rewrites all GNU-as(Gas)–style NEON .neon.s kernels (math, physics, DSP/FFT, image processing) into Clang-compatible assembly only when targeting 32-bit ARM (armv7a), mirroring the upstream iOS build. When targeting 64-bit ARM (aarch64), none of the .neon.s files are converted or altered—the build proceeds exactly as in the original Ne10 (using its pure-C and intrinsics paths), and all math/physics functions fall back to standard sinf, cosf, tanhf, etc., which the compiler auto-vectorizes under Clang/LLVM's -O3, -ffast-math or the default -fvectorize.

Refer to this fork if you're encountering build issues with the original Ne10 on recent Android setups. A complete CMake integration example is available in the LDSP project.

What’s Ne10?

Ne10 is a library of common, useful functions that have been heavily optimised for ARM-based CPUs equipped with NEON SIMD capabilities. It provides consistent, well-tested behaviour, allowing for painless integration into a wide variety of applications. The library currently focuses primarily around math, signal processing, image processing, and physics functions.

Building CircleCI

Out of the box, Ne10 supports the Linux, Android, and iOS platforms. For instructions on building Ne10 for these platforms, please consult the build instructions in building.md. It is possible to use the library on other platforms (or, indeed, “without a platform”), however you may have to fiddle with some of the build configuration files.

Once Ne10 has been built, it can be linked against just like any other C library. To link C code against Ne10, for instance, the compiler must first be aware of Ne10's library and header files — those within build/modules/ and inc/. To do this, these files can be copied to the standard directories used by compilation tools by running make install, or by installing Ne10 from a package manager. Following this, you can simply include Ne10.h in your C code, and ask the compiler to link against the NE10 library (e.g. with -lNE10).

Documentation

Ne10’s official documentation is generated from doxygen annotations in the source code. As such, these documents can be generated locally from the codebase by running doxygen within the doc directory (producing results in doc/html), or viewed remotely as hosted copies available over the Internet.

We also have a handful of carefully prepared sample code snippets in the samples/ directory that outline how Ne10 can be used to accomplish a number of common tasks. These include example programs to perform the FFT, FIR, and matrix multiply operations.

Contributing

Ne10 welcomes and encourages external contributions of any and all forms. If you’ve found a bug or have a suggestion, please don’t hesitate to detail these in the official issue tracker. For those looking to get their hands dirty and contribute code (the best kind of contribution!), please see CONTRIBUTING.md for more details.

Quick Links

Call for Use Cases

Find Project Ne10 useful? You can help us justify spending more engineering resources on the project! Please email us, outlining how you are using the project in your applications.

Want us to help cross-promote your product using Ne10 at developer events? We’re also looking for Ne10 use cases to show at conferences and meetups.

About

An open optimized software library project for the ARM® Architecture

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 65.4%
  • Assembly 24.7%
  • C++ 4.8%
  • CMake 2.1%
  • Python 1.1%
  • Objective-C 0.5%
  • Other 1.4%