compiler: improve command line argument parsing
To get more compatibility with the go command, implement a similar command line interface (with "tinygo build <package>" etc.). Other than that, an all-round cleanup of command parsing.
Этот коммит содержится в:
		
							родитель
							
								
									81b9edbe65
								
							
						
					
					
						коммит
						0779ee6088
					
				
					 2 изменённых файлов: 29 добавлений и 8 удалений
				
			
		
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -96,7 +96,7 @@ build/tgo: *.go | |||
| 
 | ||||
| # Build IR with the Go compiler.
 | ||||
| build/%.o: src/examples/% src/examples/%/*.go build/tgo src/runtime/*.go build/runtime-$(TARGET)-combined.bc | ||||
| 	./build/tgo $(TGOFLAGS) -runtime build/runtime-$(TARGET)-combined.bc -o $@ $(subst src/,,$<) | ||||
| 	./build/tgo build $(TGOFLAGS) -runtime build/runtime-$(TARGET)-combined.bc -o $@ $(subst src/,,$<) | ||||
| 
 | ||||
| # Compile C sources for the runtime.
 | ||||
| build/%.bc: src/runtime/%.c src/runtime/*.h | ||||
|  |  | |||
							
								
								
									
										35
									
								
								main.go
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								main.go
									
										
									
									
									
								
							|  | @ -76,6 +76,14 @@ func Compile(pkgName, runtimePath, outpath, target string, printIR, dumpSSA bool | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func usage() { | ||||
| 	fmt.Fprintf(os.Stderr, "usage: %s command [-printir] -runtime=<runtime.bc> [-target=<target>] -o <output> <input>\n", os.Args[0]) | ||||
| 	fmt.Fprintln(os.Stderr, "\ncommands:") | ||||
| 	fmt.Fprintln(os.Stderr, "  build: compile packages and dependencies") | ||||
| 	fmt.Fprintln(os.Stderr, "\nflags:") | ||||
| 	flag.PrintDefaults() | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
| 	outpath := flag.String("o", "", "output filename") | ||||
| 	printIR := flag.Bool("printir", false, "print LLVM IR") | ||||
|  | @ -83,19 +91,32 @@ func main() { | |||
| 	runtime := flag.String("runtime", "", "runtime LLVM bitcode files (from C sources)") | ||||
| 	target := flag.String("target", llvm.DefaultTargetTriple(), "LLVM target") | ||||
| 
 | ||||
| 	flag.Parse() | ||||
| 	if len(os.Args) < 2 { | ||||
| 		usage() | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	command := os.Args[1] | ||||
| 
 | ||||
| 	flag.CommandLine.Parse(os.Args[2:]) | ||||
| 
 | ||||
| 	if *outpath == "" || flag.NArg() != 1 { | ||||
| 		fmt.Fprintf(os.Stderr, "usage: %s [-printir] -runtime=<runtime.bc> [-target=<target>] -o <output> <input>", os.Args[0]) | ||||
| 		flag.PrintDefaults() | ||||
| 		return | ||||
| 		usage() | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 
 | ||||
| 	os.Setenv("CC", "clang -target="+*target) | ||||
| 
 | ||||
| 	err := Compile(flag.Args()[0], *runtime, *outpath, *target, *printIR, *dumpSSA) | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintln(os.Stderr, "error:", err) | ||||
| 	switch command { | ||||
| 	case "build": | ||||
| 		err := Compile(flag.Arg(0), *runtime, *outpath, *target, *printIR, *dumpSSA) | ||||
| 		if err != nil { | ||||
| 			fmt.Fprintln(os.Stderr, "error:", err) | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 	case "help": | ||||
| 		usage() | ||||
| 	default: | ||||
| 		usage() | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Ayke van Laethem
						Ayke van Laethem