Sync docs from wiki and remove cmake.sh
This commit is contained in:
@ -70,12 +70,9 @@ def copy_sources():
|
|||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../*.[ch]")))
|
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../*.[ch]")))
|
||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../*.mk")))
|
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../*.mk")))
|
||||||
|
|
||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../Makefile")))
|
|
||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../LICENSE*")))
|
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../LICENSE*")))
|
||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../README.md")))
|
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../README.md")))
|
||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../*.TXT")))
|
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../*.TXT")))
|
||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../RELEASE_NOTES")))
|
|
||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../cmake.sh")))
|
|
||||||
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../CMakeLists.txt")))
|
src.extend(glob.glob(os.path.join(ROOT_DIR, "../../CMakeLists.txt")))
|
||||||
|
|
||||||
for filename in src:
|
for filename in src:
|
||||||
|
40
cmake.sh
40
cmake.sh
@ -1,40 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Unicorn Emulator Engine (www.unicorn-engine.org)
|
|
||||||
# Usage: cmake.sh [mingw|msys] [x86] [arm] [aarch64] [m68k] [mips] [sparc] [ppc] [riscv]
|
|
||||||
# By chenhuitao 2019
|
|
||||||
|
|
||||||
# FLAGS="-DCMAKE_BUILD_TYPE=Release"
|
|
||||||
FLAGS="-DCMAKE_BUILD_TYPE=Debug"
|
|
||||||
TOOLCHAIN=""
|
|
||||||
GENERATOR="Unix Makefiles"
|
|
||||||
CMAKE="cmake"
|
|
||||||
COMPILER=""
|
|
||||||
|
|
||||||
# process arguments
|
|
||||||
case "$1" in
|
|
||||||
"mingw" )
|
|
||||||
TOOLCHAIN="-DCMAKE_TOOLCHAIN_FILE=../mingw-w64.cmake"
|
|
||||||
shift
|
|
||||||
UNICORN_ARCH="${*}";;
|
|
||||||
"msys" )
|
|
||||||
shift
|
|
||||||
UNICORN_ARCH="${*}"
|
|
||||||
CMAKE="/mingw64/bin/cmake"
|
|
||||||
GENERATOR="MSYS Makefiles";;
|
|
||||||
* )
|
|
||||||
UNICORN_ARCH="${*}";;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -n "${COMPILER}" ]; then
|
|
||||||
TOOLCHAIN="${TOOLCHAIN} -DCMAKE_C_COMPILER=${COMPILER}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "${UNICORN_ARCH}" ]; then
|
|
||||||
${CMAKE} "${FLAGS}" ${TOOLCHAIN} -G "${GENERATOR}" ..
|
|
||||||
else
|
|
||||||
${CMAKE} "${FLAGS}" ${TOOLCHAIN} "-DUNICORN_ARCH=${UNICORN_ARCH}" -G "${GENERATOR}" ..
|
|
||||||
fi
|
|
||||||
|
|
||||||
# now build
|
|
||||||
make -j8
|
|
108
docs/COMPILE.md
108
docs/COMPILE.md
@ -1,55 +1,56 @@
|
|||||||
This HOWTO introduces how to build Unicorn2 natively on Linux/Mac/Windows,
|
This HOWTO introduces how to build Unicorn2 natively on Linux/Mac/Windows or cross-build to Windows from Linux host.
|
||||||
or cross-build to Windows from Linux host.
|
|
||||||
|
|
||||||
---
|
## Native build on Linux/macOS
|
||||||
### Native build on Linux/MacOS
|
|
||||||
|
|
||||||
This builds Unicorn2 on Linux/MacOS. The output is `libunicorn.so` or `libunicorn.dylib`, respectively.
|
This builds Unicorn2 on Linux/macOS. Note that this also applies to Apple Silicon M1 users.
|
||||||
|
|
||||||
- Require `cmake` & `pkg-config` packages (besides `gcc`/`clang` compiler):
|
- Install `cmake` and `pkg-config` with your favorite package manager:
|
||||||
|
|
||||||
```
|
Ubuntu:
|
||||||
|
|
||||||
|
``` bash
|
||||||
$ sudo apt install cmake pkg-config
|
$ sudo apt install cmake pkg-config
|
||||||
```
|
```
|
||||||
|
|
||||||
|
macOS:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ brew install cmake pkg-config
|
||||||
|
```
|
||||||
|
|
||||||
- Build with the following commands.
|
- Build with the following commands.
|
||||||
|
|
||||||
```
|
```bash
|
||||||
$ mkdir build; cd build
|
$ mkdir build; cd build
|
||||||
$ ../cmake.sh
|
$ cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||||
|
$ make
|
||||||
```
|
```
|
||||||
|
|
||||||
Then run the sample `sample_riscv` with:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ ./sample_riscv
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
### Native build on Windows, with MSVC
|
### Native build on Windows, with MSVC
|
||||||
|
|
||||||
This builds Unicorn2 on Windows, using Microsoft MSVC compiler. The output is `unicorn.dll`.
|
This builds Unicorn2 on Windows, using Microsoft MSVC compiler.
|
||||||
|
|
||||||
- Require `cmake` & `Microsoft Visual Studio`.
|
- Require `cmake` & `Microsoft Visual Studio`.
|
||||||
|
|
||||||
- From Visual Studio Command Prompt, build with the following commands.
|
- From Visual Studio Command Prompt, build with the following commands.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir build; cd build
|
||||||
|
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release
|
||||||
|
nmake
|
||||||
|
```
|
||||||
|
|
||||||
|
Note, other generators like `Ninja` and `Visual Studio 16 2019` would also work.
|
||||||
|
|
||||||
```
|
```
|
||||||
mkdir build; cd build
|
mkdir build; cd build
|
||||||
../nmake.sh
|
cmake .. -G "Visual Studio 16 2019" -A "win32" -DCMAKE_BUILD_TYPE=Release
|
||||||
|
msbuild unicorn.sln -p:Plaform=Win32 -p:Configuration=Release
|
||||||
```
|
```
|
||||||
|
|
||||||
Then run the sample `sample_riscv` with:
|
|
||||||
|
|
||||||
```
|
|
||||||
sample_riscv.exe
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Cross build from Linux host to Windows, with Mingw
|
### Cross build from Linux host to Windows, with Mingw
|
||||||
|
|
||||||
This cross-builds Unicorn2 from **Linux host** to Windows, using `Mingw` compiler. The output is `libunicorn.dll`
|
This cross-builds Unicorn2 from **Linux host** to Windows, using `Mingw` compiler.
|
||||||
|
|
||||||
- Install required package.
|
- Install required package.
|
||||||
|
|
||||||
@ -61,31 +62,17 @@ $ sudo apt install mingw-w64-x86-64-dev
|
|||||||
|
|
||||||
```
|
```
|
||||||
$ mkdir build; cd build
|
$ mkdir build; cd build
|
||||||
$ ../cmake.sh mingw
|
$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../mingw64-w64.cmake
|
||||||
|
$ make
|
||||||
```
|
```
|
||||||
|
|
||||||
The resulted `sample_riscv.exe` can be run with `libunicorn.dll`, and some dependecies DLLs
|
|
||||||
already provided in `bin/` directory.
|
|
||||||
|
|
||||||
To prepare for `sample_riscv.exe`, do:
|
|
||||||
|
|
||||||
```
|
|
||||||
cp libunicorn.dll ../bin
|
|
||||||
cp sample_riscv.exe ../bin
|
|
||||||
```
|
|
||||||
|
|
||||||
Then inside the `bin/` directory, you can run `sample_riscv.exe` (from `CMD.exe` prompt, for example)
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Native build on Windows host, with MSYS2/Mingw
|
### Native build on Windows host, with MSYS2/Mingw
|
||||||
|
|
||||||
This builds Unicorn2 on **Windows host**, using **MSYS2/Mingw** compiler. The output is `libunicorn.dll`
|
This builds Unicorn2 on **Windows host**, using **MSYS2/Mingw** compiler.
|
||||||
|
|
||||||
This requires MSYS2 to be installed on Windows machine. You need to download & install MSYS2 from https://www.msys2.org.
|
This requires MSYS2 to be installed on the Windows machine. You need to download & install MSYS2 from https://www.msys2.org.
|
||||||
|
|
||||||
Then from MSYS2 console, install required packages:
|
Then from MSYS2 console, install packages below:
|
||||||
|
|
||||||
```
|
```
|
||||||
pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake
|
pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake
|
||||||
@ -95,37 +82,26 @@ pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake
|
|||||||
|
|
||||||
```
|
```
|
||||||
mkdir build; cd build
|
mkdir build; cd build
|
||||||
../cmake.sh msys
|
/mingw64/bin/cmake .. -G "MSYS Makefiles" -DCMAKE_C_COMPILER=/mingw64/bin/gcc.exe -DCMAKE_MAKE_PROGRAM=/mingw64/bin/mingw32-make.exe -DCMAKE_AR=/mingw64/bin/ar.exe -DUNICORN_ARCH=x86
|
||||||
|
mingw32-make
|
||||||
```
|
```
|
||||||
|
|
||||||
The resulted `sample_riscv.exe` can be run with `libunicorn.dll`, and some dependecies DLLs
|
Note that the way to build on MSYS changes as time goes, please keep in mind that always use the cmake shipped with mingw64 and choose MSYS Makefiles.
|
||||||
already provided in `bin/` directory.
|
|
||||||
|
|
||||||
To prepare for `sample_riscv.exe`, do:
|
### Cross build from Linux host to other architectures
|
||||||
|
|
||||||
```
|
This cross-builds Unicorn2 from **Linux host** to other architectures, using a cross compiler.
|
||||||
cp libunicorn.dll ../bin
|
|
||||||
cp sample_riscv.exe ../bin
|
|
||||||
```
|
|
||||||
|
|
||||||
Then inside the `bin/` directory, you can run `sample_riscv.exe` (from `CMD.exe` prompt, for example)
|
- Install cross compiler package. For example, cross-compile to ARM requires the below command.
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Cross build from Linux host to other arch
|
|
||||||
|
|
||||||
This cross-builds Unicorn2 from **Linux host** to other arch, using cross compiler. The output is `libunicorn.so`
|
|
||||||
|
|
||||||
- Install cross compiler package. For example, cross compile to ARM require below command.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo apt install gcc-arm-linux-gnueabihf
|
$ sudo apt install gcc-arm-linux-gnueabihf
|
||||||
```
|
```
|
||||||
|
|
||||||
- Build Unicorn and samples with the following commands (note that you need to specify compiler with CC).
|
- Build Unicorn and samples with the following commands. The compiler name differs according to your targets.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ mkdir build; cd build
|
$ mkdir build; cd build
|
||||||
$ CC=arm-linux-gnueabihf-gcc ../cmake.sh
|
$ cmake .. -DCMAKE_C_COMPILER=gcc-arm-linux-gnueabihf
|
||||||
|
$ make
|
||||||
```
|
```
|
||||||
|
40
nmake.bat
40
nmake.bat
@ -1,40 +0,0 @@
|
|||||||
:: Unicorn Emulator Engine
|
|
||||||
:: Build Unicorn libs on Windows with CMake & Nmake
|
|
||||||
:: Usage: nmake.bat [x86 arm aarch64 m68k mips sparc riscv], default build all.
|
|
||||||
:: By Huitao Chen, 2019
|
|
||||||
|
|
||||||
@echo off
|
|
||||||
|
|
||||||
set flags="-DCMAKE_BUILD_TYPE=Release"
|
|
||||||
|
|
||||||
set allparams=
|
|
||||||
|
|
||||||
:loop
|
|
||||||
set str=%1
|
|
||||||
if "%str%"=="" (
|
|
||||||
goto end
|
|
||||||
)
|
|
||||||
set allparams=%allparams% %str%
|
|
||||||
shift /0
|
|
||||||
goto loop
|
|
||||||
|
|
||||||
:end
|
|
||||||
if "%allparams%"=="" (
|
|
||||||
goto eof
|
|
||||||
)
|
|
||||||
:: remove left, right blank
|
|
||||||
:intercept_left
|
|
||||||
if "%allparams:~0,1%"==" " set "allparams=%allparams:~1%" & goto intercept_left
|
|
||||||
|
|
||||||
:intercept_right
|
|
||||||
if "%allparams:~-1%"==" " set "allparams=%allparams:~0,-1%" & goto intercept_right
|
|
||||||
|
|
||||||
:eof
|
|
||||||
|
|
||||||
if "%allparams%"=="" (
|
|
||||||
cmake "%flags%" -G "NMake Makefiles" ..
|
|
||||||
) else (
|
|
||||||
cmake "%flags%" "-DUNICORN_ARCH=%allparams%" -G "NMake Makefiles" ..
|
|
||||||
)
|
|
||||||
|
|
||||||
nmake
|
|
Reference in New Issue
Block a user