Преглед изворни кода

[cs] Add support for .NET core (#8391)

* [cs] Add support for .NET core

* Rename netcore-ver define
Rudy Ges пре 6 година
родитељ
комит
d8c4bef1e4
2 измењених фајлова са 24 додато и 3 уклоњено
  1. 7 1
      src-json/define.json
  2. 17 2
      src/codegen/dotnet.ml

+ 7 - 1
src-json/define.json

@@ -351,10 +351,16 @@
 		"doc": "<version:20-45> Sets the .NET version to be targeted",
 		"platforms": ["cs"]
 	},
+	{
+		"name": "NetcoreVer",
+		"define": "netcore_ver",
+		"doc": "<version:x.x.x> Sets the .NET core version to be targeted",
+		"platforms": ["cs"]
+	},
 	{
 		"name": "NetTarget",
 		"define": "net_target",
-		"doc": "<name> Sets the .NET target. Defaults to \"net\". xbox, micro (Micro Framework), compact (Compact Framework) are some valid values",
+		"doc": "<name> Sets the .NET target. Defaults to \"net\". netcore, xbox, micro (Micro Framework), compact (Compact Framework) are some valid values",
 		"platforms": ["cs"]
 	},
 	{

+ 17 - 2
src/codegen/dotnet.ml

@@ -1214,12 +1214,21 @@ let add_net_lib com file std =
 
 
 let before_generate com =
+	(* netcore version *)
+	let netcore_ver = try Some(PMap.find "netcore_ver" com.defines.Define.values) with Not_found -> None in
+
 	(* net version *)
 	let net_ver =
 		try
 			let ver = PMap.find "net_ver" com.defines.Define.values in
 			try int_of_string ver with Failure _ -> raise (Arg.Bad "Invalid value for -D net-ver. Expected format: xx (e.g. 20, 35, 40, 45)")
-		with Not_found ->
+		with Not_found when netcore_ver != None ->
+			(* 4.7 was released around .NET core 2.1 *)
+			(* Note: better version mapping should be implemented some day,
+			 * unless we just wait for .NET unification in october 2020 *)
+			Common.define_value com Define.NetVer "47";
+			47
+		| Not_found ->
 			Common.define_value com Define.NetVer "20";
 			20
 	in
@@ -1252,7 +1261,13 @@ let before_generate com =
 		| s -> s
 	in
 	(* look for all dirs that have the digraph NET_TARGET-NET_VER *)
-	let digraph = net_target ^ "-" ^ string_of_int net_ver in
+	let digraph = match net_target with
+	| "netcore" ->
+		(match netcore_ver with
+		| None -> failwith (".NET target is defined as netcore but -D netcore-ver is missing");
+		| Some(ver) -> net_target ^ "-" ^ ver);
+	| _ -> net_target ^ "-" ^ string_of_int net_ver in
+
 	let matched = ref [] in
 	List.iter (fun f -> try
 		let f = Common.find_file com (f ^ "/" ^ digraph) in