summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2019-04-18 22:59:52 +0800
committerruki <[email protected]>2019-04-18 11:59:18 +0800
commit69b9445166ac215b6c40970895d6b8600a55846d (patch)
tree9eb771d61865e579ae0e454ec16c5688f40bab7d
parentfe7395793bf186b54c6ccb777b9086a9e2b5d2e9 (diff)
improve qt rule for android
-rw-r--r--xmake/modules/detect/sdks/find_qt.lua10
-rw-r--r--xmake/platforms/android/load.lua50
-rw-r--r--xmake/platforms/android/xmake.lua2
-rw-r--r--xmake/rules/qt/load.lua6
4 files changed, 48 insertions, 20 deletions
diff --git a/xmake/modules/detect/sdks/find_qt.lua b/xmake/modules/detect/sdks/find_qt.lua
index 6f7b901b2..885198575 100644
--- a/xmake/modules/detect/sdks/find_qt.lua
+++ b/xmake/modules/detect/sdks/find_qt.lua
@@ -46,7 +46,15 @@ function _find_sdkdir(sdkdir, sdkver)
elseif is_plat("mingw") then
table.insert(subdirs, path.join(sdkver or "*", is_arch("x86_64") and "mingw*_64" or "mingw*_32", "bin"))
elseif is_plat("android") then
- table.insert(subdirs, path.join(sdkver or "*", "android_*", "bin"))
+ local subdir = "android_*"
+ if is_arch("arm64-v8a") then
+ subdir = "android_arm64_v8a"
+ elseif is_arch("armv7-a") then
+ subdir = "android_armv7"
+ elseif is_arch("i386") then
+ subdir = "android_x86"
+ end
+ table.insert(subdirs, path.join(sdkver or "*", subdir, "bin"))
end
table.insert(subdirs, path.join(sdkver or "*", "*", "bin"))
table.insert(subdirs, path.join("*", "bin"))
diff --git a/xmake/platforms/android/load.lua b/xmake/platforms/android/load.lua
index b7ac74856..94212458c 100644
--- a/xmake/platforms/android/load.lua
+++ b/xmake/platforms/android/load.lua
@@ -85,6 +85,19 @@ function main(platform)
local ndk_sdkver = config.get("ndk_sdkver")
if ndk and ndk_sdkver then
+ -- the sysroot archs
+ local sysroot_archs =
+ {
+ ["armv5te"] = "arch-arm"
+ , ["armv7-a"] = "arch-arm"
+ , ["arm64-v8a"] = "arch-arm64"
+ , i386 = "arch-x86"
+ , x86_64 = "arch-x86_64"
+ , mips = "arch-mips"
+ , mips64 = "arch-mips64"
+ }
+ local sysroot_arch = sysroot_archs[arch]
+
-- add sysroot
--
-- @see https://android.googlesource.com/platform/ndk/+/master/docs/UnifiedHeaders.md
@@ -111,8 +124,10 @@ function main(platform)
["armv5te"] = "arm-linux-androideabi"
, ["armv7-a"] = "arm-linux-androideabi"
, ["arm64-v8a"] = "aarch64-linux-android"
- , ["i386"] = "i686-linux-android"
- , ["x86_64"] = "x86_64-linux-android"
+ , i386 = "i686-linux-android"
+ , x86_64 = "x86_64-linux-android"
+ , mips = "mips-linux-android"
+ , mips64 = "mips64-linux-android"
}
platform:add("cxflags", "-D__ANDROID_API__=" .. ndk_sdkver)
platform:add("asflags", "-D__ANDROID_API__=" .. ndk_sdkver)
@@ -123,22 +138,15 @@ function main(platform)
platform:add("cxxflags","-isystem " .. path.join(ndk_sysroot_be_r14, "usr", "include", triples[arch]))
platform:add("asflags", "-isystem " .. path.join(ndk_sysroot_be_r14, "usr", "include", triples[arch]))
else
- if arch:startswith("arm64") then
- platform:add("cflags", format("--sysroot=%s/arch-arm64", ndk_sdkdir))
- platform:add("cxxflags", format("--sysroot=%s/arch-arm64", ndk_sdkdir))
- platform:add("asflags", format("--sysroot=%s/arch-arm64", ndk_sdkdir))
- else
- platform:add("cflags", format("--sysroot=%s/arch-arm", ndk_sdkdir))
- platform:add("cxxflags", format("--sysroot=%s/arch-arm", ndk_sdkdir))
- platform:add("asflags", format("--sysroot=%s/arch-arm", ndk_sdkdir))
+ if sysroot_arch then
+ platform:add("cflags", format("--sysroot=%s/%s", ndk_sdkdir, sysroot_arch))
+ platform:add("cxxflags", format("--sysroot=%s/%s", ndk_sdkdir, sysroot_arch))
+ platform:add("asflags", format("--sysroot=%s/%s", ndk_sdkdir, sysroot_arch))
end
end
- if arch:startswith("arm64") then
- platform:add("ldflags", format("--sysroot=%s/arch-arm64", ndk_sdkdir))
- platform:add("shflags", format("--sysroot=%s/arch-arm64", ndk_sdkdir))
- else
- platform:add("ldflags", format("--sysroot=%s/arch-arm", ndk_sdkdir))
- platform:add("shflags", format("--sysroot=%s/arch-arm", ndk_sdkdir))
+ if sysroot_arch then
+ platform:add("ldflags", format("--sysroot=%s/%s", ndk_sdkdir, sysroot_arch))
+ platform:add("shflags", format("--sysroot=%s/%s", ndk_sdkdir, sysroot_arch))
end
-- add "-fPIE -pie" to ldflags
@@ -160,6 +168,10 @@ function main(platform)
["armv5te"] = "armeabi"
, ["armv7-a"] = "armeabi-v7a"
, ["arm64-v8a"] = "arm64-v8a"
+ , i386 = "x86"
+ , x86_64 = "x86_64"
+ , mips = "mips"
+ , mips64 = "mips64"
}
-- add search directories for c++ stl
@@ -194,7 +206,7 @@ function main(platform)
end
-- init targets for rust
- local targets =
+ local targets_rust =
{
["armv5te"] = "arm-linux-androideabi"
, ["armv7-a"] = "arm-linux-androideabi"
@@ -202,7 +214,9 @@ function main(platform)
}
-- init flags for rust
- platform:add("rcflags", "--target=" .. targets[arch])
+ if targets_rust[arch] then
+ platform:add("rcflags", "--target=" .. targets_rust[arch])
+ end
platform:add("rc-shflags", "-C link-args=\"" .. (table.concat(platform:get("shflags"), " "):gsub("%-march=.-%s", "") .. "\""))
platform:add("rc-ldflags", "-C link-args=\"" .. (table.concat(platform:get("ldflags"), " "):gsub("%-march=.-%s", "") .. "\""))
local sh = config.get("sh")
diff --git a/xmake/platforms/android/xmake.lua b/xmake/platforms/android/xmake.lua
index 9a031340f..a4985a3eb 100644
--- a/xmake/platforms/android/xmake.lua
+++ b/xmake/platforms/android/xmake.lua
@@ -28,7 +28,7 @@ platform("android")
set_hosts("macosx", "linux", "windows")
-- set archs
- set_archs("armv5te", "armv7-a", "arm64-v8a", "mips")
+ set_archs("armv5te", "armv7-a", "arm64-v8a", "mips", "mips64", "i386", "x86_64")
-- set formats
set_formats {static = "lib$(name).a", object = "$(name).o", shared = "lib$(name).so", symbol = "$(name).sym"}
diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua
index e449a7c69..47abfabfd 100644
--- a/xmake/rules/qt/load.lua
+++ b/xmake/rules/qt/load.lua
@@ -197,6 +197,12 @@ function main(target, opt)
target:add("includedirs", path.join(qt.sdkdir, "mkspecs/win32-g++"))
target:add("linkdirs", qt.linkdirs)
target:add("links", "mingw32")
+ elseif is_plat("android") then
+ target:set("frameworks", nil)
+ target:add("includedirs", path.join(qt.sdkdir, "include"))
+ target:add("includedirs", path.join(qt.sdkdir, "mkspecs/android-clang"))
+ target:add("rpathdirs", qt.linkdirs)
+ target:add("linkdirs", qt.linkdirs)
end
-- add some static third-party links if exists