[Scons-users] Custom Builder Tool for IAR Compiler

Bill Deegan bill at baddogconsulting.com
Wed Oct 4 13:14:00 EDT 2017


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/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
>
> _______________________________________________
> 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/2e7a940a/attachment.html>


More information about the Scons-users mailing list