summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-03-20 22:33:30 +0800
committerruki <[email protected]>2026-03-20 22:33:30 +0800
commit2b0964deaf94355eea91dff12d017525b49c3737 (patch)
tree8fc1d3decacbf9d2371ef58f96ebbad13316627e
parentfaac0865a79ef38c47bb81d7fa3b42f05ace5538 (diff)
remove native_aot
-rw-r--r--tests/projects/csharp/native_aot/src/app/main.cpp12
-rw-r--r--tests/projects/csharp/native_aot/src/cslib/MathLib.cs9
-rw-r--r--tests/projects/csharp/native_aot/test.lua13
-rw-r--r--tests/projects/csharp/native_aot/xmake.lua11
-rw-r--r--xmake/modules/core/tools/dotnet.lua12
-rw-r--r--xmake/rules/csharp/config.lua10
-rw-r--r--xmake/rules/csharp/generator/properties.lua28
-rw-r--r--xmake/rules/csharp/xmake.lua8
8 files changed, 4 insertions, 99 deletions
diff --git a/tests/projects/csharp/native_aot/src/app/main.cpp b/tests/projects/csharp/native_aot/src/app/main.cpp
deleted file mode 100644
index 070ad7de6..000000000
--- a/tests/projects/csharp/native_aot/src/app/main.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-extern "C" {
- int cs_add(int a, int b);
- int cs_multiply(int a, int b);
-}
-
-int main() {
- printf("cs_add(3,4)=%d\n", cs_add(3, 4));
- printf("cs_multiply(5,6)=%d\n", cs_multiply(5, 6));
- return 0;
-}
diff --git a/tests/projects/csharp/native_aot/src/cslib/MathLib.cs b/tests/projects/csharp/native_aot/src/cslib/MathLib.cs
deleted file mode 100644
index 83255a4b3..000000000
--- a/tests/projects/csharp/native_aot/src/cslib/MathLib.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.Runtime.InteropServices;
-
-public static class MathLib {
- [UnmanagedCallersOnly(EntryPoint = "cs_add")]
- public static int Add(int a, int b) => a + b;
-
- [UnmanagedCallersOnly(EntryPoint = "cs_multiply")]
- public static int Multiply(int a, int b) => a * b;
-}
diff --git a/tests/projects/csharp/native_aot/test.lua b/tests/projects/csharp/native_aot/test.lua
deleted file mode 100644
index d909316b7..000000000
--- a/tests/projects/csharp/native_aot/test.lua
+++ /dev/null
@@ -1,13 +0,0 @@
-import("detect.sdks.find_dotnet")
-
-function test_build(t)
- if is_subhost("msys") then
- return t:skip("csharp not supported on msys")
- end
- local dotnet = find_dotnet()
- if dotnet and dotnet.sdkver then
- t:build()
- else
- return t:skip("dotnet sdk not found")
- end
-end
diff --git a/tests/projects/csharp/native_aot/xmake.lua b/tests/projects/csharp/native_aot/xmake.lua
deleted file mode 100644
index 92f264095..000000000
--- a/tests/projects/csharp/native_aot/xmake.lua
+++ /dev/null
@@ -1,11 +0,0 @@
-add_rules("mode.debug", "mode.release")
-
-target("cslib")
- set_kind("shared")
- add_files("src/cslib/*.cs")
- set_values("csharp.publish_aot", "true")
-
-target("app")
- set_kind("binary")
- add_deps("cslib")
- add_files("src/app/*.cpp")
diff --git a/xmake/modules/core/tools/dotnet.lua b/xmake/modules/core/tools/dotnet.lua
index 90d585b87..9a502b616 100644
--- a/xmake/modules/core/tools/dotnet.lua
+++ b/xmake/modules/core/tools/dotnet.lua
@@ -97,10 +97,7 @@ end
-- make the build arguments list
function buildargv(self, sourcefiles, targetkind, targetfile, flags, opt)
- -- use `dotnet publish` for NativeAOT, otherwise `dotnet build`
- local target = opt and opt.target
- local publish_aot = target and target:values("csharp.publish_aot")
- local argv = {publish_aot and "publish" or "build"}
+ local argv = {"build"}
-- add .csproj file
local csprojfile = _get_csprojfile(opt)
@@ -126,11 +123,4 @@ function build(self, sourcefiles, targetkind, targetfile, flags, opt)
os.mkdir(path.directory(targetfile))
local program, argv = buildargv(self, sourcefiles, targetkind, targetfile, flags, opt)
os.runv(program, argv, {envs = self:runenvs()})
-
- -- fix install_name for NativeAOT shared library on macOS
- local target = opt and opt.target
- local publish_aot = target and target:values("csharp.publish_aot")
- if publish_aot and targetkind == "shared" and self:is_plat("macosx", "iphoneos", "watchos") then
- os.runv("install_name_tool", {"-id", "@rpath/" .. path.filename(targetfile), targetfile})
- end
end
diff --git a/xmake/rules/csharp/config.lua b/xmake/rules/csharp/config.lua
index 452e0e39c..e9dbc71e0 100644
--- a/xmake/rules/csharp/config.lua
+++ b/xmake/rules/csharp/config.lua
@@ -45,16 +45,6 @@ function main(target)
target:data_set("csharp.csproj", csprojfile)
- -- for NativeAOT shared library, export targetfile directly for C/C++ consumers
- -- dotnet outputs without lib prefix, so we use ldflags with full path
- local publish_aot = target:values("csharp.publish_aot")
- if publish_aot and target:is_shared() then
- target:data_set("inherit.links.deplink", false)
- -- on Windows, MSVC linker needs import library (.lib), not .dll
- local linkfile = target:artifactfile("implib") or target:targetfile()
- target:add("ldflags", linkfile, {interface = true, force = true})
- end
-
-- add native shared library search paths for P/Invoke
for _, dep in ipairs(target:orderdeps()) do
if dep:is_shared() and not dep:rule("csharp.build") then
diff --git a/xmake/rules/csharp/generator/properties.lua b/xmake/rules/csharp/generator/properties.lua
index 844c6c0d3..a931b1db3 100644
--- a/xmake/rules/csharp/generator/properties.lua
+++ b/xmake/rules/csharp/generator/properties.lua
@@ -69,25 +69,6 @@ end
-- resolve runtime identifier from user config or auto-detect from target plat/arch
-- e.g. "osx-x64", "osx-arm64", "linux-x64", "win-x64"
-function _resolve_runtime_identifier(context)
- local rid = _get_target_value(context.target, "csharp.runtime_identifier")
- if rid then
- return rid
- end
- -- auto-detect RID when publish_aot is enabled
- local publish_aot = _get_target_value(context.target, "csharp.publish_aot")
- if not publish_aot then
- return nil
- end
- local target = context.target
- local plat = target:plat()
- local arch = target:arch()
- local rid_arch = ({x86_64 = "x64", i386 = "x86", x64 = "x64", x86 = "x86",
- arm64 = "arm64", ["arm64-v8a"] = "arm64", armv7 = "arm"})[arch] or arch
- local rid_os = ({macosx = "osx", linux = "linux", windows = "win", mingw = "win"})[plat] or plat
- return rid_os .. "-" .. rid_arch
-end
-
-- register a single-value csharp.* property entry
function _register_property(register, suffix, xml, default, extra)
local entry = table.join({
@@ -149,7 +130,7 @@ function main()
_register_property(register, "generate_documentation_file", "GenerateDocumentationFile")
_register_property(register, "documentation_file", "DocumentationFile")
- register({kind = "property", xml = "RuntimeIdentifier", resolve = _resolve_runtime_identifier})
+ _register_property(register, "runtime_identifier", "RuntimeIdentifier")
_register_list_property(register, "runtime_identifiers", "RuntimeIdentifiers")
_register_property(register, "self_contained", "SelfContained")
_register_property(register, "use_app_host", "UseAppHost")
@@ -162,13 +143,6 @@ function main()
_register_property(register, "include_native_libraries_for_self_extract", "IncludeNativeLibrariesForSelfExtract")
_register_property(register, "enable_compression_in_single_file", "EnableCompressionInSingleFile")
_register_property(register, "publish_aot", "PublishAot")
- -- auto-set NativeLib=Shared when PublishAot is enabled for shared library
- register({kind = "property", xml = "NativeLib", resolve = function (context)
- local publish_aot = _get_target_value(context.target, "csharp.publish_aot")
- if publish_aot and context.target:is_shared() then
- return "Shared"
- end
- end})
_register_property(register, "strip_symbols", "StripSymbols")
_register_property(register, "enable_trim_analyzer", "EnableTrimAnalyzer")
_register_property(register, "json_serializer_is_reflection_enabled_by_default", "JsonSerializerIsReflectionEnabledByDefault")
diff --git a/xmake/rules/csharp/xmake.lua b/xmake/rules/csharp/xmake.lua
index 603af08c3..9a0a6e43b 100644
--- a/xmake/rules/csharp/xmake.lua
+++ b/xmake/rules/csharp/xmake.lua
@@ -115,14 +115,10 @@
rule("csharp.build")
set_sourcekinds("cs")
on_load(function (target)
+ -- dotnet always outputs .dll for libraries, and no prefix
if target:is_shared() or target:is_static() then
- -- dotnet always outputs without lib prefix
target:set("prefixname", "")
- -- managed libraries use .dll, NativeAOT uses native format (.dylib/.so/.dll)
- local publish_aot = target:values("csharp.publish_aot")
- if not publish_aot then
- target:set("extension", ".dll")
- end
+ target:set("extension", ".dll")
end
end)
on_config("config")