summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-02-09 09:22:25 +0800
committerruki <[email protected]>2017-02-09 09:22:25 +0800
commitfd16730ec4846ea1acf8cb03d91f0a059d98fddf (patch)
tree2e4b09d80a62b0edb2dd4ff0f1a035dd6e591503
parent7bb2d3b070b62c5fce22276c92f342f2647b0a39 (diff)
add add_frameworks api
-rw-r--r--CHANGELOG.md6
-rwxr-xr-xdocs/zh/manual.md67
-rwxr-xr-xtests/console_objc++/xmake.lua7
-rwxr-xr-xtests/console_objc/xmake.lua7
-rwxr-xr-xxmake/actions/build/main.lua2
-rw-r--r--xmake/languages/objc++/api.lua2
-rwxr-xr-xxmake/languages/objc++/xmake.lua10
-rw-r--r--xmake/languages/swift/api.lua2
-rwxr-xr-xxmake/languages/swift/xmake.lua9
-rw-r--r--xmake/templates/objc++/console/project/xmake.lua7
-rw-r--r--xmake/templates/objc/console/project/xmake.lua7
-rwxr-xr-xxmake/tools/gcc.lua7
-rw-r--r--xmake/tools/swiftc.lua7
13 files changed, 120 insertions, 20 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fed96e5b0..1c5874e4a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,7 +8,9 @@
* Add app2ipa plugin
* Add dictionary syntax style for `xmake.lua`
* Provide smart scanning and building mode without `xmake.lua`
-* Add `set_xmakever` interface for `xmake.lua`
+* Add `set_xmakever` api for `xmake.lua`
+* Add `add_frameworks` api for `objc` and `swift`
+* Support multi-languages extension and add `golang` language
### Changes
@@ -201,6 +203,8 @@
* 为`xmake.lua`工程描述增加dictionay语法风格
* 提供智能扫描编译模式,在无任何`xmake.lua`等工程描述文件的情况下,也能直接快速编译
* 为`xmake.lua`工程描述添加`set_xmakever`接口,更加友好的处理版本兼容性问题
+* 为`objc`和`swift`程序添加`add_frameworks`接口
+* 更加快速方便的多语言扩展支持,增加`golang`程序构建的支持
### 改进
diff --git a/docs/zh/manual.md b/docs/zh/manual.md
index 93f880fc4..9495f4250 100755
--- a/docs/zh/manual.md
+++ b/docs/zh/manual.md
@@ -384,6 +384,27 @@ target("tbox")
定义和设置子工程模块,每个`target`对应一个子工程,最后会生成一个目标程序,有可能是可执行程序,也有可能是库模块。
+<p class="tip">
+target的接口,都是可以放置在target外面的全局作用域中的,如果在全局中设置,那么会影响所有子工程target。
+</p>
+
+例如:
+
+```lua
+-- 会同时影响test和test2目标
+add_defines("DEBUG")
+
+target("test")
+ add_files("*.c")
+
+target("test2")
+ add_files("*.c")
+```
+
+<p class="tip">
+`target`域是可以重复进入来实现分离设置的。
+<>
+
| 接口 | 描述 | 支持版本 |
| ------------------------------------- | ------------------------------------ | -------- |
@@ -446,6 +467,7 @@ target("tbox")
| [add_options](#add_options) | 添加关联选项 | >= 2.0.1 |
| [add_languages](#add_languages) | 添加语言标准 | >= 1.0.1 |
| [add_vectorexts](#add_vectorexts) | 添加向量扩展指令 | >= 1.0.1 |
+| [add_frameworks](#add_frameworks) | 添加链接框架 | >= 2.1.1 |
##### target
@@ -1403,10 +1425,54 @@ add_vectorexts("sse", "sse2", "sse3", "ssse3")
如果当前设置的指令集编译器不支持,xmake会自动忽略掉,所以不需要用户手动去判断维护,只需要将你需要的指令集全部设置上就行了。
</p>
+##### add_frameworks
+
+###### 添加链接框架
+
+目前主要用于`ios`和`macosx`平台的`objc`和`swift`程序,例如:
+
+```lua
+target("test")
+ add_frameworks("Foundation", "CoreFoundation")
+```
+
+当然也可以使用[add_mxflags](#add_mxflags)和[add_ldflags](#add_ldflags)来设置,不过比较繁琐,不建议这样设置。
+
+```lua
+target("test")
+ add_mxflags("-framework Foundation", "-framework CoreFoundation")
+ add_ldflags("-framework Foundation", "-framework CoreFoundation")
+```
+
+如果不是这两个平台,这些设置将会被忽略。
+
#### 选项定义
定义和设置选项开关,每个`option`对应一个选项,可用于自定义编译配置选项、开关设置。
+<p class="tip">
+除了`target`以外的所有域接口,例如`option`,`task`等的接口,默认不能放置在外面的全局作用域中的(除非部分跟target共用的接口除外)。
+如果要设置值影响所有`option`,`task`等选项,可以通过匿名全局域来设置。
+</p>
+
+例如:
+
+```lua
+-- 进入option的匿名全局域,里面的设置会同时影响test和test2选项
+option()
+ add_defines("DEBUG")
+
+option("test")
+ -- ...
+
+option("test2")
+ -- ...
+```
+
+<p class="tip">
+`option`域是可以重复进入来实现分离设置的。
+<>
+
| 接口 | 描述 | 支持版本 |
| ----------------------------------------------- | -------------------------------------------- | -------- |
@@ -1458,6 +1524,7 @@ add_vectorexts("sse", "sse2", "sse3", "ssse3")
| [add_cxxfuncs](#add_cxxfuncs) | 添加c++库函数接口 | >= 1.0.1 |
| [add_languages](#add_languages) | 添加语言标准 | >= 2.0.1 |
| [add_vectorexts](#add_vectorexts) | 添加向量扩展指令 | >= 2.0.1 |
+| [add_frameworks](#add_frameworks) | 添加链接框架 | >= 2.1.1 |
##### option
diff --git a/tests/console_objc++/xmake.lua b/tests/console_objc++/xmake.lua
index 00884ee70..a9229c7f3 100755
--- a/tests/console_objc++/xmake.lua
+++ b/tests/console_objc++/xmake.lua
@@ -21,13 +21,12 @@ if is_mode("release") then
set_strip("all")
end
+-- add frameworks
+add_frameworks("Foundation", "CoreFoundation")
+
-- for macosx or ios
if is_os("macosx", "ios") then
- -- add framework
- add_mxflags("-framework Foundation", "-framework CoreFoundation")
- add_ldflags("-framework Foundation", "-framework CoreFoundation")
-
-- enable arc?
add_mxflags("-fobjc-arc")
end
diff --git a/tests/console_objc/xmake.lua b/tests/console_objc/xmake.lua
index fb1c495bf..146262351 100755
--- a/tests/console_objc/xmake.lua
+++ b/tests/console_objc/xmake.lua
@@ -21,13 +21,12 @@ if is_mode("release") then
set_strip("all")
end
+-- add frameworks
+add_frameworks("Foundation", "CoreFoundation")
+
-- for macosx or ios
if is_os("macosx", "ios") then
- -- add framework
- add_mxflags("-framework Foundation", "-framework CoreFoundation")
- add_ldflags("-framework Foundation", "-framework CoreFoundation")
-
-- enable arc?
add_mxflags("-fobjc-arc")
end
diff --git a/xmake/actions/build/main.lua b/xmake/actions/build/main.lua
index 3f8dc460d..14e73b8f7 100755
--- a/xmake/actions/build/main.lua
+++ b/xmake/actions/build/main.lua
@@ -47,10 +47,8 @@ function main()
-- rebuild?
if option.get("rebuild") or cache.get("rebuild") then
- table.dump(os.match("$(buildir)/**", 'a'))
-- clean it first
task.run("clean", {target = targetname})
- table.dump(os.match("$(buildir)/**", 'a'))
-- reset state
cache.set("rebuild", nil)
diff --git a/xmake/languages/objc++/api.lua b/xmake/languages/objc++/api.lua
index 789f14605..82040a313 100644
--- a/xmake/languages/objc++/api.lua
+++ b/xmake/languages/objc++/api.lua
@@ -42,6 +42,7 @@ function apis()
, "target.add_undefines"
, "target.add_defines_h"
, "target.add_undefines_h"
+ , "target.add_frameworks"
-- option.add_xxx
, "option.add_cincludes"
, "option.add_cxxincludes"
@@ -62,6 +63,7 @@ function apis()
, "option.add_undefines"
, "option.add_undefines_if_ok"
, "option.add_undefines_h_if_ok"
+ , "option.add_frameworks"
}
_g.pathes =
{
diff --git a/xmake/languages/objc++/xmake.lua b/xmake/languages/objc++/xmake.lua
index 1557630ad..0919a8d7c 100755
--- a/xmake/languages/objc++/xmake.lua
+++ b/xmake/languages/objc++/xmake.lua
@@ -49,6 +49,7 @@ language("objc++")
compiler =
{
"config.includedirs"
+ , "config.frameworks"
, "target.symbols"
, "target.warnings"
, "target.optimize:check"
@@ -57,6 +58,7 @@ language("objc++")
, "target.includedirs"
, "target.defines"
, "target.undefines"
+ , "target.frameworks"
, "option.symbols"
, "option.warnings"
, "option.optimize:check"
@@ -67,9 +69,11 @@ language("objc++")
, "option.undefines"
, "option.defines_if_ok"
, "option.undefines_if_ok"
+ , "option.frameworks"
, "platform.includedirs"
, "platform.defines"
, "platform.undefines"
+ , "platform.frameworks"
}
, linker =
{
@@ -82,9 +86,13 @@ language("objc++")
, "option.linkdirs"
, "platform.linkdirs"
, "config.links"
+ , "config.frameworks"
, "target.links"
+ , "target.frameworks"
, "option.links"
+ , "option.frameworks"
, "platform.links"
+ , "platform.frameworks"
}
, archiver =
{
@@ -116,7 +124,7 @@ language("objc++")
, {nil, "links", "kv", nil, "The Link Libraries" }
, {nil, "linkdirs", "kv", nil, "The Link Search Directories" }
, {nil, "includedirs","kv", nil, "The Include Search Directories" }
-
+ , {nil, "frameworks", "kv", nil, "The Link Frameworks" }
}
}
diff --git a/xmake/languages/swift/api.lua b/xmake/languages/swift/api.lua
index 88d371630..63e1ddbfd 100644
--- a/xmake/languages/swift/api.lua
+++ b/xmake/languages/swift/api.lua
@@ -34,12 +34,14 @@ function apis()
, "target.add_ldflags"
, "target.add_arflags"
, "target.add_shflags"
+ , "target.add_frameworks"
-- option.add_xxx
, "option.add_links"
, "option.add_scflags"
, "option.add_ldflags"
, "option.add_arflags"
, "option.add_shflags"
+ , "option.add_frameworks"
}
_g.pathes =
{
diff --git a/xmake/languages/swift/xmake.lua b/xmake/languages/swift/xmake.lua
index 1a4409bd2..261039895 100755
--- a/xmake/languages/swift/xmake.lua
+++ b/xmake/languages/swift/xmake.lua
@@ -46,6 +46,7 @@ language("swift")
compiler =
{
"config.includedirs"
+ , "config.Frameworks"
, "target.symbols"
, "target.warnings"
, "target.optimize:check"
@@ -54,6 +55,7 @@ language("swift")
, "target.includedirs"
, "target.defines"
, "target.undefines"
+ , "target.frameworks"
, "option.symbols"
, "option.warnings"
, "option.optimize:check"
@@ -64,9 +66,11 @@ language("swift")
, "option.undefines"
, "option.defines_if_ok"
, "option.undefines_if_ok"
+ , "option.frameworks"
, "platform.includedirs"
, "platform.defines"
, "platform.undefines"
+ , "platform.frameworks"
}
, linker =
{
@@ -79,9 +83,13 @@ language("swift")
, "option.linkdirs"
, "platform.linkdirs"
, "config.links"
+ , "config.frameworks"
, "target.links"
+ , "target.frameworks"
, "option.links"
+ , "option.frameworks"
, "platform.links"
+ , "platform.frameworks"
}
, archiver =
{
@@ -114,6 +122,7 @@ language("swift")
, {nil, "links", "kv", nil, "The Link Libraries" }
, {nil, "linkdirs", "kv", nil, "The Link Search Directories" }
, {nil, "includedirs","kv", nil, "The Include Search Directories" }
+ , {nil, "frameworks", "kv", nil, "The Link Frameworks" }
}
}
diff --git a/xmake/templates/objc++/console/project/xmake.lua b/xmake/templates/objc++/console/project/xmake.lua
index d9d4a4ed0..7a56c9d69 100644
--- a/xmake/templates/objc++/console/project/xmake.lua
+++ b/xmake/templates/objc++/console/project/xmake.lua
@@ -21,13 +21,12 @@ if is_mode("release") then
set_strip("all")
end
+-- add frameworks
+add_frameworks("Foundation", "CoreFoundation")
+
-- for macosx or ios
if os("macosx", "ios") then
- -- add framework
- add_mxflags("-framework Foundation", "-framework CoreFoundation")
- add_ldflags("-framework Foundation", "-framework CoreFoundation")
-
-- enable arc?
add_mxflags("-fobjc-arc")
end
diff --git a/xmake/templates/objc/console/project/xmake.lua b/xmake/templates/objc/console/project/xmake.lua
index d2f3d710b..e7724adb5 100644
--- a/xmake/templates/objc/console/project/xmake.lua
+++ b/xmake/templates/objc/console/project/xmake.lua
@@ -21,13 +21,12 @@ if is_mode("release") then
set_strip("all")
end
+-- add frameworks
+add_frameworks("Foundation", "CoreFoundation")
+
-- for macosx or ios
if os("macosx", "ios") then
- -- add framework
- add_mxflags("-framework Foundation", "-framework CoreFoundation")
- add_ldflags("-framework Foundation", "-framework CoreFoundation")
-
-- enable arc?
add_mxflags("-fobjc-arc")
end
diff --git a/xmake/tools/gcc.lua b/xmake/tools/gcc.lua
index 47832580f..6ad26c04e 100755
--- a/xmake/tools/gcc.lua
+++ b/xmake/tools/gcc.lua
@@ -231,6 +231,13 @@ function nf_linkdir(dir)
return "-L" .. dir
end
+-- make the framework flag
+function nf_framework(framework)
+
+ -- make it
+ return "-framework " .. framework
+end
+
-- make the link command
function linkcmd(objectfiles, targetfile, flags)
diff --git a/xmake/tools/swiftc.lua b/xmake/tools/swiftc.lua
index 4fdca0f18..5b4823416 100644
--- a/xmake/tools/swiftc.lua
+++ b/xmake/tools/swiftc.lua
@@ -170,6 +170,13 @@ function nf_undefine(macro)
return "-Xcc -U" .. macro
end
+-- make the framework flag
+function nf_framework(framework)
+
+ -- make it
+ return "-framework" .. framework
+end
+
-- make the compile command
function compcmd(sourcefile, objectfile, flags)