syswrap: XEN_HVMOP_set_pci_link_route
[valgrind.git] / README.android
blob2feb42b9a5bb01c74914b80ac13b642871a5729b
2 How to cross-compile for Android.  These notes were last updated on 
3 17 Feb 2012, for Valgrind SVN revision 12390/2257.
5 This is known to work at least for :
6 ARM:
7   Android 4.0.3 running on a (rooted, AOSP build) Nexus S.
8   Android 4.0.3 running on Motorola Xoom.
9   Android 4.0.3 running on android arm emulator.
10   Android 4.1   running on android emulator.
11   Android 2.3.4 on Nexus S worked at some time in the past.
13 x86:
14   Android 4.0.3 running on android x86 emulator.
16 mips32:
17   Android 4.1.2 running on android mips emulator.
18   Android 4.2.2 running on android mips emulator.
19   Android 4.3   running on android mips emulator.
20   Android 4.0.4 running on BROADCOM bcm7425
22 On android-arm, GDBserver might insert breaks at wrong addresses.
23 Feedback on this welcome.
25 Other configurations and toolchains might work, but haven't been tested.
26 Feedback is welcome.
29 You need the android-ndk-r6 native development kit.  r6b and r7
30 give a non-completely-working build; see
31 http://code.google.com/p/android/issues/detail?id=23203
32 For the android emulator, the versions needed and how to
33 install them are described in README.android_emulator.
35 Install it somewhere.  Doesn't matter where.  Then do this:
38 # Modify this (obviously).  Note, this "export" command is only done
39 # so as to reduce the amount of typing required.  None of the commands
40 # below read it as part of their operation.
42 export NDKROOT=/path/to/android-ndk-r6
45 # Modify this too.  Tell the build system which Android hardware you
46 # are building for.  It needs to know this so it can compile in
47 # support for the right Android-hw-specific ioctls.  (sigh.)  As with
48 # NDKROOT above, this is merely to avoid repeated typing; none of the
49 # commands read it.
51 # Currently the supported values are:  nexus_s pandaboard
52 # So choose one of the below:
54 export HWKIND=nexus_s         # Samsung Nexus S; also Xoom (for now)
55 export HWKIND=generic         # A generic Android device. eg, Pandaboard
56 export HWKIND=emulator        # Android emulator
58 # Then cd to the root of your Valgrind source tree.
60 cd /path/to/valgrind/source/tree
63 # After this point, you don't need to modify anything; just copy and
64 # paste the commands below.
67 # Set up toolchain paths.
69 # For ARM
70 export AR=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ar
71 export LD=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ld
72 export CC=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
74 # For x86
75 export AR=$NDKROOT/toolchains/x86-4.4.3/prebuilt/linux-x86/bin/i686-android-linux-ar
76 export LD=$NDKROOT/toolchains/x86-4.4.3/prebuilt/linux-x86/bin/i686-android-linux-ld
77 export CC=$NDKROOT/toolchains/x86-4.4.3/prebuilt/linux-x86/bin/i686-android-linux-gcc
79 # For MIPS32
80 export AR=$NDKROOT/toolchains/mipsel-linux-android-4.8/prebuilt/linux-x86_64/bin/mipsel-linux-android-ar
81 export LD=$NDKROOT/toolchains/mipsel-linux-android-4.8/prebuilt/linux-x86_64/bin/mipsel-linux-android-ld
82 export CC=$NDKROOT/toolchains/mipsel-linux-android-4.8/prebuilt/linux-x86_64/bin/mipsel-linux-android-gcc
84 # Do configuration stuff.  Don't mess with the --prefix in the
85 # configure command below, even if you think it's wrong.
86 # You may need to set the --with-tmpdir path to something
87 # different if /sdcard doesn't work on the device -- this is
88 # a known cause of difficulties.
90 # The below re-generates configure, Makefiles, ...
91 # This is not needed if you start from a release tarball.
92 ./autogen.sh
94 # for ARM
95 CPPFLAGS="--sysroot=$NDKROOT/platforms/android-3/arch-arm -DANDROID_HARDWARE_$HWKIND" \
96    CFLAGS="--sysroot=$NDKROOT/platforms/android-3/arch-arm" \
97    ./configure --prefix=/data/local/Inst \
98    --host=armv7-unknown-linux --target=armv7-unknown-linux \
99    --with-tmpdir=/sdcard
100 # note: on android emulator, android-14 platform was also tested and works.
101 # It is not clear what this platform nr really is.
103 # for x86
104 CPPFLAGS="--sysroot=$NDKROOT/platforms/android-9/arch-x86 -DANDROID_HARDWARE_$HWKIND" \
105    CFLAGS="--sysroot=$NDKROOT/platforms/android-9/arch-x86 -fno-pic" \
106    ./configure --prefix=/data/local/Inst \
107    --host=i686-android-linux --target=i686-android-linux \
108    --with-tmpdir=/sdcard
110 # for MIPS32
111 CPPFLAGS="--sysroot=$NDKROOT/platforms/android-18/arch-mips -DANDROID_HARDWARE_$HWKIND" \
112    CFLAGS="--sysroot=$NDKROOT/platforms/android-18/arch-mips" \
113    ./configure --prefix=/data/local/Inst \
114    --host=mipsel-linux-android --target=mipsel-linux-android \
115    --with-tmpdir=/sdcard
117 # At the end of the configure run, a few lines of details
118 # are printed.  Make sure that you see these two lines:
120 # For ARM:
121 #          Platform variant: android
122 #     Primary -DVGPV string: -DVGPV_arm_linux_android=1
124 # For x86:
125 #          Platform variant: android
126 #     Primary -DVGPV string: -DVGPV_x86_linux_android=1
128 # For mips32:
129 #          Platform variant: android
130 #     Primary -DVGPV string: -DVGPV_mips32_linux_android=1
132 # If you see anything else at this point, something is wrong, and
133 # either the build will fail, or will succeed but you'll get something
134 # which won't work.
137 # Build, and park the install tree in `pwd`/Inst
139 make -j2
140 make -j2 install DESTDIR=`pwd`/Inst
143 # To get the install tree onto the device:
144 # (I don't know why it's not "adb push Inst /data/local", but this
145 # formulation does appear to put the result in /data/local/Inst.)
147 adb push Inst /
149 # To run (on the device)
150 /data/local/Inst/bin/valgrind [the usual args etc]
153 # Once you're up and running, a handy modify-V-rebuild-reinstall
154 # command line (on the host, of course) is
156 mq -j2 && mq -j2 install DESTDIR=`pwd`/Inst && adb push Inst /
158 # where 'mq' is an alias for 'make --quiet'.
161 # One common cause of runs failing at startup is the inability of
162 # Valgrind to find a suitable temporary directory.  On the device,
163 # there doesn't seem to be any one location which we always have
164 # permission to write to.  The instructions above use /sdcard.  If
165 # that doesn't work for you, and you're Valgrinding one specific
166 # application which is already installed, you could try using its
167 # temporary directory, in /data/data, for example
168 # /data/data/org.mozilla.firefox_beta.
170 # Using /system/bin/logcat on the device is helpful for diagnosing
171 # these kinds of problems.