Simplify OSX/IOS cross-compilation and add a CI test for it (#2279)
* Add automatic fixups for OSX/IOS cross-compilation * Add OSX/IOS cross-compilation test to Travis CI * Handle platforms that lack hwcap.h by falling back to ARMV8 * Fix PROLOGUE for OSX/IOS
This commit is contained in:
parent
ba7838d2e1
commit
5f6206fa2d
|
@ -173,6 +173,14 @@ matrix:
|
||||||
env:
|
env:
|
||||||
- BTYPE="BINARY=32 FC=gfortran-8"
|
- BTYPE="BINARY=32 FC=gfortran-8"
|
||||||
|
|
||||||
|
- <<: *test-macos
|
||||||
|
osx_image: xcode10.1
|
||||||
|
env:
|
||||||
|
- COMMON_FLAGS="NUM_THREADS=32"
|
||||||
|
- CC="/Applications/Xcode-10.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -isysroot /Applications/Xcode-10.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk"
|
||||||
|
- CFLAGS="-O2 -isysroot /Applications/Xcode-10.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk -arch arm64 -miphoneos-version-min=10.0"
|
||||||
|
- BTYPE="TARGET=ARMV8 BINARY=64 HOSTCC=clang"
|
||||||
|
|
||||||
# whitelist
|
# whitelist
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
|
|
13
c_check
13
c_check
|
@ -260,6 +260,19 @@ if ($architecture ne $hostarch) {
|
||||||
|
|
||||||
$cross = 1 if ($os ne $hostos);
|
$cross = 1 if ($os ne $hostos);
|
||||||
|
|
||||||
|
# rework cross suffix and architecture if we are on OSX cross-compiling for ARMV8-based IOS
|
||||||
|
# the initial autodetection will have been confused by the command-line arguments to clang
|
||||||
|
# and the cross-compiler apparently still claims to build for x86_64 in its CC -E output
|
||||||
|
if (($os eq "Darwin") && ($cross_suffix ne "")) {
|
||||||
|
my $tmpnam = `xcrun --sdk iphoneos --find clang`;
|
||||||
|
$cross_suffix = substr($tmpnam, 0, rindex($tmpnam, "/")+1 );
|
||||||
|
# this should produce something like $cross_suffix="/Applications/Xcode-10.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/";
|
||||||
|
$cross =1;
|
||||||
|
$architecture = arm64;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$openmp = "" if $ENV{USE_OPENMP} != 1;
|
$openmp = "" if $ENV{USE_OPENMP} != 1;
|
||||||
|
|
||||||
$linker_L = "";
|
$linker_L = "";
|
||||||
|
|
|
@ -107,7 +107,9 @@ static inline int blas_quickdivide(blasint x, blasint y){
|
||||||
.text ;
|
.text ;
|
||||||
.p2align 2 ;
|
.p2align 2 ;
|
||||||
.global REALNAME ;
|
.global REALNAME ;
|
||||||
|
#ifndef __APPLE__
|
||||||
.type REALNAME, %function ;
|
.type REALNAME, %function ;
|
||||||
|
#endif
|
||||||
REALNAME:
|
REALNAME:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,10 @@
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#if (defined OS_LINUX || defined OS_ANDROID)
|
||||||
#include <asm/hwcap.h>
|
#include <asm/hwcap.h>
|
||||||
#include <sys/auxv.h>
|
#include <sys/auxv.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
extern gotoblas_t gotoblas_ARMV8;
|
extern gotoblas_t gotoblas_ARMV8;
|
||||||
extern gotoblas_t gotoblas_CORTEXA57;
|
extern gotoblas_t gotoblas_CORTEXA57;
|
||||||
|
@ -105,13 +107,17 @@ static gotoblas_t *force_coretype(char *coretype) {
|
||||||
|
|
||||||
static gotoblas_t *get_coretype(void) {
|
static gotoblas_t *get_coretype(void) {
|
||||||
int implementer, variant, part, arch, revision, midr_el1;
|
int implementer, variant, part, arch, revision, midr_el1;
|
||||||
|
|
||||||
|
#if (defined OS_LINUX || defined OS_ANDROID)
|
||||||
if (!(getauxval(AT_HWCAP) & HWCAP_CPUID)) {
|
if (!(getauxval(AT_HWCAP) & HWCAP_CPUID)) {
|
||||||
char coremsg[128];
|
char coremsg[128];
|
||||||
snprintf(coremsg, 128, "Kernel lacks cpuid feature support. Auto detection of core type failed !!!\n");
|
snprintf(coremsg, 128, "Kernel lacks cpuid feature support. Auto detection of core type failed !!!\n");
|
||||||
openblas_warning(1, coremsg);
|
openblas_warning(1, coremsg);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
get_cpu_ftr(MIDR_EL1, midr_el1);
|
get_cpu_ftr(MIDR_EL1, midr_el1);
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue