summaryrefslogtreecommitdiff
path: root/xmake/rules/xcode
diff options
context:
space:
mode:
authorruki <[email protected]>2021-08-22 21:04:40 +0800
committerruki <[email protected]>2021-08-22 21:04:40 +0800
commitbe345812688e069c9b83cce60e2b9b40a63eca58 (patch)
treee2594e6d23d861c632ea289c792b505c43c58bcc /xmake/rules/xcode
parentcb1c001283da2daadb3cc5bb986ac3c45c696ba3 (diff)
compile metal
Diffstat (limited to 'xmake/rules/xcode')
-rw-r--r--xmake/rules/xcode/metal/xmake.lua40
1 files changed, 38 insertions, 2 deletions
diff --git a/xmake/rules/xcode/metal/xmake.lua b/xmake/rules/xcode/metal/xmake.lua
index 24c4ecb2a..5e216cc37 100644
--- a/xmake/rules/xcode/metal/xmake.lua
+++ b/xmake/rules/xcode/metal/xmake.lua
@@ -23,7 +23,43 @@ rule("xcode.metal")
-- support add_files("*.metal")
set_extensions(".metal")
- -- build *.metal to *.metallib
- on_build_file(function (target, sourcefile, opt)
+ on_load(function (target)
+ local cross
+ if target:is_plat("macosx") then
+ cross = "xcrun -sdk macosx "
+ elseif target:is_plat("iphoneos") then
+ cross = target:is_arch("i386", "x86_64") and "xcrun -sdk iphonesimulator " or "xcrun -sdk iphoneos "
+ elseif target:is_plat("watchos") then
+ cross = target:is_arch("i386") and "xcrun -sdk watchsimulator " or "xcrun -sdk watchos "
+ elseif target:is_plat("appletvos") then
+ cross = target:is_arch("i386", "x86_64") and "xcrun -sdk appletvsimulator " or "xcrun -sdk appletvos "
+ else
+ raise("unknown platform for xcode!")
+ end
+ target:data_set("xcode.metal.cross", cross)
+ end)
+
+ -- build *.metal to *.air
+ on_buildcmd_file(function (target, batchcmds, sourcefile, opt)
+
+ -- get metal
+ import("lib.detect.find_tool")
+ local cross = target:data("xcode.metal.cross")
+ local metal = assert(find_tool("metal", {program = cross .. " metal"}), "metal command not found!")
+
+ -- add objectfile (.air)
+ local objectfile = target:objectfile(sourcefile) .. ".air"
+
+ -- add commands
+ batchcmds:show_progress(opt.progress, "${color.build.object}compiling.metal %s", sourcefile)
+ batchcmds:mkdir(path.directory(objectfile))
+ batchcmds:vrunv(metal.program, {"-c", "-o", objectfile, sourcefile})
+
+ -- add deps
+ batchcmds:add_depfiles(sourcefile)
+ batchcmds:set_depmtime(os.mtime(objectfile))
+ batchcmds:set_depcache(target:dependfile(objectfile))
end)
+
+ -- link *.air to *.metallib