[llvm-dev] Environment variables
David Greene via llvm-dev
llvm-dev at lists.llvm.org
Fri Sep 7 07:56:55 PDT 2018
I agree with all of this. We have many environment variable hooks in
the compiler but they're all for internal use and have very specific
debugging purposes (turn off this-or-that, tune this parameter, etc.).
We don't share them with customers at all.
They are a very useful debugging tool but need to be used judiciously.
-David
Matthias Braun <mbraun at apple.com> writes:
> I can definitely relate to third party Makefiles being a huge pain to
> manipulate. And env vars can be an okay tool to help debugging (see
> also CCC_OVERRIDE_OPTIONS in clang for example). I also don't want to
> dispute that they may be the right solution in some cases.
> That said in my opinion we should not make it look like using
> environment variables is a good or encouraged thing because there are
> downsides:
>
> - The bug reproducetion instruction and file bundles that clang
> produces when it crashes does not show environment variables, meaning
> you possibly cannot reproduce a bug...
> - Similarily when producing .ll files, going through jenkins output,
> etc. You typically have no good way to see the environment variables
> in effect. Even if you do, there are typically hundreds of them and it
> may be hard to know which ones affect the compiler.
> - env vars only work more reliably if they are sparsly used as soon as
> they have interesting/desirable effects you will see people using them
> in their makefiles as well, making the whole thing brittle again
> because now you have to wonder if someone overrides, resets,
> manipulates the env vars in their makefiles bringing you back to
> square one where you have to understand and change complex third party
> makefiles...
>
> - Matthias
>
>> On Sep 6, 2018, at 10:44 AM, David Greene <dag at cray.com> wrote:
>>
>> Yes, but in your example getenv is called every time enableFooBar needs
>> to be initialized. What if your code is itself wrapped inside another
>> loop you can't see (for example, the PassManager invoking passes)?
>>
>> Maybe I'm being overly pedantic.
>>
>> We use a lot of environment variables in our compiler because it's
>> really super annoying and takes a lot of developer time to have to
>> update customer Makefiles to include the debugging options we want to
>> use to debug customer problems. These are huge customer codes with
>> often many Makefiles which may be generated by custom tools we don't
>> understand at all. :) It's much easier to use the compiler flags that
>> are in the Makefiles and set some environment variables to override
>> things during "make."
>>
>> It seems odd that cl::ParseEnvironmentOptions exists but there is no
>> "official" way to get at environment variables.
>>
>> If this isn't something the community wants or needs, that's fine. I
>> was just asking if a contribution would be welcomed if we end up
>> developing something.
>>
>> -David
>>
>> Matthias Braun <mbraun at apple.com> writes:
>>
>>>> On Sep 6, 2018, at 7:09 AM, David Greene via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>>>>
>>>> Ok, thanks! I'm not dealing with UTF-8 so I don't think Process::GetEnv
>>>> will work. I was looking for something that caches calls to getenv so
>>>> checks could be put into tight(-ish) loops without too much performance
>>>> impact.
>>>
>>> Sorry for the snarky answer but we already have that:
>>>
>>> // outside of loop
>>> bool enableFooBar = getenv("ENABLE_FOO_BAR");
>>> while (...) {
>>> // it's not getting re-checked every loop iteration:
>>> enableFooBar;
>>> }
>>>
>>> Generally we don't really look at env vars today (I think for clang
>>> you can mostly affect some search paths with them) and IMO it is a
>>> good thing to force being explicit on the command line instead...
>>>
>>> - Matthias
>>>
>>>>
>>>> -David
>>>>
>>>> Reid Kleckner via llvm-dev <llvm-dev at lists.llvm.org> writes:
>>>>
>>>>> llvm::Process::GetEnv looks like it does the right thing.
>>>>>
>>>>> I think we added it to deal with Unicode on Windows, though. We have
>>>>> plenty of calls to getenv that are mostly looking for '1', '0', or
>>>>> variable presence, and they pretty much work.
>>>>>
>>>>> On Wed, Sep 5, 2018 at 2:12 PM David Greene via llvm-dev
>>>>> <llvm-dev at lists.llvm.org> wrote:
>>>>>
>>>>> Is there an LLVM-ish way to handle environment variables?
>>>>> Specifically,
>>>>> I want to check existence and/or value of an environment variable
>>>>> and
>>>>> take appropriate action.
>>>>>
>>>>> I was kind of surprised that LLVM doesn't seem to have any
>>>>> special/optimized way to deal with environment variables. The one
>>>>> Stackoverflow I found on it suggested using getenv().
>>>>>
>>>>> Thanks!
>>>>>
>>>>> -David
>>>>> _______________________________________________
>>>>> LLVM Developers mailing list
>>>>> llvm-dev at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>>>>>> _______________________________________________
>>>>> LLVM Developers mailing list
>>>>> llvm-dev at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> llvm-dev at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list