xmake-gradle
A gradle plugin that integrates xmake seamlessly
## Introduction ([中文](/README_zh.md))
xmake-gradle is a gradle plugin that integrates xmake seamlessly.
If you want to know more, please refer to:
* [Documents](https://xmake.io/#/home)
* [HomePage](https://xmake.io)
* [Github](https://github.com/xmake-io/xmake-gradle)
* [Gitee](https://gitee.com/tboox/xmake-gradle)
* [GradlePlugin](https://plugins.gradle.org/plugin/org.tboox.gradle-xmake-plugin)
## Prerequisites
XMake installed on the system. Available [here](https://github.com/xmake-io/xmake).
## Apply the plugin
### plugins DSL
```
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.2.3'
}
```
### Legacy plugin application
```
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'org.tboox:gradle-xmake-plugin:1.2.3'
}
repositories {
mavenCentral()
}
}
apply plugin: "org.tboox.gradle-xmake-plugin"
```
## Configuation
### Simplest Example
We add `xmake.lua` to `projectdir/jni/xmake.lua` and enable xmake in build.gradle.
#### build.gradle
```
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
```
#### JNI
The JNI project structure:
```
projectdir
- src
- main
- java
- jni
- xmake.lua
- *.cpp
```
xmake.lua:
```lua
add_rules("mode.debug", "mode.release")
target("nativelib")
set_kind("shared")
add_files("nativelib.cc")
```
### More Gradle Configuations
```
android {
defaultConfig {
externalNativeBuild {
xmake {
// append the global cflags (optional)
cFlags "-DTEST"
// append the global cppflags (optional)
cppFlags "-DTEST", "-DTEST2"
// switch the build mode to `debug` for `xmake f -m debug` (optional)
buildMode "debug"
// set abi filters (optional), e.g. armeabi, armeabi-v7a, arm64-v8a, x86, x86_64
// we can also get abiFilters from defaultConfig.ndk.abiFilters
abiFilters "armeabi-v7a", "arm64-v8a"
// set the built targets
//targets "xxx", "yyy"
}
}
}
externalNativeBuild {
xmake {
// enable xmake and set xmake.lua project file path
path "jni/xmake.lua"
// enable verbose output (optional), e.g. verbose, normal
logLevel "verbose"
// set c++stl (optional), e.g. c++_static/c++_shared, gnustl_static/gnustl_shared, stlport_static/stlport_shared
stl "c++_shared"
// set the given xmake program path (optional)
// program /usr/local/bin/xmake
// disable stdc++ library (optional)
// stdcxx false
// set the given ndk directory path (optional)
// ndk "/Users/ruki/files/android-ndk-r20b/"
// set sdk version of ndk (optional)
// sdkver 21
}
}
}
```
## Build
### Build JNI and generate apk
The `xmakeBuild` will be injected to `assemble` task automatically if the gradle-xmake-plugin has been applied.
```console
$ ./gradlew app:assembleDebug
> Task :nativelib:xmakeConfigureForArm64
> Task :nativelib:xmakeBuildForArm64
>> xmake build
[ 50%]: ccache compiling.debug nativelib.cc
[ 75%]: linking.debug libnativelib.so
[100%]: build ok!
>> install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/arm64-v8a
> Task :nativelib:xmakeConfigureForArmv7
> Task :nativelib:xmakeBuildForArmv7
>> xmake build
[ 50%]: ccache compiling.debug nativelib.cc
[ 75%]: linking.debug libnativelib.so
[100%]: build ok!
>> install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/armeabi-v7a
> Task :nativelib:preBuild
> Task :nativelib:assemble
> Task :app:assembleDebug
```
### Force to rebuild JNI
```console
$ ./gradlew nativelib:xmakeRebuild
```
## Development
### Build Plugins
```console
$ ./gradlew gradle-xmake-plugin:assemble
```
### Publish Plugins
see [https://guides.gradle.org/publishing-plugins-to-gradle-plugin-portal/](https://guides.gradle.org/publishing-plugins-to-gradle-plugin-portal/)
```console
$ ./gradlew gradle-xmake-plugin:publishPlugins
```
## Contacts
* Email:[waruqi@gmail.com](mailto:waruqi@gmail.com)
* Homepage:[xmake.io](https://xmake.io)
* Community
- [Chat on Reddit](https://www.reddit.com/r/xmake/)
- [Chat on Telegram](https://t.me/tbooxorg)
- [Chat on Discord](https://discord.gg/xmake)
- Chat on QQ Group: 343118190, 662147501
* Source Code:[GitHub](https://github.com/xmake-io/xmake), [Gitee](https://gitee.com/tboox/xmake)
* WeChat Public: tboox-os
## Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/xmake#backer)]