Support Android NDK armeabi-v7a-hard ABI. (-mfloat-abi=hard)
e.g. make HOSTCC=gcc CC=arm-linux-androideabi-gcc NO_LAPACK=1 TARGET=ARMV7 In Android NDK, it uses armeabi-v7a-hard ABI. TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard For more information, please check hard-float example at android_ndk/tests/device/hard-float/jni/.
This commit is contained in:
parent
897d03518e
commit
a11555c715
10
Makefile.arm
10
Makefile.arm
|
@ -1,13 +1,23 @@
|
||||||
# ifeq logical or
|
# ifeq logical or
|
||||||
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15))
|
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15))
|
||||||
|
ifeq ($(OSNAME), Android)
|
||||||
|
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
|
||||||
|
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
|
||||||
|
else
|
||||||
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||||
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CORE), ARMV7)
|
ifeq ($(CORE), ARMV7)
|
||||||
|
ifeq ($(OSNAME), Android)
|
||||||
|
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
|
||||||
|
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
|
||||||
|
else
|
||||||
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||||
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CORE), ARMV6)
|
ifeq ($(CORE), ARMV6)
|
||||||
CCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6
|
CCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6
|
||||||
|
|
1
c_check
1
c_check
|
@ -57,6 +57,7 @@ $os = osf if ($data =~ /OS_OSF/);
|
||||||
$os = WINNT if ($data =~ /OS_WINNT/);
|
$os = WINNT if ($data =~ /OS_WINNT/);
|
||||||
$os = CYGWIN_NT if ($data =~ /OS_CYGWIN_NT/);
|
$os = CYGWIN_NT if ($data =~ /OS_CYGWIN_NT/);
|
||||||
$os = Interix if ($data =~ /OS_INTERIX/);
|
$os = Interix if ($data =~ /OS_INTERIX/);
|
||||||
|
$os = Android if ($data =~ /OS_ANDROID/);
|
||||||
|
|
||||||
$architecture = x86 if ($data =~ /ARCH_X86/);
|
$architecture = x86 if ($data =~ /ARCH_X86/);
|
||||||
$architecture = x86_64 if ($data =~ /ARCH_X86_64/);
|
$architecture = x86_64 if ($data =~ /ARCH_X86_64/);
|
||||||
|
|
6
common.h
6
common.h
|
@ -93,6 +93,10 @@ extern "C" {
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OS_ANDROID
|
||||||
|
#define NO_SYSV_IPC
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef OS_WINDOWS
|
#ifdef OS_WINDOWS
|
||||||
#ifdef ATOM
|
#ifdef ATOM
|
||||||
#define GOTO_ATOM ATOM
|
#define GOTO_ATOM ATOM
|
||||||
|
@ -106,7 +110,9 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#ifndef NO_SYSV_IPC
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
#endif
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
4
ctest.c
4
ctest.c
|
@ -44,6 +44,10 @@ COMPILER_DEC
|
||||||
COMPILER_GNU
|
COMPILER_GNU
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__ANDROID__)
|
||||||
|
OS_ANDROID
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
OS_LINUX
|
OS_LINUX
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -90,7 +90,9 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#ifndef OS_WINDOWS
|
#ifndef OS_WINDOWS
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#ifndef NO_SYSV_IPC
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
#endif
|
||||||
#include <sys/ipc.h>
|
#include <sys/ipc.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -169,6 +171,14 @@ int get_num_procs(void) {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OS_ANDROID
|
||||||
|
int get_num_procs(void) {
|
||||||
|
static int nums = 0;
|
||||||
|
if (!nums) nums = sysconf(_SC_NPROCESSORS_ONLN);
|
||||||
|
return nums;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef OS_WINDOWS
|
#ifdef OS_WINDOWS
|
||||||
|
|
||||||
int get_num_procs(void) {
|
int get_num_procs(void) {
|
||||||
|
@ -266,7 +276,7 @@ void openblas_fork_handler()
|
||||||
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60035
|
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60035
|
||||||
// In the mean time build with USE_OPENMP=0 or link against another
|
// In the mean time build with USE_OPENMP=0 or link against another
|
||||||
// implementation of OpenMP.
|
// implementation of OpenMP.
|
||||||
#if !defined(OS_WINDOWS) && defined(SMP_SERVER)
|
#if !(defined(OS_WINDOWS) || defined(OS_ANDROID)) && defined(SMP_SERVER)
|
||||||
int err;
|
int err;
|
||||||
err = pthread_atfork ((void (*)(void)) BLASFUNC(blas_thread_shutdown), NULL, NULL);
|
err = pthread_atfork ((void (*)(void)) BLASFUNC(blas_thread_shutdown), NULL, NULL);
|
||||||
if(err != 0)
|
if(err != 0)
|
||||||
|
@ -276,7 +286,7 @@ void openblas_fork_handler()
|
||||||
|
|
||||||
int blas_get_cpu_number(void){
|
int blas_get_cpu_number(void){
|
||||||
env_var_t p;
|
env_var_t p;
|
||||||
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN)
|
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID)
|
||||||
int max_num;
|
int max_num;
|
||||||
#endif
|
#endif
|
||||||
int blas_goto_num = 0;
|
int blas_goto_num = 0;
|
||||||
|
@ -284,7 +294,7 @@ int blas_get_cpu_number(void){
|
||||||
|
|
||||||
if (blas_num_threads) return blas_num_threads;
|
if (blas_num_threads) return blas_num_threads;
|
||||||
|
|
||||||
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN)
|
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID)
|
||||||
max_num = get_num_procs();
|
max_num = get_num_procs();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -308,7 +318,7 @@ int blas_get_cpu_number(void){
|
||||||
else if (blas_omp_num > 0) blas_num_threads = blas_omp_num;
|
else if (blas_omp_num > 0) blas_num_threads = blas_omp_num;
|
||||||
else blas_num_threads = MAX_CPU_NUMBER;
|
else blas_num_threads = MAX_CPU_NUMBER;
|
||||||
|
|
||||||
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN)
|
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID)
|
||||||
if (blas_num_threads > max_num) blas_num_threads = max_num;
|
if (blas_num_threads > max_num) blas_num_threads = max_num;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue