[Scons-users] Overriding the default compilation behavior / supporting new compilers

Hua Yanghao huayanghao at gmail.com
Thu Sep 28 12:14:46 EDT 2017


I figured it out: when defining the builders, instead passing a
"$XYZCOM" to the action parameter, passing a SCons.Action.Action() so
the second parameter can be the $XYZCOMSTR.


On Thu, Sep 28, 2017 at 6:07 PM, Hua Yanghao <huayanghao at gmail.com> wrote:
> Thanks Bill. This works perfectly!
>
> Now I added also some other customized tools in site_scons/site_tools/
> folder but there is one more thing: how the xyzCOMSTR is handled?
> e.g. I have enabled a new builder called xyz, which is using $XYZCOM
> to build the target, but only want to show the $XYZCOMSTR on the
> console (unless I switch to verbose mode).
>
> Best Regards,
> Yanghao
>
> On Thu, Sep 28, 2017 at 2:52 AM, Bill Deegan <bill at baddogconsulting.com> wrote:
>> See the manpage:
>>
>> Before reading the SConstruct file, scons looks for a directory named
>> site_scons in various system directories (see below) and the directory
>> containing the SConstruct file; for each of those dirs which exists,
>> site_scons is prepended to sys.path, the file site_scons/site_init.py, is
>> evaluated if it exists, and the directory site_scons/site_tools is prepended
>> to the default toolpath if it exists. See the --no-site-dir and --site-dir
>> options for more details.
>>
>>
>> If  you have your own tool in site_scons/site_tools and then do
>> env.Tool('my_special_tool'), and there's my_special_tool.py in site_tools,
>> it should load it.
>>
>>
>>
>> On Wed, Sep 27, 2017 at 9:30 AM, Hua Yanghao <huayanghao at gmail.com> wrote:
>>>
>>> Thanks Bill.
>>>
>>> So how scons actually finds xyz-cc / xyz-ar implementation in Tools or
>>> site_scons/sit_tools/ folder?
>>>
>>> Is it based on string matching (e.g. CC=xyz-cc)? I had a try this way
>>> but it is not working for me.
>>>
>>> BR, Yanghao
>>>
>>> On Wed, Sep 27, 2017 at 6:10 PM, Bill Deegan <bill at baddogconsulting.com>
>>> wrote:
>>> > Generally the compiler and linker are implemented as different tools as
>>> > far
>>> > as SCons is concerned.
>>> > That said migrating your more complex logic into site_scons/__init__.py
>>> > and
>>> > if appropriate different tools in site_scons/site_tools is wise.
>>> >
>>> > Regardless, if you care compiling C or C++, then basing your tools or
>>> > modifications to existing variables would be the simplest way to use
>>> > your
>>> > cross compilers.
>>> >
>>> >
>>> >
>>> > On Wed, Sep 27, 2017 at 11:41 AM, Hua Yanghao <huayanghao at gmail.com>
>>> > wrote:
>>> >>
>>> >> Thanks Dan.
>>> >>
>>> >> The problem is more with a customized AR command, where the current
>>> >> implementation inserts an "rc" after ar (e.g. ar rc ....).
>>> >> I guess I can still override the ARFLAG environment variable instead
>>> >> of appending to it.
>>> >>
>>> >> However as there are some default FLAGS in other cases I do not want
>>> >> to override, so it becomes fragmented as I have to consider every and
>>> >> each cases and consider if I should append to it or replace and
>>> >> append. In the end I thought it might be cleaner if I just write an
>>> >> implementation of this special compiler with generate/exists calls but
>>> >> I am not successful so far for scons to automatically discover it in
>>> >> site_scons/site_tools/ folder. e.g. instead of a centrally located
>>> >> huge if/else I want to split the logic into separate pieces just for
>>> >> the sake of easier maintenance in the future.
>>> >>
>>> >> BR, Yanghao
>>> >>
>>> >> On Wed, Sep 27, 2017 at 5:20 PM, Dan Čermák
>>> >> <dan.cermak at cgc-instruments.com> wrote:
>>> >> > Hi Yanghao,
>>> >> >
>>> >> > you can override the environment variable 'CCCOM' to tell scons how
>>> >> > your
>>> >> > compiler behaves (based on some condition).
>>> >> >
>>> >> > For example:
>>> >> >
>>> >> > env = Environment()
>>> >> >
>>> >> > env["CC"] = os.getenv("CC") or "gcc"
>>> >> >
>>> >> > if env["CC"] == "xyz-cc":
>>> >> >    env["CCCOM"] = '$CC -c $CFLAGS $CCFLAGS $_CCCOMCOM $SOURCES'
>>> >> >
>>> >> > You can find the documentation of all these CC-something variables
>>> >> > here:
>>> >> > http://scons.org/doc/1.0.1/HTML/scons-user/a4754.html
>>> >> > (the example I gave here is more or less copy-pasted from my
>>> >> > SConstruct,
>>> >> > which I use to build a arm cortex m4 firmware with arm-none-eabi-gcc
>>> >> > &
>>> >> > TI's armcl compiler)
>>> >> >
>>> >> > Hope this is what you wanted to know.
>>> >> >
>>> >> >
>>> >> > Cheers,
>>> >> >
>>> >> > Dan
>>> >> >
>>> >> > Hua Yanghao <huayanghao at gmail.com> writes:
>>> >> >
>>> >> >> Dear Scons Friends,
>>> >> >> I looked at https://bitbucket.org/scons/scons/wiki/ToolsForFools
>>> >> >> which
>>> >> >> is a good starting point explaining how to use scons to implement
>>> >> >> tools. However I am missing one part how scons is actually
>>> >> >> connecting
>>> >> >> the CC=xyz-cc to the tools/xyz-cc.py file. For cross-compilation
>>> >> >> (e.g.
>>> >> >> CC=arm-none-eabi-gcc) it just works (I assume it is using the GCC
>>> >> >> command line options).
>>> >> >>
>>> >> >> Assume I have a customized C compiler called xyz-cc which uses
>>> >> >> completely different command line options to generate object files
>>> >> >> and
>>> >> >> a customized library archiver xyz-ar for building static libraries.
>>> >> >> Instead of making a new builder name (e.g. xyzObject(),
>>> >> >> xyzStaticLibrary), how can I change the default behaviour of the
>>> >> >> Object/StaticLibrary/Program builder to use my customized
>>> >> >> compilation
>>> >> >> tool chain?
>>> >> >>
>>> >> >> Best Regards,
>>> >> >> Yanghao
>>> >> >> _______________________________________________
>>> >> >> Scons-users mailing list
>>> >> >> Scons-users at scons.org
>>> >> >> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>> >> > _______________________________________________
>>> >> > Scons-users mailing list
>>> >> > Scons-users at scons.org
>>> >> > https://pairlist4.pair.net/mailman/listinfo/scons-users
>>> >> _______________________________________________
>>> >> Scons-users mailing list
>>> >> Scons-users at scons.org
>>> >> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > Scons-users mailing list
>>> > Scons-users at scons.org
>>> > https://pairlist4.pair.net/mailman/listinfo/scons-users
>>> >
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>
>>
>>
>> _______________________________________________
>> Scons-users mailing list
>> Scons-users at scons.org
>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>


More information about the Scons-users mailing list