|
|
@@ -1,24 +1,24 @@
|
|
|
-## Sponsor
|
|
|
+## Supporting the project
|
|
|
|
|
|
-🙏 The xmake projects is a personal open source projects, their development need your help. If you would like to support the development of xmake, welcome to donate to us.
|
|
|
+Support this project by becoming a sponsor. Your logo will show up here with a link to your website. 🙏
|
|
|
|
|
|
-👉 [Sponsor Page](https://xmake.io/#/about/sponsor)
|
|
|
+- [Become a sponsor](https://xmake.io/#/about/sponsor)
|
|
|
|
|
|
-## Technical support
|
|
|
+<a href="https://opencollective.com/xmake#sponsors" target="_blank"><img src="https://opencollective.com/xmake/sponsors.svg?width=890"></a>
|
|
|
|
|
|
-You can also consider sponsoring us to get extra technical support services via [Github sponsor program](https://github.com/sponsors/waruqi),
|
|
|
-then you can get access to [xmake-io/technical-support](https://github.com/xmake-io/technical-support) repository to get more consulting related information.
|
|
|
+## Introduction
|
|
|
|
|
|
-- [x] Handling Issues with higher priority
|
|
|
-- [x] One-to-one technical consulting service
|
|
|
-- [x] Review your xmake.lua and provide suggestions for improvement
|
|
|
+xmake is a lightweight cross-platform build utility based on Lua. It uses xmake.lua to maintain project builds. Compared with makefile/CMakeLists.txt, the configuration syntax is more concise and intuitive. It is very friendly to novices and can quickly get started in a short time. Let users focus more on actual project development.
|
|
|
|
|
|
-## Who is using Xmake?
|
|
|
+It can compile the project directly like Make/Ninja, or generate project files like CMake/Meson, and it also has a built-in package management system to help users solve the integrated use of C/C++ dependent libraries.
|
|
|
|
|
|
-If you are using xmake, please click to edit [this page](https://github.com/xmake-io/xmake-docs/blob/master/about/who_is_using_xmake.md) to submit information to the following list to let more users know how many users are using xmake.
|
|
|
+```
|
|
|
+Xmake = Build backend + Project Generator + Package Manager
|
|
|
+```
|
|
|
|
|
|
-This also let users to use xmake more confidently, and we will also have more motivation to maintain it continuously,
|
|
|
-so that the xmake project and the community will grow stronger.
|
|
|
+If you want to know more, please refer to: [Documents](https://xmake.io/#/getting_started), [Github](https://github.com/xmake-io/xmake) and [Gitee](https://gitee.com/tboox/xmake) and also welcome to join our [community](https://xmake.io/#/about/contact).
|
|
|
+
|
|
|
+
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
@@ -115,21 +115,86 @@ The test project: [xmake-core](https://github.com/xmake-io/xmake/tree/master/cor
|
|
|
|
|
|
<img src="https://xmake.io/assets/img/index/package_arch.png" width="650px" />
|
|
|
|
|
|
+### Supported package repositories
|
|
|
+
|
|
|
+* Official package repository [xmake-repo](https://github.com/xmake-io/xmake-repo) (tbox >1.6.1)
|
|
|
+* Official package manager [Xrepo](https://github.com/xmake-io/xrepo)
|
|
|
+* [User-built repositories](https://xmake.io/#/package/remote_package?id=using-self-built-private-package-repository)
|
|
|
+* Conan (conan::openssl/1.1.1g)
|
|
|
+* Conda (conda::libpng 1.3.67)
|
|
|
+* Vcpkg (vcpkg:ffmpeg)
|
|
|
+* Homebrew/Linuxbrew (brew::pcre2/libpcre2-8)
|
|
|
+* Pacman on archlinux/msys2 (pacman::libcurl)
|
|
|
+* Apt on ubuntu/debian (apt::zlib1g-dev)
|
|
|
+* Clib (clib::clibs/[email protected])
|
|
|
+* Dub (dub::log 0.4.3)
|
|
|
+* Portage on Gentoo/Linux (portage::libhandy)
|
|
|
+* Nimble for nimlang (nimble::zip >1.3)
|
|
|
+
|
|
|
+### Package management features
|
|
|
+
|
|
|
+* The official repository provides nearly 500+ packages, one-click compilation on all platforms
|
|
|
+* Full platform package support, support for cross-compiled dependent package integration
|
|
|
+* Support package virtual environment, `xrepo env shell`
|
|
|
+* Precompiled package acceleration for windows
|
|
|
+* Support self-built package repositories, private repository deployment
|
|
|
+* Third-party package repository support, such as: vcpkg, conan, conda, etc.
|
|
|
+* Support to pull using remote toolchain automatically
|
|
|
+* Support to lock package dependency
|
|
|
+
|
|
|
## Supported platforms
|
|
|
|
|
|
* Windows (x86, x64)
|
|
|
-* macOS (i386, x86_64)
|
|
|
+* macOS (i386, x86_64, arm64)
|
|
|
* Linux (i386, x86_64, cross-toolchains ..)
|
|
|
* *BSD (i386, x86_64)
|
|
|
* Android (x86, x86_64, armeabi, armeabi-v7a, arm64-v8a)
|
|
|
* iOS (armv7, armv7s, arm64, i386, x86_64)
|
|
|
* WatchOS (armv7k, i386)
|
|
|
+* AppleTVOS (armv7, arm64, i386, x86_64)
|
|
|
* MSYS (i386, x86_64)
|
|
|
-* MinGW (i386, x86_64)
|
|
|
+* MinGW (i386, x86_64, arm, arm64)
|
|
|
* Cygwin (i386, x86_64)
|
|
|
-* SDCC (stm8, mcs51, ..)
|
|
|
+* Wasm (wasm32)
|
|
|
* Cross (cross-toolchains ..)
|
|
|
|
|
|
+## Supported toolchains
|
|
|
+
|
|
|
+```bash
|
|
|
+$ xmake show -l toolchains
|
|
|
+xcode Xcode IDE
|
|
|
+vs VisualStudio IDE
|
|
|
+yasm The Yasm Modular Assembler
|
|
|
+clang A C language family frontend for LLVM
|
|
|
+go Go Programming Language Compiler
|
|
|
+dlang D Programming Language Compiler
|
|
|
+gfortran GNU Fortran Programming Language Compiler
|
|
|
+zig Zig Programming Language Compiler
|
|
|
+sdcc Small Device C Compiler
|
|
|
+cuda CUDA Toolkit
|
|
|
+ndk Android NDK
|
|
|
+rust Rust Programming Language Compiler
|
|
|
+llvm A collection of modular and reusable compiler and toolchain technologies
|
|
|
+cross Common cross compilation toolchain
|
|
|
+nasm NASM Assembler
|
|
|
+gcc GNU Compiler Collection
|
|
|
+mingw Minimalist GNU for Windows
|
|
|
+gnu-rm GNU Arm Embedded Toolchain
|
|
|
+envs Environment variables toolchain
|
|
|
+fasm Flat Assembler
|
|
|
+tinycc Tiny C Compiler
|
|
|
+emcc A toolchain for compiling to asm.js and WebAssembly
|
|
|
+icc Intel C/C++ Compiler
|
|
|
+ifort Intel Fortran Compiler
|
|
|
+muslcc The musl-based cross-compilation toolchain
|
|
|
+fpc Free Pascal Programming Language Compiler
|
|
|
+wasi WASI-enabled WebAssembly C/C++ toolchain
|
|
|
+nim Nim Programming Language Compiler
|
|
|
+circle A new C++20 compiler
|
|
|
+armcc ARM Compiler Version 5 of Keil MDK
|
|
|
+armclang ARM Compiler Version 6 of Keil MDK
|
|
|
+```
|
|
|
+
|
|
|
## Supported Languages
|
|
|
|
|
|
* C
|
|
|
@@ -140,7 +205,28 @@ The test project: [xmake-core](https://github.com/xmake-io/xmake/tree/master/cor
|
|
|
* Golang
|
|
|
* Rust
|
|
|
* Dlang
|
|
|
+* Fortran
|
|
|
* Cuda
|
|
|
+* Zig
|
|
|
+* Vala
|
|
|
+* Pascal
|
|
|
+* Nim
|
|
|
+
|
|
|
+## Supported Features
|
|
|
+
|
|
|
+* The configuration grammar is simple and easy to use
|
|
|
+* Quick installation, without any dependencies
|
|
|
+* One-click compilation for all platforms
|
|
|
+* Support cross compilation, intelligent analysis of cross tool chain information
|
|
|
+* Extremely fast, multi-task parallel compilation support
|
|
|
+* C++20 Module support
|
|
|
+* Support cross-platform C/C++ dependency package quick integration, built-in package manager
|
|
|
+* Multi-language mixed compilation support
|
|
|
+* Rich plug-in support, providing various project generators, such as: vs/makefile/cmakelists/compile_commands to generate plugins
|
|
|
+* REPL interactive execution support
|
|
|
+* Incremental compilation support, automatic analysis of header files
|
|
|
+* Quick switching and customization support of tool chain
|
|
|
+* A large number of expansion modules support
|
|
|
|
|
|
## Supported Projects
|
|
|
|
|
|
@@ -152,10 +238,17 @@ The test project: [xmake-core](https://github.com/xmake-io/xmake/tree/master/cor
|
|
|
* WDK Driver (umdf/kmdf/wdm)
|
|
|
* WinSDK Application
|
|
|
* MFC Application
|
|
|
+* iOS/MacOS Application (Support .metal)
|
|
|
+* Framework and Bundle Program (iOS/MacOS)
|
|
|
+* SWIG Modules (Lua, python, ...)
|
|
|
+* Luarocks Modules
|
|
|
+* Protobuf Program
|
|
|
+* Lex/yacc program
|
|
|
+* C++20 Modules
|
|
|
|
|
|
## More Examples
|
|
|
|
|
|
-Debug and release modes:
|
|
|
+#### Debug and release modes
|
|
|
|
|
|
```lua
|
|
|
add_rules("mode.debug", "mode.release")
|
|
|
@@ -168,7 +261,7 @@ target("console")
|
|
|
end
|
|
|
```
|
|
|
|
|
|
-Custom scripts:
|
|
|
+#### Custom scripts
|
|
|
|
|
|
```lua
|
|
|
target("test")
|
|
|
@@ -180,18 +273,22 @@ target("test")
|
|
|
end)
|
|
|
```
|
|
|
|
|
|
+#### Automatic integration of dependent packages
|
|
|
+
|
|
|
Download and use packages in [xmake-repo](https://github.com/xmake-io/xmake-repo) or third-party repositories:
|
|
|
|
|
|
```lua
|
|
|
add_requires("tbox >1.6.1", "libuv master", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8")
|
|
|
-add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true})
|
|
|
+add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true})
|
|
|
target("test")
|
|
|
set_kind("binary")
|
|
|
add_files("src/*.c")
|
|
|
add_packages("tbox", "libuv", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8", "openssl")
|
|
|
```
|
|
|
|
|
|
-Qt QuickApp Program:
|
|
|
+In addition, we can also use the [xrepo](https://github.com/xmake-io/xrepo) command to quickly install dependent packages.
|
|
|
+
|
|
|
+#### Qt QuickApp Program
|
|
|
|
|
|
```lua
|
|
|
target("test")
|
|
|
@@ -200,22 +297,22 @@ target("test")
|
|
|
add_files("src/qml.qrc")
|
|
|
```
|
|
|
|
|
|
-Cuda Program:
|
|
|
+#### Cuda Program
|
|
|
|
|
|
```lua
|
|
|
target("test")
|
|
|
set_kind("binary")
|
|
|
add_files("src/*.cu")
|
|
|
add_cugencodes("native")
|
|
|
- add_cugencodes("compute_30")
|
|
|
+ add_cugencodes("compute_35")
|
|
|
```
|
|
|
|
|
|
-WDK/UMDF Driver Program:
|
|
|
+#### WDK/UMDF Driver Program
|
|
|
|
|
|
```lua
|
|
|
target("echo")
|
|
|
add_rules("wdk.driver", "wdk.env.umdf")
|
|
|
- add_files("driver/*.c")
|
|
|
+ add_files("driver/*.c")
|
|
|
add_files("driver/*.inx")
|
|
|
add_includedirs("exe")
|
|
|
|
|
|
@@ -226,6 +323,84 @@ target("app")
|
|
|
|
|
|
More wdk driver program examples (umdf/kmdf/wdm), please see [WDK Program Examples](https://xmake.io/#/guide/project_examples?id=wdk-driver-program)
|
|
|
|
|
|
+#### iOS/MacOS Application
|
|
|
+
|
|
|
+```lua
|
|
|
+target("test")
|
|
|
+ add_rules("xcode.application")
|
|
|
+ add_files("src/*.m", "src/**.storyboard", "src/*.xcassets")
|
|
|
+ add_files("src/Info.plist")
|
|
|
+```
|
|
|
+
|
|
|
+#### Framework and Bundle Program (iOS/MacOS)
|
|
|
+
|
|
|
+```lua
|
|
|
+target("test")
|
|
|
+ add_rules("xcode.framework") -- or xcode.bundle
|
|
|
+ add_files("src/*.m")
|
|
|
+ add_files("src/Info.plist")
|
|
|
+```
|
|
|
+
|
|
|
+#### OpenMP Program
|
|
|
+
|
|
|
+```lua
|
|
|
+add_requires("openmp")
|
|
|
+target("loop")
|
|
|
+ set_kind("binary")
|
|
|
+ add_files("src/*.cpp")
|
|
|
+ add_packages("openmp")
|
|
|
+```
|
|
|
+
|
|
|
+#### Zig Program
|
|
|
+
|
|
|
+```lua
|
|
|
+target("test")
|
|
|
+ set_kind("binary")
|
|
|
+ add_files("src/main.zig")
|
|
|
+```
|
|
|
+
|
|
|
+### Automatically fetch remote toolchain
|
|
|
+
|
|
|
+#### fetch the special version of llvm
|
|
|
+
|
|
|
+We use clang in llvm-10 to compile the project.
|
|
|
+
|
|
|
+```lua
|
|
|
+add_requires("llvm 10.x", {alias = "llvm-10"})
|
|
|
+target("test")
|
|
|
+ set_kind("binary")
|
|
|
+ add_files("src/*.c)
|
|
|
+ set_toolchains("llvm@llvm-10")
|
|
|
+```
|
|
|
+
|
|
|
+#### Fetch cross-compilation toolchain
|
|
|
+
|
|
|
+We can also pull the specified cross-compilation tool chain to compile the project.
|
|
|
+
|
|
|
+```lua
|
|
|
+add_requires("muslcc")
|
|
|
+target("test")
|
|
|
+ set_kind("binary")
|
|
|
+ add_files("src/*.c)
|
|
|
+ set_toolchains("@muslcc")
|
|
|
+```
|
|
|
+
|
|
|
+#### Fetch toolchain and packages
|
|
|
+
|
|
|
+We can also use the specified muslcc cross-compilation toolchain to compile and integrate all dependent packages
|
|
|
+
|
|
|
+```lua
|
|
|
+add_requires("muslcc")
|
|
|
+add_requires("zlib", "libogg", {system = false})
|
|
|
+
|
|
|
+set_toolchains("@muslcc")
|
|
|
+
|
|
|
+target("test")
|
|
|
+ set_kind("binary")
|
|
|
+ add_files("src/*.c")
|
|
|
+ add_packages("zlib", "libogg")
|
|
|
+```
|
|
|
+
|
|
|
## Plugins
|
|
|
|
|
|
#### Generate IDE project file plugin(makefile, vs2002 - vs2019 .. )
|
|
|
@@ -247,10 +422,10 @@ $ xmake l lib.detect.find_tool gcc
|
|
|
$ xmake l
|
|
|
> print("hello xmake!")
|
|
|
> {1, 2, 3}
|
|
|
-< {
|
|
|
+< {
|
|
|
1,
|
|
|
2,
|
|
|
- 3
|
|
|
+ 3
|
|
|
}
|
|
|
```
|
|
|
|
|
|
@@ -274,31 +449,81 @@ Please download and install more other plugins from the plugins repository [xmak
|
|
|
|
|
|
* [xmake.vim](https://github.com/luzhlon/xmake.vim) (third-party, thanks [@luzhlon](https://github.com/luzhlon))
|
|
|
|
|
|
-* [xmake-gradle](https://github.com/xmake-io/xmake-gradle): A gradle plugin that integrates xmake seamlessly
|
|
|
+* [xmake-visualstudio](https://github.com/HelloWorld886/xmake-visualstudio) (third-party, thanks [@HelloWorld886](https://github.com/HelloWorld886))
|
|
|
+
|
|
|
+* [xmake-qtcreator](https://github.com/Arthapz/xmake-project-manager) (third-party, thanks [@Arthapz](https://github.com/Arthapz))
|
|
|
|
|
|
-## Project Examples
|
|
|
+### XMake Gradle Plugin (JNI)
|
|
|
+
|
|
|
+We can uses [xmake-gradle](https://github.com/xmake-io/xmake-gradle) plugin to compile JNI library in gradle.
|
|
|
+
|
|
|
+```
|
|
|
+plugins {
|
|
|
+ id 'org.tboox.gradle-xmake-plugin' version '1.1.4'
|
|
|
+}
|
|
|
+
|
|
|
+android {
|
|
|
+ externalNativeBuild {
|
|
|
+ xmake {
|
|
|
+ path "jni/xmake.lua"
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
|
|
|
-Some projects using xmake:
|
|
|
+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
|
|
|
+```
|
|
|
|
|
|
-* [tbox](https://github.com/tboox/tbox)
|
|
|
-* [gbox](https://github.com/tboox/gbox)
|
|
|
-* [vm86](https://github.com/tboox/vm86)
|
|
|
-* [more](https://github.com/xmake-io/awesome-xmake)
|
|
|
+## Technical Support
|
|
|
|
|
|
-## Example Video
|
|
|
+We also provide paid technical support to help users quickly solve related problems. For details, please click the image link below:
|
|
|
|
|
|
-<a href="https://asciinema.org/a/133693">
|
|
|
-<img src="https://asciinema.org/a/133693.png" width="650px" />
|
|
|
+<a href="https://xscode.com/waruqi/xmake">
|
|
|
+<img src="https://tboox.org/assets/img/xmake-xscode.png" width="650px" />
|
|
|
</a>
|
|
|
|
|
|
+Or you can also consider sponsoring us to get technical support services, [[Become a sponsor](https://xmake.io/#/about/sponsor)]
|
|
|
+
|
|
|
+## Who is using Xmake?
|
|
|
+
|
|
|
+Please click [User List](https://xmake.io/#/about/who_is_using_xmake) to view the complete user list.
|
|
|
+
|
|
|
+If you are using xmake, welcome to submit the information to the above list through PR, so that let more users can known how many users are using xmake.
|
|
|
+
|
|
|
+Ihis also let users to use xmake more confidently, and we will also have more motivation to maintain it continuously,
|
|
|
+so that the xmake project and the community will grow stronger.
|
|
|
+
|
|
|
## Contacts
|
|
|
|
|
|
* Email:[[email protected]](mailto:[email protected])
|
|
|
-* Homepage:[tboox.org](https://tboox.org)
|
|
|
-* Community:[/r/tboox on reddit](https://www.reddit.com/r/xmake/)
|
|
|
-* ChatRoom:[Char on telegram](https://t.me/tbooxorg), [Chat on gitter](https://gitter.im/xmake-io/xmake?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
|
+* 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 gitter](https://gitter.im/xmake-io/xmake?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
|
+ - [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)
|
|
|
-* QQ Group: 343118190(full), 662147501
|
|
|
* Wechat Public: tboox-os
|
|
|
|
|
|
## Thanks
|
|
|
@@ -309,4 +534,4 @@ This project exists thanks to all the people who have [contributed](CONTRIBUTING
|
|
|
* [TitanSnow](https://github.com/TitanSnow): provide the xmake [logo](https://github.com/TitanSnow/ts-xmake-logo) and install scripts
|
|
|
* [uael](https://github.com/uael): provide the semantic versioning library [sv](https://github.com/uael/sv)
|
|
|
* [OpportunityLiu](https://github.com/OpportunityLiu): improve cuda, tests and ci
|
|
|
-
|
|
|
+* [xq144](https://github.com/xq114): Improve `xrepo env shell`, and contribute a lot of packages to the [xmake-repo](https://github.com/xmake-io/xmake-repo) repository.
|