# xmake-gradle **Repository Path**: jqmtony/xmake-gradle ## Basic Information - **Project Name**: xmake-gradle - **Description**: A gradle plugin that integrates xmake seamlessly - **Primary Language**: Groovy - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://xmake.io - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2023-12-26 - **Last Updated**: 2023-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
## 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.1.5' } ``` ### Legacy plugin application ``` buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath 'org.tboox:gradle-xmake-plugin:1.1.5' } 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, warning, 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:[tboox.org](https://tboox.org) * Community:[/r/tboox on reddit](https://www.reddit.com/r/tboox/) * ChatRoom:[Char on telegram](https://t.me/tbooxorg), [Chat on gitter](https://gitter.im/tboox/tboox?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) * QQ Group: 343118190(full), 662147501 * Wechat Public: tboox-os ## Backers Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/xmake#backer)]