Rui Ueyama
2014-Oct-08 19:52 UTC
[LLVMdev] [lld] lld build needs to have flags that specify what flavor/targets to build ?
On Wed, Oct 8, 2014 at 11:45 AM, Alex Rosenberg <alexr at leftfield.org> wrote:> This it totally "armchair quarterbacking," but I am a little frustrated > that we've come to conflate flavors and targets. > > The original intent of flavors was to internally translate each flavor > into a neutral lld-native command line syntax. We now have baked in > assumptions of behavior based on flavor. > > If I want to cross-compile from OS X for Windows PECOFF, I don't think it > feels correct to use a LINK.EXE command line flavor from OS X and I'd > rather use an lld-native flavor. >What do we get by making each flavor's driver to a translator to the "universal" lld driver? The merit is not obvious to me, while I'm sure we would have to invent a new syntax for the unviersal driver and maintain the extra layer. Another question is that if we make such universal driver, it will support all the options of all flavors in some way, but what combination of the options are allowed? Some option mapping is obvious; for example --verbose in ld and /verbose in link.exe should be mapped to the same option. However, --entry and /entry should not be mapped to the same option, because their semantics are slightly different. If - lazy is given, should it be interpreted as /delayload when linking PECOFF? We may be able to answer all the questions. But it's not clear to me what we get from all that efforts. Alex> > On Oct 7, 2014, at 2:22 PM, Shankar Easwaran <shankare at codeaurora.org> > wrote: > > > On 10/7/2014 4:10 PM, Nick Kledzik wrote: > >> Shankar, > >> > >> Can you give provide a scenario where you want this? I’m not sure what > you want here. > > > > a) LLVM could be built just for one target(LLVM_TARGETS_TO_BUILD) > > b) With LTO this case might happen more often, where an user would have > compiled LLVM just for one architecture and lld would support other > architectures that LLVM would not support. > > c) Printing all the targets/flavors that the linker currently supports. > > > > On Oct 7, 2014, at 2:03 PM, Shankar Easwaran <shankare at codeaurora.org> > wrote: > >>> Hi, > >>> > >>> I think lld needs to have an infrastructure as part of the build > process to build specific flavors and specific targets. > >> This sounds like you want config-time choices (e.g. build a linker to > only support ELF/x86 such as for a JIT). > > Yes. > > > >>> For this I was thinking that the Registry expand to consider flavors > and targets that are part of the build process. > >>> > >>> So each flavor/target would register and the Driver would walk through > the list of handlers to check if there is a handler defined for that > flavor/target. > >> This sounds like you want everything decided at runtime (e.g. all > flavors registers all readers). > > Yes, right. > > > > Shankar Easwaran > > > > -- > > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, > hosted by the Linux Foundation > > > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141008/2bf2c9e2/attachment.html>
Alex Rosenberg
2014-Oct-09 03:16 UTC
[LLVMdev] [lld] lld build needs to have flags that specify what flavor/targets to build ?
On Oct 8, 2014, at 12:52 PM, Rui Ueyama <ruiu at google.com> wrote:> >> On Wed, Oct 8, 2014 at 11:45 AM, Alex Rosenberg <alexr at leftfield.org> wrote: >> This it totally "armchair quarterbacking," but I am a little frustrated that we've come to conflate flavors and targets. >> >> The original intent of flavors was to internally translate each flavor into a neutral lld-native command line syntax. We now have baked in assumptions of behavior based on flavor. >> >> If I want to cross-compile from OS X for Windows PECOFF, I don't think it feels correct to use a LINK.EXE command line flavor from OS X and I'd rather use an lld-native flavor. > > What do we get by making each flavor's driver to a translator to the "universal" lld driver? The merit is not obvious to me, while I'm sure we would have to invent a new syntax for the unviersal driver and maintain the extra layer.As it currently stands, we have no control over the lld command line, only to accept the existing options from the existing flavors of existing products. We should be able to invent our own options based on whatever ideas we implement.> Another question is that if we make such universal driver, it will support all the options of all flavors in some way, but what combination of the options are allowed? Some option mapping is obvious; for example --verbose in ld and /verbose in link.exe should be mapped to the same option. However, --entry and /entry should not be mapped to the same option, because their semantics are slightly different. If - lazy is given, should it be interpreted as /delayload when linking PECOFF?Yes, behaviors must be chosen. I don't see much difference here compared with linker scripts vs. ld64's command line versions of those features. In the same way, we need to form a completely capable option set.> We may be able to answer all the questions. But it's not clear to me what we get from all that efforts.We get to control our own destiny. Alex>> Alex >> >> On Oct 7, 2014, at 2:22 PM, Shankar Easwaran <shankare at codeaurora.org> wrote: >> >> > On 10/7/2014 4:10 PM, Nick Kledzik wrote: >> >> Shankar, >> >> >> >> Can you give provide a scenario where you want this? I’m not sure what you want here. >> > >> > a) LLVM could be built just for one target(LLVM_TARGETS_TO_BUILD) >> > b) With LTO this case might happen more often, where an user would have compiled LLVM just for one architecture and lld would support other architectures that LLVM would not support. >> > c) Printing all the targets/flavors that the linker currently supports. >> > >> > On Oct 7, 2014, at 2:03 PM, Shankar Easwaran <shankare at codeaurora.org> wrote: >> >>> Hi, >> >>> >> >>> I think lld needs to have an infrastructure as part of the build process to build specific flavors and specific targets. >> >> This sounds like you want config-time choices (e.g. build a linker to only support ELF/x86 such as for a JIT). >> > Yes. >> > >> >>> For this I was thinking that the Registry expand to consider flavors and targets that are part of the build process. >> >>> >> >>> So each flavor/target would register and the Driver would walk through the list of handlers to check if there is a handler defined for that flavor/target. >> >> This sounds like you want everything decided at runtime (e.g. all flavors registers all readers). >> > Yes, right. >> > >> > Shankar Easwaran >> > >> > -- >> > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation >> > >> > _______________________________________________ >> > LLVM Developers mailing list >> > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141008/1d12a059/attachment.html>
Rui Ueyama
2014-Oct-09 22:30 UTC
[LLVMdev] [lld] lld build needs to have flags that specify what flavor/targets to build ?
On Wed, Oct 8, 2014 at 8:16 PM, Alex Rosenberg <alexr at leftfield.org> wrote:> On Oct 8, 2014, at 12:52 PM, Rui Ueyama <ruiu at google.com> wrote: > > On Wed, Oct 8, 2014 at 11:45 AM, Alex Rosenberg <alexr at leftfield.org> > wrote: > >> This it totally "armchair quarterbacking," but I am a little frustrated >> that we've come to conflate flavors and targets. >> >> The original intent of flavors was to internally translate each flavor >> into a neutral lld-native command line syntax. We now have baked in >> assumptions of behavior based on flavor. >> >> If I want to cross-compile from OS X for Windows PECOFF, I don't think it >> feels correct to use a LINK.EXE command line flavor from OS X and I'd >> rather use an lld-native flavor. >> > > What do we get by making each flavor's driver to a translator to the > "universal" lld driver? The merit is not obvious to me, while I'm sure we > would have to invent a new syntax for the unviersal driver and maintain the > extra layer. > > > As it currently stands, we have no control over the lld command line, only > to accept the existing options from the existing flavors of existing > products. We should be able to invent our own options based on whatever > ideas we implement. > > Another question is that if we make such universal driver, it will support > all the options of all flavors in some way, but what combination of the > options are allowed? Some option mapping is obvious; for example --verbose > in ld and /verbose in link.exe should be mapped to the same option. > However, --entry and /entry should not be mapped to the same option, > because their semantics are slightly different. If - lazy is given, should > it be interpreted as /delayload when linking PECOFF? > > > Yes, behaviors must be chosen. I don't see much difference here compared > with linker scripts vs. ld64's command line versions of those features. In > the same way, we need to form a completely capable option set. > > We may be able to answer all the questions. But it's not clear to me what > we get from all that efforts. > > > We get to control our own destiny. >I don't think I understand the point. We are free to add a new command line option to an existing driver, as long as it doesn't conflict with existing ones, to extend the driver. Like most GNU commands did to the Unix counterparts. So the statement that we have no control over LLD command line doesn't seem correct to me.> Alex > > > Alex >> >> On Oct 7, 2014, at 2:22 PM, Shankar Easwaran <shankare at codeaurora.org> >> wrote: >> >> > On 10/7/2014 4:10 PM, Nick Kledzik wrote: >> >> Shankar, >> >> >> >> Can you give provide a scenario where you want this? I’m not sure >> what you want here. >> > >> > a) LLVM could be built just for one target(LLVM_TARGETS_TO_BUILD) >> > b) With LTO this case might happen more often, where an user would have >> compiled LLVM just for one architecture and lld would support other >> architectures that LLVM would not support. >> > c) Printing all the targets/flavors that the linker currently supports. >> > >> > On Oct 7, 2014, at 2:03 PM, Shankar Easwaran <shankare at codeaurora.org> >> wrote: >> >>> Hi, >> >>> >> >>> I think lld needs to have an infrastructure as part of the build >> process to build specific flavors and specific targets. >> >> This sounds like you want config-time choices (e.g. build a linker to >> only support ELF/x86 such as for a JIT). >> > Yes. >> > >> >>> For this I was thinking that the Registry expand to consider flavors >> and targets that are part of the build process. >> >>> >> >>> So each flavor/target would register and the Driver would walk >> through the list of handlers to check if there is a handler defined for >> that flavor/target. >> >> This sounds like you want everything decided at runtime (e.g. all >> flavors registers all readers). >> > Yes, right. >> > >> > Shankar Easwaran >> > >> > -- >> > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, >> hosted by the Linux Foundation >> > >> > _______________________________________________ >> > LLVM Developers mailing list >> > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141009/cd759f37/attachment.html>