diff options
| author | ruki <waruqi@gmail.com> | 2019-06-21 22:32:41 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2019-06-21 09:16:11 +0800 |
| commit | 1587e4a8f2f04ae73ed770ee53b58d480b68f747 (patch) | |
| tree | cb11b88fa416bcd5ac0902dd32099de1991ddbcf /plugins.md | |
| parent | 1e3bf498456a76a11592c30d8952d11277def5ac (diff) | |
| download | xmake-docs-1587e4a8f2f04ae73ed770ee53b58d480b68f747.tar.gz xmake-docs-1587e4a8f2f04ae73ed770ee53b58d480b68f747.zip | |
init for docsify
Diffstat (limited to 'plugins.md')
| -rw-r--r-- | plugins.md | 499 |
1 files changed, 0 insertions, 499 deletions
diff --git a/plugins.md b/plugins.md deleted file mode 100644 index 01825823..00000000 --- a/plugins.md +++ /dev/null @@ -1,499 +0,0 @@ ---- -search: en ---- - -## Plugin Development - -#### Introduction - -XMake supports the plugin module and we can develop ourself plugin module conveniently. - -We can run command `xmake -h` to look over some builtin plugins of xmake - -``` -Plugins: - l, lua Run the lua script. - m, macro Run the given macro. - doxygen Generate the doxygen document. - hello Hello xmake! - project Create the project file. -``` - -* lua: Run a given lua script. -* macro: Record and playback some xmake commands repeatly. -* doxygen:Generate doxygen document automatically. -* hello: The demo plugin and only print: 'hello xmake!' -* project:Generate project file for IDE, only generate makefile now and will generate vs, xcode project in the future - -#### Quick Start - -Now we write a simple plugin demo for printing 'hello xmake!' - -```lua --- define a plugin task -task("hello") - - -- set the category for showing it in plugin category menu (optional) - set_category("plugin") - - -- the main entry of the plugin - on_run(function () - - -- print 'hello xmake!' - print("hello xmake!") - end) - - -- set the menu options, but we put empty options now. - set_menu { - -- usage - usage = "xmake hello [options]" - - -- description - , description = "Hello xmake!" - - -- options - , options = {} - } -``` - -The file tree of this plugin: - -``` -hello - - xmake.lua - -``` - -Now one of the most simple plugin finished, how was it to be xmake detected it, there are three ways: - -1. Put this plugin directory into xmake/plugins the source codes as the builtin plugin. -2. Put this plugin directory into ~/.xmake/plugins as the global user plugin. -3. Put this plugin directory to anywhere and call `add_plugindirs("./hello")` in xmake.lua as the local project plugin. - -#### Run Plugin - -Next we run this plugin - -```bash -xmake hello -``` - -The results is - -``` -hello xmake! -``` - -Finally, we can also run this plugin in the custom scripts of `xmake.lua` - -```lua - -target("demo") - - -- run this plugin after building target - after_build(function (target) - - -- import task module - import("core.project.task") - - -- run the plugin task - task.run("hello") - end) -``` - -## Builtin Plugins - -#### Macros Recording and Playback - -##### Introduction - -We can record and playback our xmake commands and save as macro quickly using this plugin. - -And we can run this macro to simplify our jobs repeatly. - -##### Record Commands - -```bash -# begin to record commands -$ xmake macro --begin - -# run some xmake commands -$ xmake f -p android --ndk=/xxx/ndk -a armv7-a -$ xmake p -$ xmake f -p mingw --sdk=/mingwsdk -$ xmake p -$ xmake f -p linux --sdk=/toolsdk --toolchains=/xxxx/bin -$ xmake p -$ xmake f -p iphoneos -a armv7 -$ xmake p -$ xmake f -p iphoneos -a arm64 -$ xmake p -$ xmake f -p iphoneos -a armv7s -$ xmake p -$ xmake f -p iphoneos -a i386 -$ xmake p -$ xmake f -p iphoneos -a x86_64 -$ xmake p - -# stop to record and save as anonymous macro -xmake macro --end -``` - -##### Playback Macro - -```bash -# playback the previous anonymous macro -$ xmake macro . -``` - -##### Named Macro - -```bash -$ xmake macro --begin -$ ... -$ xmake macro --end macroname -$ xmake macro macroname -``` - -##### Import and Export Macro - -Import the given macro file or directory. - -```bash -$ xmake macro --import=/xxx/macro.lua macroname -$ xmake macro --import=/xxx/macrodir -``` - -Export the given macro to file or directory. - -```bash -$ xmake macro --export=/xxx/macro.lua macroname -$ xmake macro --export=/xxx/macrodir -``` - -##### List and Show Macro - -List all builtin macros. - -```bash -$ xmake macro --list -``` - -Show the given macro script content. - -```bash -$ xmake macro --show macroname -``` - -##### Custom Macro Script - -Create and write a `macro.lua` script first. - -```lua -function main() - os.exec("xmake f -p android --ndk=/xxx/ndk -a armv7-a") - os.exec("xmake p") - os.exec("xmake f -p mingw --sdk=/mingwsdk") - os.exec("xmake p") - os.exec("xmake f -p linux --sdk=/toolsdk --toolchains=/xxxx/bin") - os.exec("xmake p") - os.exec("xmake f -p iphoneos -a armv7") - os.exec("xmake p") - os.exec("xmake f -p iphoneos -a arm64") - os.exec("xmake p") - os.exec("xmake f -p iphoneos -a armv7s") - os.exec("xmake p") - os.exec("xmake f -p iphoneos -a i386") - os.exec("xmake p") - os.exec("xmake f -p iphoneos -a x86_64") - os.exec("xmake p") -end -``` - -Import this macro script to xmake. - -```bash -$ xmake macro --import=/xxx/macro.lua [macroname] -``` - -Playback this macro script. - -```bash -$ xmake macro [.|macroname] -``` - -##### Builtin Macros - -XMake supports some builtins macros to simplify our jobs. - -For example, we use `package` macro to package all architectures of the iphoneos platform just for once. - -```bash -$ xmake macro package -p iphoneos -``` - -##### Advance Macro Script - -Let's see the `package` macro script: - -```lua --- imports -import("core.base.option") -import("core.project.config") -import("core.project.project") -import("core.platform.platform") - --- the options -local options = -{ - {'p', "plat", "kv", os.host(), "Set the platform." } -, {'f', "config", "kv", nil, "Pass the config arguments to \"xmake config\" .." } -, {'o', "outputdir", "kv", nil, "Set the output directory of the package." } -} - --- package all --- --- .e.g --- xmake m package --- xmake m package -f "-m debug" --- xmake m package -p linux --- xmake m package -p iphoneos -f "-m debug --xxx ..." -o /tmp/xxx --- xmake m package -f \"--mode=debug\" --- -function main(argv) - - -- parse arguments - local args = option.parse(argv, options, "Package all architectures for the given the platform." - , "" - , "Usage: xmake macro package [options]") - - -- package all archs - local plat = args.plat - for _, arch in ipairs(platform.archs(plat)) do - - -- config it - os.exec("xmake f -p %s -a %s %s -c %s", plat, arch, args.config or "", ifelse(option.get("verbose"), "-v", "")) - - -- package it - if args.outputdir then - os.exec("xmake p -o %s %s", args.outputdir, ifelse(option.get("verbose"), "-v", "")) - else - os.exec("xmake p %s", ifelse(option.get("verbose"), "-v", "")) - end - end - - -- package universal for iphoneos, watchos ... - if plat == "iphoneos" or plat == "watchos" then - - -- load configure - config.load() - - -- load project - project.load() - - -- enter the project directory - os.cd(project.directory()) - - -- the outputdir directory - local outputdir = args.outputdir or config.get("buildir") - - -- package all targets - for _, target in pairs(project.targets()) do - - -- get all modes - local modedirs = os.match(format("%s/%s.pkg/lib/*", outputdir, target:name()), true) - for _, modedir in ipairs(modedirs) do - - -- get mode - local mode = path.basename(modedir) - - -- make lipo arguments - local lipoargs = nil - for _, arch in ipairs(platform.archs(plat)) do - local archfile = format("%s/%s.pkg/lib/%s/%s/%s/%s", outputdir, target:name(), mode, plat, arch, path.filename(target:targetfile())) - if os.isfile(archfile) then - lipoargs = format("%s -arch %s %s", lipoargs or "", arch, archfile) - end - end - if lipoargs then - - -- make full lipo arguments - lipoargs = format("-create %s -output %s/%s.pkg/lib/%s/%s/universal/%s", lipoargs, outputdir, target:name(), mode, plat, path.filename(target:targetfile())) - - -- make universal directory - os.mkdir(format("%s/%s.pkg/lib/%s/%s/universal", outputdir, target:name(), mode, plat)) - - -- package all archs - os.execv("xmake", {"l", "lipo", lipoargs}) - end - end - end - end -end -``` - -<p class="tip"> - If you want to known more options, please run: `xmake macro --help` -</p> - -#### Run the Custom Lua Script - -##### Run the given script - -Write a simple lua script: - -```lua -function main() - print("hello xmake!") -end -``` - -Run this lua script. - -```bash -$ xmake lua /tmp/test.lua -``` - -<p class="tip"> - You can also use `import` api to write a more advance lua script. -</p> - -##### Run the builtin script - -You can run `xmake lua -l` to list all builtin script name, for example: - -```bash -$ xmake lua -l -scripts: - cat - cp - echo - versioninfo - ... -``` - -And run them: - -```bash -$ xmake lua cat ~/file.txt -$ xmake lua echo "hello xmake" -$ xmake lua cp /tmp/file /tmp/file2 -$ xmake lua versioninfo -``` - -##### Run interactive commands (REPL) - -Enter interactive mode: - -```bash -$ xmake lua -> 1 + 2 -3 - -> a = 1 -> a -1 - -> for _, v in pairs({1, 2, 3}) do ->> print(v) ->> end -1 -2 -3 -``` - -And we can `import` modules: - -```bash -> task = import("core.project.task") -> task.run("hello") -hello xmake! -``` - -If you want to cancel multiline input, please input character `q`, for example: - -```bash -> for _, v in ipairs({1, 2}) do ->> print(v) ->> q <-- cancel multiline and clear previous input -> 1 + 2 -3 -``` - -#### Generate IDE Project Files - -##### Generate Makefile - -```bash -$ xmake project -k makefile -``` - -##### Generate compiler_commands - -We can export the compilation commands info of all source files and it is JSON compilation database format. - -```console -$ xmake project -k compile_commands -``` - -The the content of the output file: - -``` -[ - { "directory": "/home/user/llvm/build", - "command": "/usr/bin/clang++ -Irelative -DSOMEDEF=\"With spaces, quotes and \\-es.\" -c -o file.o file.cc", - "file": "file.cc" }, - ... -] - -``` - -Please see [JSONCompilationDatabase](#https://clang.llvm.org/docs/JSONCompilationDatabase.html) if need known more info about `compile_commands`. - -##### Generate VisualStudio Project - -```bash -$ xmake project -k [vs2008|vs2013|vs2015|..] -``` - -v2.1.2 or later, it supports multi-mode and multi-architecture generation for vs201x project. - -For example: - -```bash -$ xmake project -k vs2017 -m "debug,release" -``` - -It will generate four project configurations: `debug|x86`, `debug|x64`, `release|x86`, `release|x64`. - -Or you can set modes to `xmake.lua`: - -```lua -set_modes("debug", "release") -``` - -Then, we run the following command: - -```bash -$ xmake project -k vs2017 -``` - -The effect is same. - -#### Generate Doxygen Document - -Please ensure that the doxygen tool has been installed first. - -```bash -$ xmake doxygen -``` - -## More Plugins - -Please download and install from the plugins repository [xmake-plugins](https://github.com/xmake-io/xmake-plugins). - -#### Convert .app to .ipa - -```bash -$ xmake app2ipa --icon=/xxx.png /xxx/ios.app -o /xxx.ios.ipa -``` |
