Porting Android application
from ARM to X86
Massimiliano Torregiani

Intel CODEFEST Milan
13 Febbraio 2014
Android SDK e NDK
Programmazione SDK

compile once, run everywhere

Programmazione NDK

some

compile once, run everywhere
oppure

oppure

2	
  
Concetti di Xcompilazione
nativa
Sistema Host
E’ il sistema dove il compilatore è installato e su cui
avviene la compilazione

Sistema target
E’ il sistema dove l’eseguibile generato su host sara’
eseguito.

Cosa serve per la compilazione?
• 

Toolchain (compilatore, linker, archiver, assembler, etc)

• 

Header file delle librerie

• 

Librerie standard, dei framework e altre librerie
accessorie cross-compilate per il sistema target

3	
  
Pacchetto NDK di Google
Il pacchetto NDK fornito da Google comprende:

Target Architecture
•  ARMv5TE	
  &	
  ARMv7-­‐A	
  
•  MIPS	
  
•  X86	
  -­‐	
  Intel	
  Atom	
  

Target operative system
Tipo e versione compilatore

(e.g.	
  GCC	
  4.8)	
  
4	
  
Supporto Intel per Android:
Beacon Mountain

5	
  
Porting da ARM a X86

Sample 1:
HelloJni

6	
  
Differenze tra architettura
ARM e X86
Memory Alignment
struct TestStruct {
int mVar1;
long long mVar2;
int mVar3;
};

GCC flag “-malign-double”
By Default
“Double Margin”

By default
No margin

7	
  
Differenze tra architettura
ARM e X86

Memory

Big	
  or	
  li/le	
  endian	
  order	
  

Alignment

(ARM	
  is	
  bi-­‐endian)	
  

Floating
Point

li/le-­‐endian	
  assembly	
  

ARMv5	
  à	
  So@	
  FP	
  opts	
  

Intel	
  Atom	
  à	
  IA-­‐32	
  

ARMv7	
  à	
  Hardware	
  FPU	
  

instrucJons,	
  Hardware	
  Based	
  

instrucJons	
  (VFP)	
  

FP	
  opts	
  

SIMD

ARMv5	
  à	
  No	
  SIMD	
  ext	
  

Intel	
  Atom	
  à	
  SSSE3	
  (Supplemental	
  

extensions

ARMv7	
  à	
  NEON	
  ext	
  

Streaming	
  SIMD	
  Extensions	
  3)	
  
8	
  
Differenze tra architettura
GCC Flags

Memory

–mlittle-endian

Alignment

–mbig-endian

Floating

-mfloat-abi= soft | softfp | hard

–mfpmath=sse

Point

-mfpu= vfp | vfpv3-d16 | neon | ...

-mavx
-maes

SIMD

-march=armv7-a

extensions

-mtune=cortex-a8

-msse

–DHAVE_NEON=1
9	
  
Porting da ARM a X86

Sample 2:
HelloNeon

10	
  
Utilizzo librerie esterne
Step 1: Porting
librerie esterne

Libreria	
  Esterna	
  
naJva	
  

Codice	
  naJvo	
  
proprietario	
  

Libreria	
  
compilata	
  per	
  
Target	
  

Step 2: Porting
codice nativo
proprietario

JNI

APP	
  Android	
  
(Java)	
  

Step 3: Rebuild
applicazione
11	
  
Porting da ARM a X86

Sample 3:
HelloFFmpeg

12	
  
KALPA

srl

Thanks!
Mail:

massimiliano.torregiani@kalpa.it	
  

Twitter: @maxtorregiani	
  
Linkedin: h/p://www.linkedin.com/pub/massimiliano-­‐torregiani/3/555/550	
  

Porting Android application from ARM to x86

  • 1.
    Porting Android application fromARM to X86 Massimiliano Torregiani Intel CODEFEST Milan 13 Febbraio 2014
  • 2.
    Android SDK eNDK Programmazione SDK compile once, run everywhere Programmazione NDK some compile once, run everywhere oppure oppure 2  
  • 3.
    Concetti di Xcompilazione nativa SistemaHost E’ il sistema dove il compilatore è installato e su cui avviene la compilazione Sistema target E’ il sistema dove l’eseguibile generato su host sara’ eseguito. Cosa serve per la compilazione? •  Toolchain (compilatore, linker, archiver, assembler, etc) •  Header file delle librerie •  Librerie standard, dei framework e altre librerie accessorie cross-compilate per il sistema target 3  
  • 4.
    Pacchetto NDK diGoogle Il pacchetto NDK fornito da Google comprende: Target Architecture •  ARMv5TE  &  ARMv7-­‐A   •  MIPS   •  X86  -­‐  Intel  Atom   Target operative system Tipo e versione compilatore (e.g.  GCC  4.8)   4  
  • 5.
    Supporto Intel perAndroid: Beacon Mountain 5  
  • 6.
    Porting da ARMa X86 Sample 1: HelloJni 6  
  • 7.
    Differenze tra architettura ARMe X86 Memory Alignment struct TestStruct { int mVar1; long long mVar2; int mVar3; }; GCC flag “-malign-double” By Default “Double Margin” By default No margin 7  
  • 8.
    Differenze tra architettura ARMe X86 Memory Big  or  li/le  endian  order   Alignment (ARM  is  bi-­‐endian)   Floating Point li/le-­‐endian  assembly   ARMv5  à  So@  FP  opts   Intel  Atom  à  IA-­‐32   ARMv7  à  Hardware  FPU   instrucJons,  Hardware  Based   instrucJons  (VFP)   FP  opts   SIMD ARMv5  à  No  SIMD  ext   Intel  Atom  à  SSSE3  (Supplemental   extensions ARMv7  à  NEON  ext   Streaming  SIMD  Extensions  3)   8  
  • 9.
    Differenze tra architettura GCCFlags Memory –mlittle-endian Alignment –mbig-endian Floating -mfloat-abi= soft | softfp | hard –mfpmath=sse Point -mfpu= vfp | vfpv3-d16 | neon | ... -mavx -maes SIMD -march=armv7-a extensions -mtune=cortex-a8 -msse –DHAVE_NEON=1 9  
  • 10.
    Porting da ARMa X86 Sample 2: HelloNeon 10  
  • 11.
    Utilizzo librerie esterne Step1: Porting librerie esterne Libreria  Esterna   naJva   Codice  naJvo   proprietario   Libreria   compilata  per   Target   Step 2: Porting codice nativo proprietario JNI APP  Android   (Java)   Step 3: Rebuild applicazione 11  
  • 12.
    Porting da ARMa X86 Sample 3: HelloFFmpeg 12  
  • 13.
    KALPA srl Thanks! Mail: massimiliano.torregiani@kalpa.it   Twitter: @maxtorregiani   Linkedin: h/p://www.linkedin.com/pub/massimiliano-­‐torregiani/3/555/550