![]() ![]() G++ -DNDEBUG -g2 -O2 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -fPIC -c cpu.cpp cryptest.sh G++ -DNDEBUG -g2 -O2 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -fPIC -c cpu.cppĮxport CXXFLAGS="-DNDEBUG -g2 -O2 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard" G++ -DNDEBUG -g2 -O2 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -fPIC -c cryptlib.cpp What we really want is something like the following: G++ -DNDEBUG -g2 -O2 -fPIC -c cryptlib.cpp Notice the build is missing some key options, like -march, -mcpu (or -mtune), -mfpu and -mfloat-abi. There's a few reasons the Makefile avoids selecting ARM options, but the short answer is: its not an easy problem because its the wild, wild west. march=armv8-a+crc+crypto -mtune=cortex-a57 Native BuildĪ native build does not use specialized CXXFLAGS on ARM. Overdrive 1000 (ARMv8/Aarch64, with CRC and Crypto): LeMaker HiKey (ARMv8/Aarch64, with CRC and Crypto): march=armv8-a+crc+crypto -mtune=cortex-a53Īpplied Micro Mustang (ARMv8/Aarch64, without CRC and Crypto): PINE64 (ARMv8/Aarch64, with CRC and Crypto): ODROID C2 (ARMv8/Aarch64, with CRC, without Crypto): march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard Raspberry Pi 3 (ARMv8/Aarch32, with CRC, without Crypto): march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard Raspberry Pi 3 (ARMv7 with NEON and VFPv4): march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hardĬubieTruck 5 (ARMv7 with NEON and VFPv4): march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hardīeagleBone Black (ARMv7 with NEON and VFPv3): ![]() Modern platforms use hard floats because they are faster for procedural calls. mfloat is determined by the platform using CPU feature flags from /proc/cpuinfo, where the platform is the hardware/os/toolchain/applications combination. Here is a small list of CXXFLAGS tuned for the test devices used during Crypto++ testing. Also see ARM (Command Line), ARM Embedded (Command Line) and ARM Embedded (Bare Metal) if building with the arm-linux-gnueabi toolchain. See Android (Command Line) and iOS (Command Line) for details. ![]() The pages use the toolchains provided by AOSP and Apple. If you are build for Android or iOS, then there are separate pages for the platforms. Instead, the options are tuned for the host device, and they try to use its full capabilities, like all 32 vectorized registers from the FPU if its VFPv4 and NEON capable. They are not generic options like Android recommends because the options don't cater to a wide array of devices. The ARM options presented below are suited for the device you are working on. In a native build, you will either (1) log into the device just like its a desktop computer, or (2) SSH into the device and then build the library just like its a desktop computer. IoT gadgets include BeagleBones, CubieTrucks, Banana Pis, HiKeys and other dev boards. This wiki page is dedicated to performing native builds for IoT gadgets and selecting appropriate ARM options. Additional classes include GCM using NEON's 64圆4 → 128-bit multiplier. BLAKE2 was the first class to receive the additional ARM support. Starting around 5.6.3, additional support was added for ARM, which included ARM NEON and ARMv8 CRC and Crypto extensions. Crypto++ supports ARM platforms, including Linux, iOS, Windows Phone and Windows Store. ![]()
0 Comments
Leave a Reply. |