geode/loader/dobby/docs/build-documentation.md

116 lines
2.7 KiB
Markdown
Raw Normal View History

2022-07-30 12:24:03 -04:00
# Build
## Cmake build options
```
option(DOBBY_GENERATE_SHARED "Build shared library" ON)
option(DOBBY_DEBUG "Enable debug logging" ON)
option(NearBranch "Enable Near Branch Trampoline" ON)
option(DynamicBinaryInstrument "Enable Dynamic Binary Instrument" ON)
option(FullFloatingPointRegisterPack "Save and pack all floating-point registers" OFF)
option(Plugin.SymbolResolver "Resolve symbol by [DobbySymbolResolver] " ON)
option(Plugin.GlobalOffsetTableHook "Global Offset Table Hook by [DobbyGlobalOffsetTableReplace] " ON)
option(Plugin.LinkerLoadCallback "Register image load callback " OFF)
```
## Build script
refer: [build-workspace/auto-build.sh](build-workspace/auto-build.sh)
## Build for host
```
cd Dobby && mkdir build_for_host && cd build_for_host
cmake ..
make -j4
```
## Build for iOS / macOS
#### Manual build for macOS X64 host
```
cd Dobby && mkdir build_for_macos_x64 && cd build_for_macos_x64
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
make -j4
```
#### Manual build for iOS [ARM/ARM64]
```
cd Dobby && mkdir build_for_ios_arm64 && cd build_for_ios_arm64
cmake .. -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_SYSTEM_PROCESSOR=arm64 -DCMAKE_OSX_DEPLOYMENT_TARGET=9.3
make -j4
```
if you want generate Xcode Project, just replace with `cmake -G Xcode`.
## Build for Android
#### Manual build for Android ARM64
```
export ANDROID_NDK=/Users/jmpews/Library/Android/sdk/ndk-bundle
cd Dobby && mkdir build_for_android_arm64 && cd build_for_android_arm64
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_ARCH_ABI="arm64-v8a" -DCMAKE_ANDROID_NDK=$ANDROID_NDK -DCMAKE_SYSTEM_VERSION=21 -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang
make -j4
```
#### Manual build for Android ARM
```
export ANDROID_NDK=/Users/jmpews/Library/Android/sdk/ndk-bundle
cd Dobby && mkdir build_for_android_arm && cd build_for_android_arm
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_ARCH_ABI="armeabi-v7a" -DCMAKE_ANDROID_NDK=$ANDROID_NDK -DCMAKE_SYSTEM_VERSION=16 -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang
make -j4
```
#### Android Studio CMake
```
if(NOT TARGET dobby)
set(DOBBY_DIR /Users/jmpews/Workspace/Project.wrk/Dobby)
macro(SET_OPTION option value)
set(${option} ${value} CACHE INTERNAL "" FORCE)
endmacro()
SET_OPTION(DOBBY_DEBUG OFF)
SET_OPTION(DOBBY_GENERATE_SHARED OFF)
add_subdirectory(${DOBBY_DIR} dobby)
get_property(DOBBY_INCLUDE_DIRECTORIES
TARGET dobby
PROPERTY INCLUDE_DIRECTORIES)
include_directories(
.
${DOBBY_INCLUDE_DIRECTORIES}
$<TARGET_PROPERTY:dobby,INCLUDE_DIRECTORIES>
)
endif()
add_library(native-lib SHARED
${DOBBY_DIR}/example/android_common_api.cc
native-lib.cpp)
```