Skip to content

Commit a11555c

Browse files
committed
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/.
1 parent 897d035 commit a11555c

File tree

5 files changed

+35
-4
lines changed

5 files changed

+35
-4
lines changed

Makefile.arm

+10
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
# ifeq logical or
22
ifeq ($(CORE), $(filter $(CORE),CORTEXA9 CORTEXA15))
3+
ifeq ($(OSNAME), Android)
4+
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
5+
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
6+
else
37
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
48
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
59
endif
10+
endif
611

712
ifeq ($(CORE), ARMV7)
13+
ifeq ($(OSNAME), Android)
14+
CCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
15+
FCOMMON_OPT += -marm -mfpu=neon -mfloat-abi=hard -march=armv7-a
16+
else
817
CCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
918
FCOMMON_OPT += -marm -mfpu=vfpv3 -mfloat-abi=hard -march=armv7-a
1019
endif
20+
endif
1121

1222
ifeq ($(CORE), ARMV6)
1323
CCOMMON_OPT += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6

c_check

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ $os = osf if ($data =~ /OS_OSF/);
5757
$os = WINNT if ($data =~ /OS_WINNT/);
5858
$os = CYGWIN_NT if ($data =~ /OS_CYGWIN_NT/);
5959
$os = Interix if ($data =~ /OS_INTERIX/);
60+
$os = Android if ($data =~ /OS_ANDROID/);
6061

6162
$architecture = x86 if ($data =~ /ARCH_X86/);
6263
$architecture = x86_64 if ($data =~ /ARCH_X86_64/);

common.h

+6
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ extern "C" {
9393
#include <sched.h>
9494
#endif
9595

96+
#ifdef OS_ANDROID
97+
#define NO_SYSV_IPC
98+
#endif
99+
96100
#ifdef OS_WINDOWS
97101
#ifdef ATOM
98102
#define GOTO_ATOM ATOM
@@ -106,7 +110,9 @@ extern "C" {
106110
#endif
107111
#else
108112
#include <sys/mman.h>
113+
#ifndef NO_SYSV_IPC
109114
#include <sys/shm.h>
115+
#endif
110116
#include <sys/time.h>
111117
#include <unistd.h>
112118
#include <math.h>

ctest.c

+4
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ COMPILER_DEC
4444
COMPILER_GNU
4545
#endif
4646

47+
#if defined(__ANDROID__)
48+
OS_ANDROID
49+
#endif
50+
4751
#if defined(__linux__)
4852
OS_LINUX
4953
#endif

driver/others/memory.c

+14-4
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
9090

9191
#ifndef OS_WINDOWS
9292
#include <sys/mman.h>
93+
#ifndef NO_SYSV_IPC
9394
#include <sys/shm.h>
95+
#endif
9496
#include <sys/ipc.h>
9597
#endif
9698

@@ -169,6 +171,14 @@ int get_num_procs(void) {
169171
#endif
170172
#endif
171173

174+
#ifdef OS_ANDROID
175+
int get_num_procs(void) {
176+
static int nums = 0;
177+
if (!nums) nums = sysconf(_SC_NPROCESSORS_ONLN);
178+
return nums;
179+
}
180+
#endif
181+
172182
#ifdef OS_WINDOWS
173183

174184
int get_num_procs(void) {
@@ -266,7 +276,7 @@ void openblas_fork_handler()
266276
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60035
267277
// In the mean time build with USE_OPENMP=0 or link against another
268278
// implementation of OpenMP.
269-
#if !defined(OS_WINDOWS) && defined(SMP_SERVER)
279+
#if !(defined(OS_WINDOWS) || defined(OS_ANDROID)) && defined(SMP_SERVER)
270280
int err;
271281
err = pthread_atfork ((void (*)(void)) BLASFUNC(blas_thread_shutdown), NULL, NULL);
272282
if(err != 0)
@@ -276,15 +286,15 @@ void openblas_fork_handler()
276286

277287
int blas_get_cpu_number(void){
278288
env_var_t p;
279-
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN)
289+
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID)
280290
int max_num;
281291
#endif
282292
int blas_goto_num = 0;
283293
int blas_omp_num = 0;
284294

285295
if (blas_num_threads) return blas_num_threads;
286296

287-
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN)
297+
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID)
288298
max_num = get_num_procs();
289299
#endif
290300

@@ -308,7 +318,7 @@ int blas_get_cpu_number(void){
308318
else if (blas_omp_num > 0) blas_num_threads = blas_omp_num;
309319
else blas_num_threads = MAX_CPU_NUMBER;
310320

311-
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN)
321+
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID)
312322
if (blas_num_threads > max_num) blas_num_threads = max_num;
313323
#endif
314324

0 commit comments

Comments
 (0)