瀏覽代碼

Add default platform

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7074 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 年之前
父節點
當前提交
ee84891b38
共有 1 個文件被更改,包括 45 次插入16 次删除
  1. 45 16
      source/FoxCompiler.Mod

+ 45 - 16
source/FoxCompiler.Mod

@@ -314,7 +314,7 @@ TYPE
 
 		position := input.Pos();
 		parsed := options.Parse(input,NIL);
-		IF options.GetString("platform", name) THEN
+		IF options.GetString("platform", name) OR GetDefaultPlatform(name) THEN
 			defaults := platforms.Get(name);
 			IF defaults = NIL THEN 	
 				error.String("Unknown platform"); error.Ln 
@@ -509,31 +509,60 @@ TYPE
 		END;
 	END CompileReader;
 
-	VAR platforms: Options.Defaults;
+	VAR 
+		platforms: Options.Defaults;
+		defaultPlatform: ARRAY 32 OF CHAR;
 	
-	PROCEDURE AddPlatform(CONST name: ARRAY OF CHAR; CONST defaults: ARRAY OF CHAR);
+	PROCEDURE DoAddPlatform(CONST name: ARRAY OF CHAR; CONST defaults: ARRAY OF CHAR);
 	BEGIN
 		platforms.Add(name, defaults);
-	END AddPlatform;
+	END DoAddPlatform;
 	
 	PROCEDURE ShowDefaults*(context: Commands.Context);
 	BEGIN
 		platforms.Show(context.out)
 	END ShowDefaults;
 	
-
+	PROCEDURE AddPlatform*(context: Commands.Context);
+	VAR name: ARRAY 32 OF CHAR; defaults: ARRAY 1024 OF CHAR;
+	BEGIN
+		IF context.arg.GetString(name) & context.arg.GetString(defaults) THEN
+			DoAddPlatform(name, defaults);
+		END;
+	END AddPlatform;
+	
+	PROCEDURE SetDefaultPlatform*(context: Commands.Context);
+	VAR name: ARRAY 32 OF CHAR;
+	BEGIN
+		IF context.arg.GetString(name) THEN
+			COPY(name, defaultPlatform);
+		END;
+	END SetDefaultPlatform;
+	
+	PROCEDURE GetDefaultPlatform(VAR name: ARRAY OF CHAR): BOOLEAN;
+	BEGIN
+		IF defaultPlatform # "" THEN
+			COPY(defaultPlatform, name);
+			RETURN TRUE
+		ELSE
+			RETURN FALSE
+		END
+	END GetDefaultPlatform;
+	
+	
 BEGIN
 	NEW(platforms);
+	defaultPlatform := "";
 	(* platform definitions hard coded for the common cases -- maybe (parts of it) should be outsourced to a file ?*)
-	AddPlatform("Win32","-b=AMD --objectFile=Binary --symbolFile=Binary --objectFileExtensions=.Obw --symbolFileExtension=.Obw");
-	AddPlatform("Win32G","-b=AMD --objectFile=Generic --symbolFile=Textual --newObjectFile --mergeSections --objectFileExtension=.GofW --symbolFileExtension=.SymW --preciseGC");
-	AddPlatform("ARM","-b=ARM --objectFile=Generic --newObjectFile --metaData=simple --objectFileExtension=.Goa --symbolFileExtension=.Sya");
-	AddPlatform("Minos","-b=ARM --objectFile=Minos"); 
-	AddPlatform("TRM","-b=TRM --objectFile=Generic --newObjectFile --metaData=simple --objectFileExtension=.GofT --symbolFileExtension=.SymT");
-	AddPlatform("TRMI","-b=TRM --objectFile=Intermediate --newObjectFile --metaData=simple --objectFileExtension=.IroT --symbolFileExtension=.IrsT");
-	AddPlatform("A2","-b=AMD --objectFile=Binary --objectFileExtension=.Obx --symbolFileExtension=.Obx");
-	AddPlatform("A2G","-b=AMD --objectFile=Generic --newObjectFile --mergeSections --objectFileExtension=.GofG --symbolFileExtension=.SymG");
-	AddPlatform("A2Coop","-b=AMD --cooperative --objectFile=Generic --newObjectFile --traceModule=Trace --mergeSections");
-	AddPlatform("ARMA2","-b=ARM --objectFile=Generic --newObjectFile --symbolFile=Textual --mergeSections");
-	AddPlatform("Linux32G","-b=AMD --objectFile=Generic --newObjectFile --traceModule=Trace --symbolFile=Textual --objectFileExtension=.GofU --symbolFileExtension=.SymU --preciseGC");
+	DoAddPlatform("Win32","-b=AMD --objectFile=Binary --symbolFile=Binary --objectFileExtensions=.Obw --symbolFileExtension=.Obw");
+	DoAddPlatform("Win32G","-b=AMD --objectFile=Generic --symbolFile=Textual --newObjectFile --mergeSections --objectFileExtension=.GofW --symbolFileExtension=.SymW --preciseGC");
+	DoAddPlatform("ARM","-b=ARM --objectFile=Generic --newObjectFile --metaData=simple --objectFileExtension=.Goa --symbolFileExtension=.Sya");
+	DoAddPlatform("Minos","-b=ARM --objectFile=Minos"); 
+	DoAddPlatform("TRM","-b=TRM --objectFile=Generic --newObjectFile --metaData=simple --objectFileExtension=.GofT --symbolFileExtension=.SymT");
+	DoAddPlatform("TRMI","-b=TRM --objectFile=Intermediate --newObjectFile --metaData=simple --objectFileExtension=.IroT --symbolFileExtension=.IrsT");
+	DoAddPlatform("A2","-b=AMD --objectFile=Binary --objectFileExtension=.Obx --symbolFileExtension=.Obx");
+	DoAddPlatform("A2G","-b=AMD --objectFile=Generic --newObjectFile --mergeSections --objectFileExtension=.GofG --symbolFileExtension=.SymG");
+	DoAddPlatform("A2Coop","-b=AMD --cooperative --objectFile=Generic --newObjectFile --traceModule=Trace --mergeSections");
+	DoAddPlatform("ARMA2","-b=ARM --objectFile=Generic --newObjectFile --symbolFile=Textual --mergeSections");
+	DoAddPlatform("Linux32G","-b=AMD --objectFile=Generic --newObjectFile --traceModule=Trace --symbolFile=Textual --objectFileExtension=.GofU --symbolFileExtension=.SymU --preciseGC");
 END Compiler.