[Scons-users] Custom Builder Tool for IAR Compiler

Marco Schuler marco.schuler at gmail.com
Wed Oct 4 16:01:35 EDT 2017


Yes, the compiler does produce object files and only object files (not as
gcc that can also produce executables). Linking is done by the
linker-executable. Shared libraries are not to be considered sice I am
working on bare metal embedded systems.

In fact, I spent some time looking at cc.py and gcc.py, but I could not
find out where builder "Program" comes from...?

--
Regards,
 Marco



Am 04.10.2017 19:41 schrieb "Bill Deegan" <bill at baddogconsulting.com>:

> The "-c" is part of the CCCOM and SHCCCOM values.
> So you can do:
> env['CCCOM'] = env['CCCOM'].replace(' -c ','')
> env['SHCCCOM'] = env['SHCCCOM'].replace(' -c ','')
>
> Or you can define both those to whatever is appropriate.
> Take a look at SCons/Tools/cc.py
> (And then gcc.py)
>
> You may want copy gcc.py as an example and just modify it as you need.
>
> Does your compiler not generate object files?
>
>
>
> On Wed, Oct 4, 2017 at 10:20 AM, Marco Schuler <marco.schuler at gmail.com>
> wrote:
>
>> Hi Bill
>>
>> Thanks for your answer.
>>
>> The problem is that if I do as you suggest, the call to the compiler adds
>> a "-c" option (stop after compilation, aka build object file). This option
>> is not known by my compiler. Thus I thought I'd have to implement my own
>> builder defining my own COM string.
>>
>> With your proposal, how would I get rid of the "-c" option?
>>
>> --
>>  Regards
>>
>>
>> Am 04.10.2017 19:14 schrieb "Bill Deegan" <bill at baddogconsulting.com>:
>>
>> Marco,
>>
>> You should setup the compiler using the normal compielr flags.
>> So STM8 should be CC, etc.
>>
>> Then it should work like any other compiler.
>>
>> In fact looking at what you have above, I don't see anything notable
>> about stm8 compiler besides come CFLAGS and the compiler name.
>> Am I missing somthing?
>> -Bil
>>
>> On Wed, Oct 4, 2017 at 8:54 AM, Marco Schuler <marco.schuler at gmail.com>
>> wrote:
>>
>>> Hello
>>>
>>> I have a IAR compiler for STM8 microcontrollers and since it is rather
>>> different to call compared to gcc, I implemented a custom Builder/Tool for
>>> it. I was following https://github.com/SConsProjec
>>> t/scons/wiki/ToolsForFools.
>>>
>>> Here is the directories and files that I have:
>>>
>>> site_scons/
>>>     site_tools/
>>>         stm8.py
>>>     site_init.py
>>> src/
>>>     main.c
>>> SConstruct
>>>
>>> site_init.py so far is an empty file.
>>>
>>> Contents of stm8.py is:
>>>
>>> import os
>>>
>>> import SCons.Action
>>> import SCons.Builder
>>> import SCons.Util
>>>
>>> class ToolStm8Warning(SCons.Warnings.Warning):
>>>     pass
>>>
>>> class Stm8CompilerNotFound(ToolStm8Warning):
>>>     pass
>>>
>>> SCons.Warnings.enableWarningClass(ToolStm8Warning)
>>>
>>>
>>> #
>>> # Builders
>>> #
>>>
>>> _stm8_builder = SCons.Builder.Builder(action=S
>>> Cons.Action.Action('$STM8_COM', '$STM8_COMSTR'),
>>>
>>>  suffix='$STM8_SUFFIX',
>>>
>>>  src_suffix='$STM8_SRC_SUFFIX')
>>>
>>> def generate(env):
>>>     """Add Builders and construction variables to the Environment."""
>>>
>>>     env['STM8'] = 'iccstm8.exe'
>>>
>>>     env['CFLAGS']=[
>>>        '-e',
>>>        '-Ol',
>>>        '--no_cse',
>>>        '--no_unroll',
>>>        '--no_inline',
>>>        '--no_code_motion',
>>>        '--no_tbaa',
>>>        '--no_cross_call',
>>>        '--debug',
>>>        '--code_model', 'small',
>>>        '--data_model', 'medium',
>>>        '--dlib_config', 'C:\Program Files (x86)\IAR Systems\Embedded
>>> Workbench 7.3\stm8\LIB\dlstm8smn.h',
>>>        '--vregs', '16'
>>>     ]
>>>
>>>     env.SetDefault(
>>>         # suffixes/prefixes
>>>         STM8_SUFFIX = ".o",
>>>         STM8_SRC_SUFFIX = ".c",
>>>
>>>         # command
>>>         STM8_COM = '$STM8 $CFLAGS $SOURCES',
>>>         STM8_COMSTR = '')
>>>
>>>     # Add stm8 builder to builders
>>>     env['BUILDERS']['Stm8'] = _stm8_builder
>>>
>>>
>>> def exists(env):
>>>     """Check if the preconditions for our tool are met."""
>>>
>>>     return env.Detect('iccstm8.exe')
>>>
>>>
>>> SConstruct contains the following:
>>>
>>> import os
>>>
>>> env  = Environment(tools=['stm8'],
>>>                    ENV=os.environ) # take os-environment to have
>>> compiler in path
>>>
>>> env.Stm8('src\main','src\main')
>>>
>>> When I run scons, then a main.o is created in the top level directory.
>>>
>>> But actually, I would like to use (instead of env.Stm8):
>>>
>>> env.Program(target='main', source='main')
>>>
>>> to build the program.
>>>
>>> Obviously, the ProgramBuilder is not available anymore in my
>>> environment. How can I implement my Tool so that I can use env.Program? Did
>>> I understand something wrong about the usage of a Tool/Builder?
>>>
>>> Sorry if the questions might be too basic. I am new to scons...
>>>
>>> --
>>> Regards,
>>>  Marco
>>>
>>> _______________________________________________
>>> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20171004/303d7f17/attachment.html>


More information about the Scons-users mailing list