mirror of
https://github.com/danog/gllvm.git
synced 2024-11-26 19:14:43 +01:00
Merge pull request #51 from woodruffw-forks/ww/llvm-link-env-flags
Support LLVM_LINK_FLAGS
This commit is contained in:
commit
b0c77e1ac2
@ -29,6 +29,7 @@ bitcode in parallel, and is faster. A comparison between the two tools can be gl
|
||||
| LLVM_COMPILER | *not supported* (clang only)|
|
||||
| LLVM_GCC_PREFIX | *not supported* (clang only)|
|
||||
| LLVM_DRAGONEGG_PLUGIN | *not supported* (clang only)|
|
||||
| LLVM_LINK_FLAGS | *not supported* |
|
||||
|
||||
|
||||
This project, `gllvm`, provides tools for building whole-program (or
|
||||
@ -252,6 +253,11 @@ produces the bitcode. This can be fulfilled by setting the
|
||||
`LLVM_BITCODE_GENERATION_FLAGS` environment variable to the desired
|
||||
flags, for example `"-flto -fwhole-program-vtables"`.
|
||||
|
||||
In other situations it is desirable to pass certain flags to `llvm-link` in the step
|
||||
that merges multiple individual bitcode files together (i.e., within `get-bc`).
|
||||
This can be fulfilled by setting the `LLVM_LINK_FLAGS` environment variable to
|
||||
the desired flags, for example `"-internalize -only-needed"`.
|
||||
|
||||
## Beware of link time optimization.
|
||||
|
||||
If the package you are building happens to take advantage of recent `clang` developments
|
||||
|
@ -68,6 +68,9 @@ var LLVMARName string
|
||||
//LLVMLINKName is the user configured name of the llvm-link.
|
||||
var LLVMLINKName string
|
||||
|
||||
//LLVMLINKFlags is the user configured list of flags to append to llvm-link.
|
||||
var LLVMLINKFlags []string
|
||||
|
||||
//LLVMConfigureOnly is the user configured flag indicating a single pass mode is required.
|
||||
var LLVMConfigureOnly string
|
||||
|
||||
@ -99,6 +102,7 @@ const (
|
||||
envf = "LLVM_F_NAME"
|
||||
envar = "LLVM_AR_NAME"
|
||||
envlnk = "LLVM_LINK_NAME"
|
||||
envlnkflgs = "LLVM_LINK_FLAGS"
|
||||
envcfg = "WLLVM_CONFIGURE_ONLY"
|
||||
envbc = "WLLVM_BC_STORE"
|
||||
envlvl = "WLLVM_OUTPUT_LEVEL"
|
||||
@ -142,6 +146,7 @@ func ResetEnvironment() {
|
||||
LLVMFName = ""
|
||||
LLVMARName = ""
|
||||
LLVMLINKName = ""
|
||||
LLVMLINKFlags = []string{}
|
||||
LLVMConfigureOnly = ""
|
||||
LLVMBitcodeStorePath = ""
|
||||
LLVMLoggingLevel = ""
|
||||
@ -160,6 +165,7 @@ func FetchEnvironment() {
|
||||
LLVMFName = os.Getenv(envf)
|
||||
LLVMARName = os.Getenv(envar)
|
||||
LLVMLINKName = os.Getenv(envlnk)
|
||||
LLVMLINKFlags = strings.Fields(os.Getenv(envlnkflgs))
|
||||
|
||||
LLVMConfigureOnly = os.Getenv(envcfg)
|
||||
LLVMBitcodeStorePath = os.Getenv(envbc)
|
||||
|
@ -661,6 +661,10 @@ func linkBitcodeFilesIncrementally(ea ExtractionArgs, filesToLink []string, argM
|
||||
if ea.Verbose {
|
||||
linkArgs = append(linkArgs, "-v")
|
||||
}
|
||||
|
||||
// Append any custom llvm-link flags requested by the user.
|
||||
// We only do this for the last llvm-link invocation.
|
||||
linkArgs = append(linkArgs, LLVMLINKFlags...)
|
||||
linkArgs = append(linkArgs, tmpFileList...)
|
||||
|
||||
linkArgs = append(linkArgs, "-o", ea.OutputFile)
|
||||
@ -682,10 +686,15 @@ func linkBitcodeFiles(ea ExtractionArgs, filesToLink []string) (success bool) {
|
||||
if ea.Verbose {
|
||||
linkArgs = append(linkArgs, "-v")
|
||||
}
|
||||
|
||||
if getsize(filesToLink) > argMax { //command line size too large for the OS (necessitated by chromium)
|
||||
return linkBitcodeFilesIncrementally(ea, filesToLink, argMax, linkArgs)
|
||||
}
|
||||
var err error
|
||||
|
||||
// Append any custom llvm-link flags requested by the user.
|
||||
// N.B. that we do this specially for the incremental link case.
|
||||
linkArgs = append(linkArgs, LLVMLINKFlags...)
|
||||
linkArgs = append(linkArgs, "-o", ea.OutputFile)
|
||||
linkArgs = append(linkArgs, filesToLink...)
|
||||
success, err = execCmd(ea.LlvmLinkerName, linkArgs, "")
|
||||
|
Loading…
Reference in New Issue
Block a user