[cfe-dev] Configuration files
Hal Finkel via cfe-dev
cfe-dev at lists.llvm.org
Wed Mar 15 09:35:51 PDT 2017
On 03/15/2017 11:21 AM, Hal Finkel via cfe-dev wrote:
>
>
> On 03/15/2017 10:59 AM, Serge Pavlov wrote:
>> Hi Hal,
>>
>> Thank you very much for your interest and help!
>>
>> 2017-03-15 2:08 GMT+07:00 Hal Finkel <hfinkel at anl.gov
>> <mailto:hfinkel at anl.gov>>:
>>
>> I chatted with Richard about this in person a couple of weeks
>> ago, and he seems happy with the general direction here. One
>> comment he had was that it seems like `@file` processing is a
>> restricted case of config-file processing. As a result, it might
>> make sense to replace the current `@file`-processing logic with
>> the config-file processing logic (just with a bunch of features
>> turned off).
>>
>>
>> The main issue of using `@file` for loading configuration is
>> compatibility. The construct `@file` has been used for ages and there
>> must be lots of build scripts using it, the change of semantics must
>> not break them.
>
> Right.
>
>> It looks like the features that may be added to the file format in
>> `@file` construct without disturbing existing functionality are:
>> - comments,
>> - splitting long lines with trailing '\',
>> - suppressing warnings on unused options.
>> The remaining feature is resolving names in nested `@file`
>> constructs, it must keep current behavior (resolve names relative to
>> current directory). This makes nesting constructs `@file`
>> inconvenient it not useless, but it does not look like a big loss.
>
> Can't you just make it configurable? If parsing an `@file`, do the old
> thing, otherwise, do the new thing?
>
>>
>> Configuration encoded in compiler file name, as in `armv7l-clang` is
>> not related to `@file`, so this functionality implemented in
>> https://reviews.llvm.org/D24933 remains unchanged. Explicit
>> specification of config file in command line should be made by
>> `@file` option, there are several issues as compared to the proposed
>> `--config` option:
>> - config file must be specified by its full path otherwise it won't
>> be found if the current directory is changed by build script. This
>> limitation should not be a big problem if options are specified in
>> build scripts, but for manual invocations in command line it is
>> inconvenient.
>> - command line may contain several `@file` constructs, there may be
>> options before `@file`. If we want to distinguish config file from
>> others (for instance, we want to suppress unused option warnings only
>> in such files), we need to assume that only the first option may load it.
>>
>> So if we are ready to sacrifice some convenience, config files can be
>> implemented on top of `@file` construct. If there are no objections
>> I'll update the patch.
>
> Maybe I'm missing something, but I think you're taking this the wrong
> way. I don't recommend giving up features in this sense. I think the
> question is: can we replace the current `@file` processing with the
> new config-file logic (just with some of the new features turned off)?
>
> If that can't be done reasonably, then I think that's okay too. We
> just should understand (and document) why.
To elaborate slightly, we currently support `@file` in Clang by calling
llvm::cl::ExpandResponseFiles in Clang's driver. Since this is general
LLVM functionality, and the config-file paring is more Clang-specific,
maybe this is not worth changing. However, what if we processed `@file`
like config files, but in a mode which was backward compatible with
existing `@file` semantics?
-Hal
>
> -Hal
>
>>
>>>
>>> 2. More elaborated solutions
>>>
>>> Many are of opinion that config file in this form is too
>>> primitive solution, for instance:
>>> - A good solution must be able to deduce target from arguments
>>> (-m32),
>>> - Any workable config-file scheme *must* interact with the
>>> various target specification command-line arguments, and allow
>>> for setting options dependent upon the actually-selected target,
>>> - Config file must reduce complexity of clang driver.
>>>
>>> The presented implementation of config files is only a way to
>>> specify set of options, it cannot solve these problems. However
>>> it can be extended in future so that, for instance, the
>>> following construct could be allowed (particular syntax does not
>>> matter):
>>>
>>> …
>>> #if (argv.contains("-m32"))
>>> -target i686-unknown-linux-gnu
>>> #else
>>> -targer x86_64-unknown-linux-gnu
>>> #endif
>>> …
>>>
>>> This syntax would require to support `if/else/endif` control
>>> construct, and builtin function `argv.contains`. Ability to
>>> include an option conditionally is likely to be sufficient to
>>> solve large part of the problems mentioned above and can indeed
>>> reduce complexity of the driver.
>>
>> This is appealing, but I think that we really need to be careful
>> here. We don't want to create a system where people are
>> encouraged to replicate complex driver logic in the config files
>> in order to independently figure out which features might be
>> enabled. Of course, we already do this, but the logic ends up in
>> wrapper scripts (and is just as likely to be broken, if not more
>> so). However, if we're going to create a solution here, we should
>> do so in a way that does not encourage the confg-file writer to
>> duplicate driver logic.
>>
>> In any case, I definitely consider this follow-up work.
>>
>>
>> This was a bad example. To obtain more powerful solution clang need
>> something like gcc spec files. This is completely different topic.
>>
>> Thanks,
>> --Serge
>>
>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170315/0245648d/attachment.html>
More information about the cfe-dev
mailing list