docs: fix markdown for COMPILE*md

This commit is contained in:
Nguyen Anh Quynh 2016-04-30 13:03:39 +08:00
parent 9236eb4597
commit 38b4e35b20
2 changed files with 103 additions and 103 deletions

View file

@ -2,8 +2,8 @@ This documentation explains how to compile, install & run Unicorn on MacOSX,
Linux, *BSD, Solaris, Android & iOS. Linux, *BSD, Solaris, Android & iOS.
To compile for Microsoft Windows, see [COMPILE-WINDOWS.md](COMPILE-WINDOWS.md) To compile for Microsoft Windows, see [COMPILE-WINDOWS.md](COMPILE-WINDOWS.md)
----
*-*-*-*-*-*
[0] Dependencies [0] Dependencies
@ -23,46 +23,46 @@ Unicorn requires few dependent packages as follows.
[1] Tailor Unicorn to your need. [1] Tailor Unicorn to your need.
Out of 6 archtitectures supported by Unicorn (Arm, Arm64, M68K, Mips, Sparc, Out of 6 archtitectures supported by Unicorn (Arm, Arm64, M68K, Mips, Sparc,
& X86), if you just need several selected archs, choose which ones you want & X86), if you just need several selected archs, choose which ones you want
to compile in by editing "config.mk" before going to next steps. to compile in by editing "config.mk" before going to next steps.
By default, all 6 architectures are compiled. By default, all 6 architectures are compiled.
The other way of customize Unicorn without having to edit config.mk is to The other way of customize Unicorn without having to edit config.mk is to
pass the desired options on the commandline to ./make.sh. Currently, pass the desired options on the commandline to ./make.sh. Currently,
Unicorn supports 4 options, as follows. Unicorn supports 4 options, as follows.
- UNICORN_ARCHS: specify list of architectures to compiled in. - UNICORN_ARCHS: specify list of architectures to compiled in.
- UNICORN_STATIC: build static library. - UNICORN_STATIC: build static library.
- UNICORN_SHARED: build dynamic (shared) library. - UNICORN_SHARED: build dynamic (shared) library.
- UNICORN_QEMU_FLAGS: specify extra flags for qemu's configure script - UNICORN_QEMU_FLAGS: specify extra flags for qemu's configure script
To avoid editing config.mk for these customization, we can pass their values to To avoid editing config.mk for these customization, we can pass their values to
make.sh, as follows. make.sh, as follows.
$ UNICORN_ARCHS="arm aarch64 x86" ./make.sh $ UNICORN_ARCHS="arm aarch64 x86" ./make.sh
NOTE: on commandline, put these values in front of ./make.sh, not after it. NOTE: on commandline, put these values in front of ./make.sh, not after it.
For each option, refer to docs/README for more details. For each option, refer to docs/README for more details.
[2] Compile and install from source on *nix [2] Compile and install from source on *nix
To build Unicorn on *nix (such as MacOSX, Linux, *BSD, Solaris): To build Unicorn on *nix (such as MacOSX, Linux, *BSD, Solaris):
- To compile for current platform, run: - To compile for current platform, run:
$ ./make.sh $ ./make.sh
- Unicorn requires Python 2.x to compile. If Python 2.x is not the default - Unicorn requires Python 2.x to compile. If Python 2.x is not the default
Python interpreter, ensure that the appropriate option is set: Python interpreter, ensure that the appropriate option is set:
$ UNICORN_QEMU_FLAGS="--python=/path/to/python2" ./make.sh $ UNICORN_QEMU_FLAGS="--python=/path/to/python2" ./make.sh
- To cross-compile Unicorn on 64-bit OS to target 32-bit binary, run: - To cross-compile Unicorn on 64-bit OS to target 32-bit binary, run:
$ ./make.sh nix32 $ ./make.sh nix32
@ -98,50 +98,50 @@ Unicorn requires few dependent packages as follows.
[3] Cross-compile for iOS from Mac OSX. [3] Cross-compile for iOS from Mac OSX.
To cross-compile for iOS (iPhone/iPad/iPod), Mac OSX with XCode installed is required. To cross-compile for iOS (iPhone/iPad/iPod), Mac OSX with XCode installed is required.
- To cross-compile for ArmV7 (iPod 4, iPad 1/2/3, iPhone4, iPhone4S), run: - To cross-compile for ArmV7 (iPod 4, iPad 1/2/3, iPhone4, iPhone4S), run:
$ ./make.sh ios_armv7 $ ./make.sh ios_armv7
- To cross-compile for ArmV7s (iPad 4, iPhone 5C, iPad mini), run: - To cross-compile for ArmV7s (iPad 4, iPhone 5C, iPad mini), run:
$ ./make.sh ios_armv7s $ ./make.sh ios_armv7s
- To cross-compile for Arm64 (iPhone 5S, iPad mini Retina, iPad Air), run: - To cross-compile for Arm64 (iPhone 5S, iPad mini Retina, iPad Air), run:
$ ./make.sh ios_arm64 $ ./make.sh ios_arm64
- To cross-compile for all iDevices (armv7 + armv7s + arm64), run: - To cross-compile for all iDevices (armv7 + armv7s + arm64), run:
$ ./make.sh ios $ ./make.sh ios
Resulted files libunicorn.dylib, libunicorn.a & tests/test* can then Resulted files libunicorn.dylib, libunicorn.a & tests/test* can then
be used on iOS devices. be used on iOS devices.
[4] Cross-compile for Android [4] Cross-compile for Android
To cross-compile for Android (smartphone/tablet), Android NDK is required. To cross-compile for Android (smartphone/tablet), Android NDK is required.
NOTE: Only ARM and ARM64 are currently supported. NOTE: Only ARM and ARM64 are currently supported.
$ NDK=/android/android-ndk-r10e ./make.sh cross-android arm $ NDK=/android/android-ndk-r10e ./make.sh cross-android arm
or or
$ NDK=/android/android-ndk-r10e ./make.sh cross-android arm64 $ NDK=/android/android-ndk-r10e ./make.sh cross-android arm64
Resulted files libunicorn.so, libunicorn.a & tests/test* can then Resulted files libunicorn.so, libunicorn.a & tests/test* can then
be used on Android devices. be used on Android devices.
[5] By default, "cc" (default C compiler on the system) is used as compiler. [5] By default, "cc" (default C compiler on the system) is used as compiler.
- To use "clang" compiler instead, run the command below: - To use "clang" compiler instead, run the command below:
$ ./make.sh clang $ ./make.sh clang
- To use "gcc" compiler instead, run: - To use "gcc" compiler instead, run:
$ ./make.sh gcc $ ./make.sh gcc
@ -155,15 +155,15 @@ Unicorn requires few dependent packages as follows.
[7] Language bindings [7] Language bindings
Look for the bindings under directory bindings/, and refer to README file Look for the bindings under directory bindings/, and refer to README file
of corresponding languages. of corresponding languages.
[8] Unit tests [8] Unit tests
Automated unit tests use the cmocka unit testing framework (https://cmocka.org/). Automated unit tests use the cmocka unit testing framework (https://cmocka.org/).
It can be installed in most Linux distros using the package manager, e.g. It can be installed in most Linux distros using the package manager, e.g.
`sudo yum install libcmocka libcmocka-devel`, or you can easily build and install it from source. `sudo yum install libcmocka libcmocka-devel`, or you can easily build and install it from source.
You can run the tests by running `make test` in the project directory. You can run the tests by running `make test` in the project directory.

View file

@ -1,112 +1,112 @@
We also show steps to cross-compile Unicorn for Microsoft Windows. We also show steps to cross-compile Unicorn for Microsoft Windows.
To compile for *nix OS, see [COMPILE-NIX.md](COMPILE-NIX.md) To compile for *nix OS, see [COMPILE-NIX.md](COMPILE-NIX.md)
---
*-*-*-*-*-*
[0] Dependencies [0] Dependencies
For Windows, cross-compile requires Mingw. Mingw-glib2 is needed. For Windows, cross-compile requires Mingw. Mingw-glib2 is needed.
At the moment, it is confirmed that Unicorn can be compiled either on Ubuntu At the moment, it is confirmed that Unicorn can be compiled either on Ubuntu
or Windows. or Windows.
- On Ubuntu 14.04 64-bit, do: - On Ubuntu 14.04 64-bit, do:
1. Download DEB packages for Mingw64 from: 1. Download DEB packages for Mingw64 from:
https://launchpad.net/~greg-hellings/+archive/ubuntu/mingw-libs/+build/2924251 https://launchpad.net/~greg-hellings/+archive/ubuntu/mingw-libs/+build/2924251
2. To cross-compile for Windows 32-bit, install Mingw with (ignore all the warnings): 2. To cross-compile for Windows 32-bit, install Mingw with (ignore all the warnings):
$ sudo dpkg -i --force-depends mingw64-x86-glib2_2.31.0_all.deb $ sudo dpkg -i --force-depends mingw64-x86-glib2_2.31.0_all.deb
To cross-compile for Windows 64-bit, install Mingw with: To cross-compile for Windows 64-bit, install Mingw with:
$ sudo dpkg -i --force-depends mingw64-x64-glib2_2.31.0_all.deb $ sudo dpkg -i --force-depends mingw64-x64-glib2_2.31.0_all.deb
- On Windows, install MinGW via package MSYS2 at https://msys2.github.io/ - On Windows, install MinGW via package MSYS2 at https://msys2.github.io/
Follow the install instructions and don't forget to update the system packages with: Follow the install instructions and don't forget to update the system packages with:
$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime $ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
Then close MSYS2, run it again from Start menu and update the rest with: Then close MSYS2, run it again from Start menu and update the rest with:
$ pacman -Su $ pacman -Su
Finally, install required toolchain to build C projects. Finally, install required toolchain to build C projects.
- To compile for Windows 32-bit, run: - To compile for Windows 32-bit, run:
$ pacman -S python2 $ pacman -S python2
$ pacman -S make $ pacman -S make
$ pacman -S pkg-config $ pacman -S pkg-config
$ pacman -S mingw-w64-i686-glib2 $ pacman -S mingw-w64-i686-glib2
$ pacman -S mingw-w64-i686-toolchain $ pacman -S mingw-w64-i686-toolchain
- To compile for Windows 64-bit, run: - To compile for Windows 64-bit, run:
$ pacman -S python2 $ pacman -S python2
$ pacman -S make $ pacman -S make
$ pacman -S pkg-config $ pacman -S pkg-config
$ pacman -S mingw-w64-x86_64-glib2 $ pacman -S mingw-w64-x86_64-glib2
$ pacman -S mingw-w64-x86_64-toolchain $ pacman -S mingw-w64-x86_64-toolchain
- For Cygwin, "make", "gcc-core", "pkg-config", "libpcre-devel", "zlib-devel" - For Cygwin, "make", "gcc-core", "pkg-config", "libpcre-devel", "zlib-devel"
and "libglib2.0-devel" are needed. and "libglib2.0-devel" are needed.
If apt-cyg is available, you can install these with: If apt-cyg is available, you can install these with:
$ apt-cyg install make gcc-core pkg-config libpcre-devel zlib-devel libglib2.0-devel $ apt-cyg install make gcc-core pkg-config libpcre-devel zlib-devel libglib2.0-devel
[1] Tailor Unicorn to your need. [1] Tailor Unicorn to your need.
Out of 6 archtitectures supported by Unicorn (Arm, Arm64, M68K, Mips, Sparc, Out of 6 archtitectures supported by Unicorn (Arm, Arm64, M68K, Mips, Sparc,
& X86), if you just need several selected archs, choose which ones you want & X86), if you just need several selected archs, choose which ones you want
to compile in by editing "config.mk" before going to next steps. to compile in by editing "config.mk" before going to next steps.
By default, all 6 architectures are compiled. By default, all 6 architectures are compiled.
The other way of customize Unicorn without having to edit config.mk is to The other way of customize Unicorn without having to edit config.mk is to
pass the desired options on the commandline to ./make.sh. Currently, pass the desired options on the commandline to ./make.sh. Currently,
Unicorn supports 4 options, as follows. Unicorn supports 4 options, as follows.
- UNICORN_ARCHS: specify list of architectures to compiled in. - UNICORN_ARCHS: specify list of architectures to compiled in.
- UNICORN_STATIC: build static library. - UNICORN_STATIC: build static library.
- UNICORN_SHARED: build dynamic (shared) library. - UNICORN_SHARED: build dynamic (shared) library.
- UNICORN_QEMU_FLAGS: specify extra flags for qemu's configure script - UNICORN_QEMU_FLAGS: specify extra flags for qemu's configure script
To avoid editing config.mk for these customization, we can pass their values to To avoid editing config.mk for these customization, we can pass their values to
make.sh, as follows. make.sh, as follows.
$ UNICORN_ARCHS="arm aarch64 x86" ./make.sh $ UNICORN_ARCHS="arm aarch64 x86" ./make.sh
NOTE: on commandline, put these values in front of ./make.sh, not after it. NOTE: on commandline, put these values in front of ./make.sh, not after it.
For each option, refer to docs/README for more details. For each option, refer to docs/README for more details.
[2] Compile from source on Windows - with MinGW (MSYS2) [2] Compile from source on Windows - with MinGW (MSYS2)
To compile with MinGW, install MSYS2 as instructed in the first section. To compile with MinGW, install MSYS2 as instructed in the first section.
Then, build Unicorn with the next steps: Then, build Unicorn with the next steps:
- To compile Windows 32-bit binary with MinGW, run: - To compile Windows 32-bit binary with MinGW, run:
$ ./make.sh cross-win32 $ ./make.sh cross-win32
- To compile Windows 64-bit binary with MinGW, run: - To compile Windows 64-bit binary with MinGW, run:
$ ./make.sh cross-win64 $ ./make.sh cross-win64
Resulted files unicorn.dll, unicorn.lib & samples/sample*.exe can then Resulted files unicorn.dll, unicorn.lib & samples/sample*.exe can then
be used on Windows machine. be used on Windows machine.
To run sample_x86.exe on Windows 32-bit, you need the following files: To run sample_x86.exe on Windows 32-bit, you need the following files:
unicorn.dll unicorn.dll
%MSYS2%\mingw32\bin\libiconv-2.dll %MSYS2%\mingw32\bin\libiconv-2.dll
@ -115,7 +115,7 @@ To compile for *nix OS, see [COMPILE-NIX.md](COMPILE-NIX.md)
%MSYS2%\mingw32\bin\libgcc_s_dw2-1.dll %MSYS2%\mingw32\bin\libgcc_s_dw2-1.dll
%MSYS2%\mingw32\bin\libwinpthread-1.dll %MSYS2%\mingw32\bin\libwinpthread-1.dll
To run sample_x86.exe on Windows 64-bit, you need the following files: To run sample_x86.exe on Windows 64-bit, you need the following files:
unicorn.dll unicorn.dll
%MSYS2%\mingw64\bin\libiconv-2.dll %MSYS2%\mingw64\bin\libiconv-2.dll
@ -128,19 +128,19 @@ To compile for *nix OS, see [COMPILE-NIX.md](COMPILE-NIX.md)
[3] Compile and install from source on Cygwin [3] Compile and install from source on Cygwin
To build Unicorn on Cygwin, run: To build Unicorn on Cygwin, run:
$ ./make.sh $ ./make.sh
After compiling, install Unicorn with: After compiling, install Unicorn with:
$ ./make.sh install $ ./make.sh install
Resulted files cygunicorn.dll, libunicorn.dll.a and libunicorn.a can be Resulted files cygunicorn.dll, libunicorn.dll.a and libunicorn.a can be
used on Cygwin but not native Windows. used on Cygwin but not native Windows.
NOTE: The core framework installed by "./make.sh install" consist of NOTE: The core framework installed by "./make.sh install" consist of
following files: following files:
/usr/include/unicorn/*.h /usr/include/unicorn/*.h
/usr/bin/cygunicorn.dll /usr/bin/cygunicorn.dll
@ -151,50 +151,50 @@ To compile for *nix OS, see [COMPILE-NIX.md](COMPILE-NIX.md)
[4] Cross-compile for Windows from *nix [4] Cross-compile for Windows from *nix
To cross-compile for Windows, Linux & gcc-mingw-w64-i686 (and also gcc-mingw-w64-x86-64 To cross-compile for Windows, Linux & gcc-mingw-w64-i686 (and also gcc-mingw-w64-x86-64
for 64-bit binaries) are required. for 64-bit binaries) are required.
- To cross-compile Windows 32-bit binary, simply run: - To cross-compile Windows 32-bit binary, simply run:
$ ./make.sh cross-win32 $ ./make.sh cross-win32
- To cross-compile Windows 64-bit binary, run: - To cross-compile Windows 64-bit binary, run:
$ ./make.sh cross-win64 $ ./make.sh cross-win64
Resulted files unicorn.dll, unicorn.lib & samples/sample*.exe can then Resulted files unicorn.dll, unicorn.lib & samples/sample*.exe can then
be used on Windows machine. be used on Windows machine.
To run sample_x86.exe on Windows 32-bit, you need the following files: To run sample_x86.exe on Windows 32-bit, you need the following files:
unicorn.dll unicorn.dll
/usr/i686-w64-mingw32/sys-root/mingw/bin/libglib-2.0-0.dll /usr/i686-w64-mingw32/sys-root/mingw/bin/libglib-2.0-0.dll
/usr/lib/gcc/i686-w64-mingw32/4.8/libgcc_s_sjlj-1.dll /usr/lib/gcc/i686-w64-mingw32/4.8/libgcc_s_sjlj-1.dll
/usr/i686-w64-mingw32/lib/libwinpthread-1.dll /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
To run sample_x86.exe on Windows 64-bit, you need the following files: To run sample_x86.exe on Windows 64-bit, you need the following files:
unicorn.dll unicorn.dll
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libglib-2.0-0.dll /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libglib-2.0-0.dll
/usr/lib/gcc/x86_64-w64-mingw32/4.8/libgcc_s_sjlj-1.dll /usr/lib/gcc/x86_64-w64-mingw32/4.8/libgcc_s_sjlj-1.dll
/usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll
Then run either "sample_x86.exe -32" or "sample_x86.exe -64" to test emulators for X86 32-bit or X86 64-bit. Then run either "sample_x86.exe -32" or "sample_x86.exe -64" to test emulators for X86 32-bit or X86 64-bit.
For other architectures, run "sample_xxx.exe" found in the same directory. For other architectures, run "sample_xxx.exe" found in the same directory.
[5] Language bindings [5] Language bindings
Look for the bindings under directory bindings/, and refer to README file Look for the bindings under directory bindings/, and refer to README file
of corresponding languages. of corresponding languages.
[6] Unit tests [6] Unit tests
Automated unit tests use the cmocka unit testing framework (https://cmocka.org/). Automated unit tests use the cmocka unit testing framework (https://cmocka.org/).
It can be installed in most Linux distros using the package manager, e.g. It can be installed in most Linux distros using the package manager, e.g.
`sudo yum install libcmocka libcmocka-devel`, or you can easily build and install it from source. `sudo yum install libcmocka libcmocka-devel`, or you can easily build and install it from source.
You can run the tests by running `make test` in the project directory. You can run the tests by running `make test` in the project directory.