[Scons-users] Custom Builder Tool for IAR Compiler

R0b0t1 r030t1 at gmail.com
Wed Oct 4 19:37:02 EDT 2017


On Wednesday, October 4, 2017, 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/SConsProject/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=SCons.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

Not to derail your thread, but had you looked at the small device C
compiler?

Cheers,
    R0b0t1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20171004/89d30e67/attachment.html>


More information about the Scons-users mailing list