summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-04-20 23:27:27 +0800
committerruki <[email protected]>2018-04-20 14:44:45 +0800
commit73ad98a95af63780ab1b31398f77fa762f99d61a (patch)
tree3f6a4132e7731f5cae52510b428793669c172362
parentf68f5f692efcf5690c7b17dd8b9b49974c1a24fa (diff)
support qt env for linux
-rw-r--r--xmake/modules/detect/sdks/find_qt.lua12
-rw-r--r--xmake/rules/qt/load.lua35
2 files changed, 38 insertions, 9 deletions
diff --git a/xmake/modules/detect/sdks/find_qt.lua b/xmake/modules/detect/sdks/find_qt.lua
index 3179bf0fa..93a524ca0 100644
--- a/xmake/modules/detect/sdks/find_qt.lua
+++ b/xmake/modules/detect/sdks/find_qt.lua
@@ -89,11 +89,11 @@ function _find_qt(sdkdir, sdkver)
-- get includedirs
local includedirs = {path.join(sdkdir, "include")}
- -- get version
- local version = sdkver or sdkdir:match("(%d+%.?%d*%.?%d*.-)")
+ -- get sdk version
+ sdkver = sdkver or sdkdir:match("(%d+%.?%d*%.?%d*.-)")
-- get toolchains
- return {sdkdir = sdkdir, bindir = bindir, linkdirs = linkdirs, includedirs = includedirs, version = version}
+ return {sdkdir = sdkdir, bindir = bindir, linkdirs = linkdirs, includedirs = includedirs, sdkver = sdkver}
end
-- find qt sdk toolchains
@@ -101,7 +101,7 @@ end
-- @param sdkdir the qt sdk directory
-- @param opt the argument options, .e.g {verbose = true, force = false, version = "5.9.1"}
--
--- @return the qt sdk toolchains. .e.g {version = ..., sdkdir = ..., bindir = .., linkdirs = ..., includedirs = ..., .. }
+-- @return the qt sdk toolchains. .e.g {sdkver = ..., sdkdir = ..., bindir = .., linkdirs = ..., includedirs = ..., .. }
--
-- @code
--
@@ -125,12 +125,14 @@ function main(sdkdir, opt)
local qt = _find_qt(sdkdir or config.get("qt") or global.get("qt"), opt.version or config.get("qt_sdkver"))
if qt then
- -- save sdk directory to config
+ -- save to config
config.set("qt_dir", qt.sdkdir, {force = true, readonly = true})
+ config.set("qt_sdkver", qt.sdkver, {force = true, readonly = true})
-- trace
if opt.verbose or option.get("verbose") then
cprint("checking for the Qt SDK directory ... ${green}%s", qt.sdkdir)
+ cprint("checking for the Qt SDK version ... ${green}%s", qt.sdkver)
end
else
diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua
index 8e42b3431..2847f2b52 100644
--- a/xmake/rules/qt/load.lua
+++ b/xmake/rules/qt/load.lua
@@ -22,6 +22,14 @@
-- @file load.lua
--
+-- make link for framework
+function _link(framework, major)
+ if major and framework:startswith("Qt") then
+ framework = "Qt" .. major .. framework:sub(3)
+ end
+ return framework
+end
+
-- the main entry
function main(target, opt)
@@ -31,11 +39,22 @@ function main(target, opt)
-- check qt sdk
local qt = target:data("qt")
+ -- get major version
+ local major = nil
+ if qt.sdkver then
+ major = qt.sdkver:split('%.')[1]
+ end
+
-- set kind
if opt.kind then
target:set("kind", opt.kind)
end
+ -- add -fPIC
+ target:add("cxflags", "-fPIC")
+ target:add("mxflags", "-fPIC")
+ target:add("asflags", "-fPIC")
+
-- need c++11
target:set("languages", "cxx11")
@@ -68,21 +87,29 @@ function main(target, opt)
-- add defines
target:add("defines", "QT_" .. framework:sub(3):upper() .. "_LIB")
- -- add includedirs for macosx
+ -- add includedirs
if is_plat("macosx") then
target:add("includedirs", path.join(qt.sdkdir, "lib/" .. framework .. ".framework/Headers"))
+ elseif is_plat("linux") then
+ target:add("links", _link(framework, major))
+ target:add("includedirs", path.join(qt.sdkdir, "include/" .. framework))
end
end
end
- -- add includedirs, linkdirs for macosx
+ -- add includedirs, linkdirs
if is_plat("macosx") then
- target:add("frameworkdirs", qt.linkdirs)
target:add("frameworks", "DiskArbitration", "IOKit")
+ target:add("frameworkdirs", qt.linkdirs)
target:add("includedirs", path.join(qt.sdkdir, "mkspecs/macx-clang"))
+ target:add("linkdirs", qt.linkdirs)
target:add("rpathdirs", "@executable_path/Frameworks", qt.linkdirs)
- else
+ elseif is_plat("linux") then
target:set("frameworks", nil)
+ target:add("includedirs", path.join(qt.sdkdir, "include"))
+ target:add("includedirs", path.join(qt.sdkdir, "mkspecs/linux-g++"))
+ target:add("rpathdirs", qt.linkdirs)
+ target:add("linkdirs", qt.linkdirs)
end
end