forked from limboemu/limbo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.developers
237 lines (178 loc) · 8.26 KB
/
README.developers
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
Limbo PC Emulator (QEMU) for Android
================================================================================
1. What is Limbo?
Limbo is a QEMU-based emulator for Android. It currently supports PC emulation
for Intel x86 architecture.
For more information, instructions, guides, known issues, and downloads visit:
https://github.com/limboemu/limbo
===============================================================================
2. Requirements:
Android SDK
Android NDK r17b/clang
Android Studio (3.1.1 prefered)
Android device with Android OS 5.0 (Lollipop) and above
Linux Desktop pc (Ubuntu prefered)
Make sure you have the following packages installed, if not run:
sudo apt-get install make autoconf automake git python binutils libtool-bin pkg-config flex bison
===============================================================================
3. Known Issues:
https://github.com/limboemu/limbo/issues
===============================================================================
4. Setup Environment
a. Update variables for paths to NDK directories for your Build Environment
in ./limbo-android-lib/src/main/jni/android-config.mak
b. Configure your PATH variable add the NDK Directory so makefile can find ndk-build
Examples:
For bash:
export PATH=$PATH:/home/dev/tools/ndk/android-ndk-r17b
5. Get and Patch libraries
#Make sure you're under the jni directory
cd ./limbo-android-lib/src/main/jni
#Note: if some of these file links don't download with wget use your browser to download them
##### Get QEMU
wget http://download.qemu-project.org/qemu-2.9.1.tar.xz -P /tmp/
tar -xJf /tmp/qemu-2.9.1.tar.xz
mv qemu-2.9.1 qemu
##### GET glib
wget https://ftp.gnome.org/pub/GNOME/sources/glib/2.56/glib-2.56.1.tar.xz -P /tmp/
tar -xJf /tmp/glib-2.56.1.tar.xz
mv glib-2.56.1 glib
##### GET libffi
wget https://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz -P /tmp/
tar -xzf /tmp/libffi-3.2.1.tar.gz
mv libffi-3.2.1 libffi
##### GET pixman
wget https://www.cairographics.org/releases/pixman-0.34.0.tar.gz -P /tmp/
tar -xzf /tmp/pixman-0.34.0.tar.gz
mv pixman-0.34.0 pixman
##### GET SDL2
wget https://www.libsdl.org/release/SDL2-2.0.8.tar.gz -P /tmp/
tar -xzf /tmp/SDL2-2.0.8.tar.gz
mv SDL2-2.0.8 SDL2
After this you should have this structure:
jni
android-device-config
compat
glib
libffi
limbo
patches
pixman
qemu
SDL2
### Apply QEMU patch for Limbo:
cd ./limbo-android-lib/src/main/jni/qemu/
dos2unix ../patches/qemu-2.9.1.patch
patch -p1 < ../patches/qemu-2.9.1.patch
### Apply glib patch for Limbo:
cd ./limbo-android-lib/src/main/jni/glib/
dos2unix ../patches/glib-2.56.1.patch
patch -p1 < ../patches/glib-2.56.1.patch
### For linux/MacOSX make sure the configure script under .../qemu/configure is executable
cd ./limbo-android-lib/src/main/jni/
chmod u+x qemu/configure
### fix script permissions, run:
cd ./limbo-android-lib/src/main/jni/
dos2unix fix_script_permissions.sh
chmod u+x fix_script_permissions.sh
./fix_script_permissions.sh
Optional: To create your own patch for any version:
diff -ru --no-dereference /tmp/qemu-x.x.x . | grep -v '^Only in' > ../patches/qemu-x.x.x.patch
===============================================================================
5. Build
a. To build the NDK part of the app make sure you're under the jni directory:
cd limbo-android-lib/src/main/jni
Make sure you update the android-config.mak file with the NDK path you have installed:
NDK_ROOT = /home/dev/tools/ndk/android-ndk-r17b
b. From Android Studio import BOTH the Android library limbo-android-lib AND the submodule for the guest
architecture you need (x86,arm,ppc,sparc) ie limbo-android-x86.
c. Build the native libraries:
cd limbo-android-lib/src/main/jni:
make clean
To build Limbo x86 Emulator:
make all-<BUILD_TYPE>-<GUEST_ARCH> BUILD_HOST=<EABI>
where:
GUEST_ARCH is the Emulator type: arm, x86
EABI is the Android device type: armeabi-v7a, arm64-v8a, x86, x86_64
BUILD_TYPE is the binary type: release, debug
Examples:
To build Limbo x86 Emulator for ARM phones type:
make all-release-x86 BUILD_HOST=armeabi-v7a
To build Limbo x86 Emulator for ARM64 phones type:
make all-release-x86 BUILD_HOST=arm64-v8a
To build Limbo ARM Emulator for ARM64 phones type:
make all-release-arm BUILD_HOST=arm64-v8a
To build Limbo ARM Emulator for ARM64 phones for debugging purposes type:
make all-debug-arm BUILD_HOST=arm64-v8a
You should now have the following libraries build under:
limbo-android-lib/src/main/jniLibs/<EABI>
libcompat-iconv.so
libcompat-intl.so
libcompat-limbo.so
libcompat-SDL2-ext.so
libglib-2.0.so
liblimbo.so
libpixman-1.so
libSDL2.so
limbo-android-x86/src/main/jniLibs/<EABI>
libqemu-system-xxx.so
d. Build the Android apk for the corresponding guest using Android Studio.
Make sure the *.so libraries are zipped in the final .apk
e. If you want to build the debugging version:
Set variables in Config.java:
debug = true;
debugMode = DebugMode.X86_64; //or any other guest arch
Modify android-config.mak and point to a configuration
with no optimization:
USE_OPTIMIZATION ?= false
Follow the steps to build the native libraries as described above
From Android studio Build> Make Project and Run > Debug
f. To start debugging the native code for a particular guest arch type:
for x86 guest:
make ndk-gdb PKG_NAME=com.limbo.emu.main
for arm guest:
make ndk-gdb PKG_NAME=com.limbo.emu.main.arm
for sparc guest:
make ndk-gdb PKG_NAME=com.limbo.emu.main.sparc
for ppc guest:
make ndk-gdb PKG_NAME=com.limbo.emu.main.ppc
===============================================================================
6. Development
a. Changes pertinent to compatibility with Android/bionic are in the patch files as preprocessor define __ANDROID__
b. Similarly other changes pertinent to LIMBO are tagged with __LIMBO__
c. Important configuration makefiles:
limbo-android-lib/src/main/jni/android-device/config/*.mak
limbo-android-lib/src/main/jni/android-config.mak (for setting up toolchain variables)
limbo-android-lib/src/main/jni/android-qemu-config.mak (for configuring QEMU options)
d. Important Makefiles:
limbo-android-lib/src/main/jni/Android.mk
limbo-android-lib/src/main/jni/Application.mk
limbo-android-lib/src/main/jni/android-setup-toolchain.mak
limbo-android-lib/src/main/jni/android-qemu-build.mak
e. Device specific flags can be found under directory android-device-config/
The default compiler is now clang
You can modify android-generic.mak to use gcc
f. Frontend UI options configuration see: Config.java
===============================================================================
7. Run
a. Installing a full Qwerty keyboard for Android like Hacker's keyboard
from the Google Android store. Make sure you use Transparent theme
and Direct Draw found under Theme settings.
b. Start the Limbo app and choose CPU, Memory (~8-64MB),etc..
c. Choose a bootable disk image(s) for CDRom, Floppy, and a HDD image
d. Start the virtual machine.
e. For more instructions and guides visit:
https://github.com/limboemu/limbo
f. Have fun!
===============================================================================
8. Changelog
See limbo-android-lib/src/main/assets/CHANGELOG for release notes
===============================================================================
9. License
Limbo PC Emulator is released under GPL v2 License.
All icons unders /res are from Gnome Project (GPL v2 License)
See file COPYING under root directory
and LICENSE under limbo-android-lib/src/main/assets
Other source included are released under their own license please view Licenses under each subdirectory
===============================================================================
Endofdoc