--- skia/skia_library_opts.gyp 2013-10-11 19:29:07.000000000 +0200 +++ skia/skia_library_opts.gyp 2013-10-19 18:40:03.817037422 +0200 @@ -119,5 +119,6 @@ '../third_party/skia/src/opts/opts_check_arm.cpp', '../third_party/skia/src/opts/SkXfermode_opts_none.cpp', + '../third_party/skia/src/opts/memset.arm.S', ], }], [ 'target_arch == "mipsel"',{ --- third_party/webrtc/system_wrappers/source/cpu_features.cc 2013-10-11 19:43:08.000000000 +0200 +++ third_party/webrtc/system_wrappers/source/cpu_features.cc 2013-10-19 18:40:03.806037535 +0200 @@ -18,6 +18,47 @@ #include "webrtc/typedefs.h" +#include +#ifdef __arm__ +#include +#include +#include +#include +#endif + +#ifdef __arm__ +uint64_t WebRtc_GetCPUFeaturesARM() { + static bool detected = false; + static uint64_t have_neon = 0; + + int fd; + Elf32_auxv_t auxv; + unsigned int hwcaps; + + if (!detected) { + int fd; + Elf32_auxv_t auxv; + unsigned int hwcaps; + + fd = open("/proc/self/auxv", O_RDONLY); + if (fd >= 0) { + while (read(fd, &auxv, sizeof(Elf32_auxv_t)) == sizeof(Elf32_auxv_t)) { + if (auxv.a_type == AT_HWCAP) { + have_neon = (auxv.a_un.a_val & HWCAP_NEON) ? kCPUFeatureNEON : 0; + break; + } + } + close (fd); + } else { + have_neon = 0; + } + detected = true; + } + + return 0 | have_neon; // others here as we need them +} +#endif + // No CPU feature is available => straight C path. int GetCPUInfoNoASM(CPUFeature feature) { (void)feature;