mirror of
https://github.com/danog/gllvm.git
synced 2024-11-30 07:28:58 +01:00
Actually use the args slice passes to shared.Extract
This commit is contained in:
parent
4c6313089a
commit
bd88b14e25
2
Makefile
2
Makefile
@ -10,4 +10,4 @@ format:
|
|||||||
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f data/hello tests/.helloworld.c.o tests/.helloworld.c.o.bc
|
rm -f data/hello data/hello.bc [td]*/.helloworld.c.o [td]*/.helloworld.c.o.bc
|
||||||
|
@ -68,8 +68,8 @@ type extractionArgs struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Extract extracts the LLVM bitcode according to the arguments it is passed.
|
//Extract extracts the LLVM bitcode according to the arguments it is passed.
|
||||||
func Extract(args []string) {
|
func Extract(args []string)(exitCode int) {
|
||||||
ea := parseSwitches()
|
ea := parseSwitches(args)
|
||||||
|
|
||||||
// Set arguments according to runtime OS
|
// Set arguments according to runtime OS
|
||||||
switch platform := runtime.GOOS; platform {
|
switch platform := runtime.GOOS; platform {
|
||||||
@ -123,6 +123,8 @@ func Extract(args []string) {
|
|||||||
LogFatal("Incorrect input file type %v.", ea.InputType)
|
LogFatal("Incorrect input file type %v.", ea.InputType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//need to actually get an exitCode eventually.
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func resolveTool(defaultPath string, envPath string, usrPath string) (path string) {
|
func resolveTool(defaultPath string, envPath string, usrPath string) (path string) {
|
||||||
@ -150,42 +152,26 @@ func resolveTool(defaultPath string, envPath string, usrPath string) (path strin
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseSwitches() (ea extractionArgs) {
|
func parseSwitches(args []string) (ea extractionArgs) {
|
||||||
|
var flagSet *flag.FlagSet = flag.NewFlagSet(args[0], flag.ExitOnError)
|
||||||
flag.BoolVar(&ea.Verbose, "v", false, "verbose mode")
|
flagSet.BoolVar(&ea.Verbose, "v", false, "verbose mode")
|
||||||
|
flagSet.BoolVar(&ea.WriteManifest, "m", false, "write the manifest")
|
||||||
flag.BoolVar(&ea.WriteManifest, "m", false, "write the manifest")
|
flagSet.BoolVar(&ea.SortBitcodeFiles, "s", false, "sort the bitcode files")
|
||||||
|
flagSet.BoolVar(&ea.BuildBitcodeModule, "b", false, "build a bitcode module")
|
||||||
flag.BoolVar(&ea.SortBitcodeFiles, "s", false, "sort the bitcode files")
|
flagSet.StringVar(&ea.OutputFile, "o", "", "the output file")
|
||||||
|
flagSet.StringVar(&ea.LlvmArchiverName, "a", "llvm-ar", "the llvm archiver (i.e. llvm-ar)")
|
||||||
flag.BoolVar(&ea.BuildBitcodeModule, "b", false, "build a bitcode module")
|
flagSet.StringVar(&ea.ArchiverName, "r", "ar", "the system archiver (i.e. ar)")
|
||||||
|
flagSet.StringVar(&ea.LlvmLinkerName, "l", "llvm-link", "the llvm linker (i.e. llvm-link)")
|
||||||
flag.StringVar(&ea.OutputFile, "o", "", "the output file")
|
flagSet.IntVar(&ea.LinkArgSize, "n", 0, "maximum llvm-link command line size (in bytes)")
|
||||||
|
flagSet.BoolVar(&ea.KeepTemp, "t", false, "keep temporary linking folder")
|
||||||
flag.StringVar(&ea.LlvmArchiverName, "a", "llvm-ar", "the llvm archiver (i.e. llvm-ar)")
|
flagSet.Parse(args[1:])
|
||||||
|
|
||||||
flag.StringVar(&ea.ArchiverName, "r", "ar", "the system archiver (i.e. ar)")
|
|
||||||
|
|
||||||
flag.StringVar(&ea.LlvmLinkerName, "l", "llvm-link", "the llvm linker (i.e. llvm-link)")
|
|
||||||
|
|
||||||
flag.IntVar(&ea.LinkArgSize, "n", 0, "maximum llvm-link command line size (in bytes)")
|
|
||||||
|
|
||||||
flag.BoolVar(&ea.KeepTemp, "t", false, "keep temporary linking folder")
|
|
||||||
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
ea.LlvmArchiverName = resolveTool("llvm-ar", LLVMARName, ea.LlvmArchiverName)
|
ea.LlvmArchiverName = resolveTool("llvm-ar", LLVMARName, ea.LlvmArchiverName)
|
||||||
|
|
||||||
ea.LlvmLinkerName = resolveTool("llvm-link", LLVMLINKName, ea.LlvmLinkerName)
|
ea.LlvmLinkerName = resolveTool("llvm-link", LLVMLINKName, ea.LlvmLinkerName)
|
||||||
|
inputFiles := flagSet.Args()
|
||||||
inputFiles := flag.Args()
|
|
||||||
|
|
||||||
if len(inputFiles) != 1 {
|
if len(inputFiles) != 1 {
|
||||||
LogFatal("Can currently only deal with exactly one input file, sorry. You gave me %v input files.\n", len(inputFiles))
|
LogFatal("Can currently only deal with exactly one input file, sorry. You gave me %v input files.\n", len(inputFiles))
|
||||||
}
|
}
|
||||||
|
|
||||||
ea.InputFile = inputFiles[0]
|
ea.InputFile = inputFiles[0]
|
||||||
|
|
||||||
if _, err := os.Stat(ea.InputFile); os.IsNotExist(err) {
|
if _, err := os.Stat(ea.InputFile); os.IsNotExist(err) {
|
||||||
LogFatal("The input file %s does not exist.", ea.InputFile)
|
LogFatal("The input file %s does not exist.", ea.InputFile)
|
||||||
}
|
}
|
||||||
@ -195,7 +181,7 @@ func parseSwitches() (ea extractionArgs) {
|
|||||||
}
|
}
|
||||||
ea.InputFile = realPath
|
ea.InputFile = realPath
|
||||||
ea.InputType = getFileType(realPath)
|
ea.InputType = getFileType(realPath)
|
||||||
|
//<this should be a method of extractionArgs>
|
||||||
LogInfo("ea.Verbose: %v\n", ea.Verbose)
|
LogInfo("ea.Verbose: %v\n", ea.Verbose)
|
||||||
LogInfo("ea.WriteManifest: %v\n", ea.WriteManifest)
|
LogInfo("ea.WriteManifest: %v\n", ea.WriteManifest)
|
||||||
LogInfo("ea.BuildBitcodeModule: %v\n", ea.BuildBitcodeModule)
|
LogInfo("ea.BuildBitcodeModule: %v\n", ea.BuildBitcodeModule)
|
||||||
@ -207,7 +193,7 @@ func parseSwitches() (ea extractionArgs) {
|
|||||||
LogInfo("ea.InputFile real path: %v\n", ea.InputFile)
|
LogInfo("ea.InputFile real path: %v\n", ea.InputFile)
|
||||||
LogInfo("ea.LinkArgSize %d", ea.LinkArgSize)
|
LogInfo("ea.LinkArgSize %d", ea.LinkArgSize)
|
||||||
LogInfo("ea.KeepTemp %v", ea.KeepTemp)
|
LogInfo("ea.KeepTemp %v", ea.KeepTemp)
|
||||||
|
//</this should be a method of extractionArgs>
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,7 +334,7 @@ func fetchTOC(ea extractionArgs, inputFile string) map[string]int {
|
|||||||
return toc
|
return toc
|
||||||
}
|
}
|
||||||
|
|
||||||
//handleArchive processes a archive, and creates either a bitcode archive, or a module, depending on the flags used.
|
//handleArchive processes an archive, and creates either a bitcode archive, or a module, depending on the flags used.
|
||||||
//
|
//
|
||||||
// Archives are strange beasts. handleArchive processes the archive by:
|
// Archives are strange beasts. handleArchive processes the archive by:
|
||||||
//
|
//
|
||||||
|
@ -16,4 +16,16 @@ func Test_basic(t *testing.T) {
|
|||||||
} else {
|
} else {
|
||||||
fmt.Println("Compiled OK")
|
fmt.Println("Compiled OK")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
args = []string{"get-bc", "-v", "../data/hello"}
|
||||||
|
|
||||||
|
exitCode = shared.Extract(args)
|
||||||
|
|
||||||
|
if exitCode != 0 {
|
||||||
|
t.Errorf("Extraction of %v returned %v\n", args, exitCode)
|
||||||
|
} else {
|
||||||
|
fmt.Println("Extraction OK")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user