summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-12-03 09:47:59 +0800
committerGitHub <[email protected]>2023-12-03 09:47:59 +0800
commit51db2a04f6def44e67f23448d910da1777db3c48 (patch)
treeed99b073841bdb8933d19e2554f1f0fb8745d29d
parent8fcc525666412aefa0457bf866922b8e97818ea8 (diff)
parentdeae6419ab7da5071c6072c65bb9dac7ee942035 (diff)
Merge pull request #4460 from A2va/meson-correct-toolchain
Add native file meson
-rw-r--r--xmake/modules/package/tools/meson.lua242
1 files changed, 132 insertions, 110 deletions
diff --git a/xmake/modules/package/tools/meson.lua b/xmake/modules/package/tools/meson.lua
index 2a59fbb44..635ca1a8d 100644
--- a/xmake/modules/package/tools/meson.lua
+++ b/xmake/modules/package/tools/meson.lua
@@ -84,12 +84,125 @@ function _translate_flags(package, flags)
return flags
end
+function _insert_cross_configs(package, file, opt)
+ -- host machine
+ file:print("[host_machine]")
+ if opt.host_machine then
+ file:print("%s", opt.host_machine)
+ elseif package:is_plat("iphoneos", "macosx") then
+ local cpu
+ local cpu_family
+ if package:is_arch("arm64") then
+ cpu = "aarch64"
+ cpu_family = "aarch64"
+ elseif package:is_arch("armv7") then
+ cpu = "arm"
+ cpu_family = "arm"
+ elseif package:is_arch("x64", "x86_64") then
+ cpu = "x86_64"
+ cpu_family = "x86_64"
+ elseif package:is_arch("x86", "i386") then
+ cpu = "i686"
+ cpu_family = "x86"
+ else
+ raise("unsupported arch(%s)", package:arch())
+ end
+ file:print("system = 'darwin'")
+ file:print("cpu_family = '%s'", cpu_family)
+ file:print("cpu = '%s'", cpu)
+ file:print("endian = 'little'")
+ elseif package:is_plat("android") then
+ local cpu
+ local cpu_family
+ if package:is_arch("arm64-v8a") then
+ cpu = "aarch64"
+ cpu_family = "aarch64"
+ elseif package:is_arch("armeabi-v7a") then
+ cpu = "arm"
+ cpu_family = "arm"
+ elseif package:is_arch("x64", "x86_64") then
+ cpu = "x86_64"
+ cpu_family = "x86_64"
+ elseif package:is_arch("x86", "i386") then
+ cpu = "i686"
+ cpu_family = "x86"
+ else
+ raise("unsupported arch(%s)", package:arch())
+ end
+ file:print("system = 'android'")
+ file:print("cpu_family = '%s'", cpu_family)
+ file:print("cpu = '%s'", cpu)
+ file:print("endian = 'little'")
+ elseif package:is_plat("mingw") then
+ local cpu
+ local cpu_family
+ if package:is_arch("x64", "x86_64") then
+ cpu = "x86_64"
+ cpu_family = "x86_64"
+ elseif package:is_arch("x86", "i386") then
+ cpu = "i686"
+ cpu_family = "x86"
+ else
+ raise("unsupported arch(%s)", package:arch())
+ end
+ file:print("system = 'windows'")
+ file:print("cpu_family = '%s'", cpu_family)
+ file:print("cpu = '%s'", cpu)
+ file:print("endian = 'little'")
+ elseif package:is_plat("windows") then
+ local cpu
+ local cpu_family
+ if package:is_arch("arm64") then
+ cpu = "aarch64"
+ cpu_family = "aarch64"
+ elseif package:is_arch("x86") then
+ cpu = "x86"
+ cpu_family = "x86"
+ elseif package:is_arch("x64") then
+ cpu = "x86_64"
+ cpu_family = "x86_64"
+ else
+ raise("unsupported arch(%s)", package:arch())
+ end
+ file:print("system = 'windows'")
+ file:print("cpu_family = '%s'", cpu_family)
+ file:print("cpu = '%s'", cpu)
+ file:print("endian = 'little'")
+ elseif package:is_plat("wasm") then
+ file:print("system = 'emscripten'")
+ file:print("cpu_family = 'wasm32'")
+ file:print("cpu = 'wasm32'")
+ file:print("endian = 'little'")
+ else
+ local cpu = package:arch()
+ if package:is_arch("arm64") or package:is_arch("aarch64") then
+ cpu = "aarch64"
+ elseif package:is_arch("arm.*") then
+ cpu = "arm"
+ end
+ local cpu_family = cpu
+ file:print("system = '%s'", package:targetos() or "linux")
+ file:print("cpu_family = '%s'", cpu_family)
+ file:print("cpu = '%s'", cpu)
+ file:print("endian = 'little'")
+ end
+end
+
+-- is the toolchain compatible with the host?
+function _is_toolchain_compatible_with_host(package)
+ for _, name in ipairs(package:config("toolchains")) do
+ if toolchain_utils.is_compatible_with_host(name) then
+ return true
+ end
+ end
+end
+
-- get cross file
-function _get_cross_file(package, opt)
+function _get_configs_file(package, opt)
opt = opt or {}
- local crossfile = path.join(_get_buildir(package, opt), "cross_file.txt")
- if not os.isfile(crossfile) then
- local file = io.open(crossfile, "w")
+ local configsfile = path.join(_get_buildir(package, opt), "configs_file.txt")
+ if not os.isfile(configsfile) then
+ local file = io.open(configsfile, "w")
-- binaries
file:print("[binaries]")
local cc = package:build_getenv("cc")
@@ -165,113 +278,15 @@ function _get_cross_file(package, opt)
file:print("c_link_args=['%s']", table.concat(linkflags, "', '"))
file:print("cpp_link_args=['%s']", table.concat(linkflags, "', '"))
end
- file:print("")
-
- -- host machine
- file:print("[host_machine]")
- if opt.host_machine then
- file:print("%s", opt.host_machine)
- elseif package:is_plat("iphoneos", "macosx") then
- local cpu
- local cpu_family
- if package:is_arch("arm64") then
- cpu = "aarch64"
- cpu_family = "aarch64"
- elseif package:is_arch("armv7") then
- cpu = "arm"
- cpu_family = "arm"
- elseif package:is_arch("x64", "x86_64") then
- cpu = "x86_64"
- cpu_family = "x86_64"
- elseif package:is_arch("x86", "i386") then
- cpu = "i686"
- cpu_family = "x86"
- else
- raise("unsupported arch(%s)", package:arch())
- end
- file:print("system = 'darwin'")
- file:print("cpu_family = '%s'", cpu_family)
- file:print("cpu = '%s'", cpu)
- file:print("endian = 'little'")
- elseif package:is_plat("android") then
- local cpu
- local cpu_family
- if package:is_arch("arm64-v8a") then
- cpu = "aarch64"
- cpu_family = "aarch64"
- elseif package:is_arch("armeabi-v7a") then
- cpu = "arm"
- cpu_family = "arm"
- elseif package:is_arch("x64", "x86_64") then
- cpu = "x86_64"
- cpu_family = "x86_64"
- elseif package:is_arch("x86", "i386") then
- cpu = "i686"
- cpu_family = "x86"
- else
- raise("unsupported arch(%s)", package:arch())
- end
- file:print("system = 'android'")
- file:print("cpu_family = '%s'", cpu_family)
- file:print("cpu = '%s'", cpu)
- file:print("endian = 'little'")
- elseif package:is_plat("mingw") then
- local cpu
- local cpu_family
- if package:is_arch("x64", "x86_64") then
- cpu = "x86_64"
- cpu_family = "x86_64"
- elseif package:is_arch("x86", "i386") then
- cpu = "i686"
- cpu_family = "x86"
- else
- raise("unsupported arch(%s)", package:arch())
- end
- file:print("system = 'windows'")
- file:print("cpu_family = '%s'", cpu_family)
- file:print("cpu = '%s'", cpu)
- file:print("endian = 'little'")
- elseif package:is_plat("windows") then
- local cpu
- local cpu_family
- if package:is_arch("arm64") then
- cpu = "aarch64"
- cpu_family = "aarch64"
- elseif package:is_arch("x86") then
- cpu = "x86"
- cpu_family = "x86"
- elseif package:is_arch("x64") then
- cpu = "x86_64"
- cpu_family = "x86_64"
- else
- raise("unsupported arch(%s)", package:arch())
- end
- file:print("system = 'windows'")
- file:print("cpu_family = '%s'", cpu_family)
- file:print("cpu = '%s'", cpu)
- file:print("endian = 'little'")
- elseif package:is_plat("wasm") then
- file:print("system = 'emscripten'")
- file:print("cpu_family = 'wasm32'")
- file:print("cpu = 'wasm32'")
- file:print("endian = 'little'")
- else
- local cpu = package:arch()
- if package:is_arch("arm64") or package:is_arch("aarch64") then
- cpu = "aarch64"
- elseif package:is_arch("arm.*") then
- cpu = "arm"
- end
- local cpu_family = cpu
- file:print("system = '%s'", package:targetos() or "linux")
- file:print("cpu_family = '%s'", cpu_family)
- file:print("cpu = '%s'", cpu)
- file:print("endian = 'little'")
+
+ if package:is_cross() or opt.cross then
+ file:print("")
+ _insert_cross_configs(package, file, opt)
+ file:print("")
end
- file:print("")
file:close()
end
- return crossfile
+ return configsfile
end
-- get configs
@@ -307,8 +322,15 @@ function _get_configs(package, configs, opt)
end
-- add cross file
- if package:is_cross() or package:is_plat("mingw") then
- table.insert(configs, "--cross-file=" .. _get_cross_file(package, opt))
+ if package:is_cross() then
+ table.insert(configs, "--cross-file=" .. _get_configs_file(package, opt))
+ else if package:config("toolchains") then
+ if _is_toolchain_compatible_with_host(package) then
+ table.insert(configs, "--native-file=" .. _get_configs_file(package, opt))
+ else
+ opt.cross = true
+ table.insert(configs, "--cross-file=" .. _get_configs_file(package, opt))
+ end
end
-- add build directory