all options parsed, build functional

pull/3561/head
Liviu Ionescu 2017-01-18 01:54:04 +02:00
parent 8266a76c22
commit cc3fe4c73e
3 changed files with 1706 additions and 278 deletions

View File

@ -19,24 +19,128 @@
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="${cross_rm} -rf" description="" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.{{debug_config_uid}}" name="Debug" parent="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug">
<folderInfo id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.{{debug_config_uid}}." name="/" resourcePath="">
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug.{{u.id}}" name="Cross ARM GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.{{u.id}}" name="ARM family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.{{options['common']['arm.target.family']}}" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.arch.{{options['common']['arm.target.arch']}}" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.{{u.id}}" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.{{options['common']['arm.target.instructionset']}}" valueType="enumerated"/>
{% if options['common']['arm.target.thumbinterwork'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['arm.target.endianness'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness.{{options['common']['arm.target.endianness']}}" valueType="enumerated"/>
{% endif %}
{% if options['common']['arm.target.fpu.abi'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.{{u.id}}" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.{{options['common']['arm.target.fpu.abi']}}" valueType="enumerated"/>
{% endif %}
{% if options['common']['arm.target.fpu.unit'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.{{u.id}}" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.{{options['common']['arm.target.fpu.unit']}}" valueType="enumerated"/>
{% endif %}
{% if options['common']['arm.target.unalignedaccess'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess.{{options['common']['arm.target.unalignedaccess']}}" valueType="enumerated"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.{{u.id}}" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.debug" valueType="enumerated"/>
{% if options['common']['optimization.messagelength'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.{{u.id}}" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.signedchar'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.{{u.id}}" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.functionsections'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.{{u.id}}" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.datasections'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.{{u.id}}" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.nocommon'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nocommon.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nocommon" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.noinlinefunctions'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.noinlinefunctions.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.noinlinefunctions" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.freestanding'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.nobuiltin'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nobuiltin.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nobuiltin" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.spconstant'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.spconstant.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.spconstant" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.PIC'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.PIC.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.PIC" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants.{{u.id}}" name="Disable loop invariant move (-fno-move-loop-invariants)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants" value="true" valueType="boolean"/>
{% if options['common']['optimization.other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.other" value="{{options['common']['optimization.other']}}" valueType="string"/>
{% endif %}
{% if options['common']['warnings.syntaxonly'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.syntaxonly.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.syntaxonly" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.pedantic'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.pedanticerrors'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedanticerrors.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedanticerrors" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.nowarn'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.nowarn.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.nowarn" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.unused'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.unused.{{u.id}}" name="Warn on various unused elements (-Wunused)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.unused" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.uninitialized'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.uninitialized.{{u.id}}" name="Warn on uninitialized variables (-Wuninitialised)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.uninitialized" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.allwarn'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.{{u.id}}" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.extrawarn'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.{{u.id}}" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.missingdeclaration'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.missingdeclaration.{{u.id}}" name="Warn on undeclared global function (-Wmissing-declaration)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.missingdeclaration" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.conversion'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.conversion.{{u.id}}" name="Warn on implicit conversions (-Wconversion)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.conversion" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.pointerarith'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pointerarith.{{u.id}}" name="Warn if pointer arithmetic (-Wpointer-arith)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pointerarith" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.padded'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.padded.{{u.id}}" name="Warn if padding is included (-Wpadded)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.padded" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.shadow'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.shadow.{{u.id}}" name="Warn if shadowed variable (-Wshadow)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.shadow" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.logicalop'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.logicalop.{{u.id}}" name="Warn if suspicious logical ops (-Wlogical-op)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.logicalop" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.agreggatereturn'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.agreggatereturn.{{u.id}}" name="Warn if struct is returned (-Wagreggate-return)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.agreggatereturn" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.floatequal'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.floatequal.{{u.id}}" name="Warn if floats are compared as equal (-Wfloat-equal)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.floatequal" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.toerrors'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.toerrors.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.toerrors" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.other" value="{{options['common']['warnings.other']}}" valueType="string"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.{{u.id}}" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.max" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.{{u.id}}" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.{{u.id}}" name="ARM family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.{{target_mcpu}}" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.{{u.id}}" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.{{target_fpu_abi}}" valueType="enumerated"/>
{% if target_fpu_unit %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.{{u.id}}" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.{{target_fpu_unit}}" valueType="enumerated"/>
{% if options['common']['debugging.prof'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.prof.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.prof" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.{{u.id}}" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.{{u.id}}" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants.{{u.id}}" name="Disable loop invariant move (-fno-move-loop-invariants)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants" value="true" valueType="boolean"/>
{% if options['common']['debugging.gprof'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.gprof.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.gprof" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name" value="GNU Tools for ARM Embedded Processors" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.{{u.id}}" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.{{u.id}}" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.{{u.id}}" name="Prefix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix" value="arm-none-eabi-" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.{{u.id}}" name="C compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.c" value="gcc" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.{{u.id}}" name="C++ compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp" value="g++" valueType="string"/>
@ -51,93 +155,205 @@
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.{{u.id}}" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
<builder buildPath="${workspace_loc:/{{name}}}/Debug" id="ilg.gnuarmeclipse.managedbuild.cross.builder.{{u.id}}" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.{{u.id}}" name="Cross ARM GNU Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler">
{% if options['as']['usepreprocessor'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.{{u.id}}" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" value="true" valueType="boolean"/>
{% endif %}
{% if options['as']['nostdinc'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.nostdinc.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.nostdinc" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths.{{u.id}}" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths" valueType="includePath">
{% for path in include_paths %}
{% for path in options['common']['include_paths'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs.{{u.id}}" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
<listOptionValue builtIn="false" value="DEBUG"/>
{% for s in asm_defines %}
{% for s in options['as']['defines'] %}
<listOptionValue builtIn="false" value="{{s}}"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.files.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.files" useByScannerDiscovery="true" valueType="includeFiles">
<listOptionValue builtIn="false" value="mbed_config.h"/>
{% for file in options['common']['include_files'] %}
<listOptionValue builtIn="false" value="&quot;{{file}}&quot;"/>
{% endfor %}
</option>
{% if options['as']['otherwarnings'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.otherwarnings.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.otherwarnings" value="{{options['as']['otherwarnings']}}" valueType="string"/>
{% endif %}
{% if options['as']['verbose'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.verbose.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.verbose" value="true" valueType="boolean"/>
{% endif %}
{% if options['as']['other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.other.{{u.id}}" name="Other assembler flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.other" value="{{options['as']['other']}}" valueType="string"/>
{% endif %}
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.{{debug_tool_c_compiler_uid}}" name="Cross ARM C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler">
{% if options['c']['nostdinc'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.nostdinc.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.nostdinc" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.{{u.id}}" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="false" valueType="includePath">
{% for path in include_paths %}
{% for path in options['common']['include_paths'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.{{u.id}}" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
<listOptionValue builtIn="false" value="DEBUG"/>
{% for s in c_defines %}
{% for s in options['c']['defines'] %}
<listOptionValue builtIn="false" value="{{s}}"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.files.{{u.id}}" name="Include files (-include)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.files" useByScannerDiscovery="true" valueType="includeFiles">
<listOptionValue builtIn="false" value="mbed_config.h"/>
{% for file in options['common']['include_files'] %}
<listOptionValue builtIn="false" value="&quot;{{file}}&quot;"/>
{% endfor %}
</option>
{% if options['c']['compiler.std'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std" value="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.{{options['c']['compiler.std']}}" valueType="enumerated"/>
{% endif %}
{% if options['c']['otheroptimizations'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.otheroptimizations.{{u.id}}" name="Other optimization flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.otheroptimizations" useByScannerDiscovery="true" value="{{options['c']['otheroptimizations']}}" valueType="string"/>
{% endif %}
{% if options['c']['warnings.missingprototypes'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.missingprototypes.{{u.id}}" name="Warn if a global function has no prototype (-Wmissing-prototypes)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.missingprototypes" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['c']['warnings.strictprototypes'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.strictprototypes.{{u.id}}" name="Warn if a function has no arg type (-Wstrict-prototypes)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.strictprototypes" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['c']['warnings.badfunctioncast'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.badfunctioncast.{{u.id}}" name="Warn if wrong cast (-Wbad-function-cast)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.badfunctioncast" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['c']['otherwarnings'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.otherwarnings.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.otherwarnings" value="{{options['c']['otherwarnings']}}" valueType="string"/>
{% endif %}
{% if options['c']['verbose'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.verbose.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.verbose" value="true" valueType="boolean"/>
{% endif %}
{% if options['c']['other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.other" value="{{options['c']['other']}}" valueType="string"/>
{% endif %}
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.{{debug_tool_c_compiler_input_uid}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.{{debug_tool_cpp_compiler_uid}}" name="Cross ARM C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler">
{% if options['cpp']['nostdinc'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nostdinc.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nostdinc" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['nostdincpp'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nostdincpp.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nostdincpp" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths.{{u.id}}" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths" useByScannerDiscovery="false" valueType="includePath">
{% for path in include_paths %}
{% for path in options['common']['include_paths'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.noexceptions.{{u.id}}" name="Do not use exceptions (-fno-exceptions)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.noexceptions" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nortti.{{u.id}}" name="Do not use RTTI (-fno-rtti)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nortti" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nousecxaatexit.{{u.id}}" name="Do not use _cxa_atexit() (-fno-use-cxa-atexit)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nousecxaatexit" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nothreadsafestatics.{{u.id}}" name="Do not use thread-safe statics (-fno-threadsafe-statics)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nothreadsafestatics" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs.{{u.id}}" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
<listOptionValue builtIn="false" value="DEBUG"/>
{% for s in cpp_defines %}
{% for s in options['cpp']['defines'] %}
<listOptionValue builtIn="false" value="{{s}}"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.files.{{u.id}}" name="Include files (-include)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.files" useByScannerDiscovery="true" valueType="includeFiles">
<listOptionValue builtIn="false" value="mbed_config.h"/>
{% for file in options['common']['include_files'] %}
<listOptionValue builtIn="false" value="&quot;{{file}}&quot;"/>
{% endfor %}
</option>
{% if options['cpp']['compiler.std'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.std.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.std" value="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.std.{{options['cpp']['compiler.std']}}" valueType="enumerated"/>
{% endif %}
{% if options['cpp']['optimization.noexceptions'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.noexceptions.{{u.id}}" name="Do not use exceptions (-fno-exceptions)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.noexceptions" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['optimization.nortti'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nortti.{{u.id}}" name="Do not use RTTI (-fno-rtti)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nortti" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['optimization.nousecxaatexit'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nousecxaatexit.{{u.id}}" name="Do not use _cxa_atexit() (-fno-use-cxa-atexit)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nousecxaatexit" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['optimization.nothreadsafestatics'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nothreadsafestatics.{{u.id}}" name="Do not use thread-safe statics (-fno-threadsafe-statics)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nothreadsafestatics" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['otheroptimizations'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.otheroptimizations.{{u.id}}" name="Other optimization flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.otheroptimizations" useByScannerDiscovery="true" value="{{options['cpp']['otheroptimizations']}}" valueType="string"/>
{% endif %}
{% if options['cpp']['warnabi'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warnabi.{{u.id}}" name="Warn on ABI violations (-Wabi)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warnabi" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.ctordtorprivacy'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.ctordtorprivacy.{{u.id}}" name="Warn on class privacy (-Wctor-dtor-privacy)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.ctordtorprivacy" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.noexcept'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.noexcept.{{u.id}}" name="Warn on no-except expressions (-Wnoexcept)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.noexcept" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.nonvirtualdtor'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.nonvirtualdtor.{{u.id}}" name="Warn on virtual destructors (-Wnon-virtual-dtor)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.nonvirtualdtor" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.strictnullsentinel'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.strictnullsentinel.{{u.id}}" name="Warn on uncast NULL (-Wstrict-null-sentinel)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.strictnullsentinel" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.signpromo'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.signpromo.{{u.id}}" name="Warn on sign promotion (-Wsign-promo)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.signpromo" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warneffc'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warneffc.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warneffc" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['otherwarnings'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.otherwarnings.{{u.id}}" name="Other warning flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.otherwarnings" useByScannerDiscovery="true" value="{{options['cpp']['otherwarnings']}}" valueType="string"/>
{% endif %}
{% if options['cpp']['verbose'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.verbose.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.verbose" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.other" value="{{options['cpp']['other']}}" valueType="string"/>
{% endif %}
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.{{debug_tool_cpp_compiler_input_uid}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.{{u.id}}" name="Cross ARM C Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections.{{u.id}}" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.paths.{{u.id}}" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.paths" valueType="libPaths">
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.scriptfile.{{u.id}}" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.scriptfile" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{linker_script}}&quot;"/>
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nostart.{{u.id}}" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nostart" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano.{{u.id}}" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano" value="true" valueType="boolean"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.{{u.id}}" name="Cross ARM C++ Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.{{u.id}}" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile.{{u.id}}" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{linker_script}}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{options['ld']['script']}}&quot;"/>
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths.{{u.id}}" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths" valueType="libPaths">
{% for path in library_paths %}
{% for path in options['ld']['library_paths'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs" valueType="libs">
{% for lib in libraries %}
{% for lib in options['ld']['user_libraries'] %}
<listOptionValue builtIn="false" value="{{lib}}"/>
{% endfor %}
{% for lib in options['ld']['system_libraries'] %}
<listOptionValue builtIn="false" value="{{lib}}"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.otherobjs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.otherobjs" valueType="userObjs">
{% for path in object_files %}
{% for path in options['ld']['object_files'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
{% if options['ld']['gcsections'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.{{u.id}}" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
{% endif %}
{% if options['ld']['nostart'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart.{{u.id}}" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano.{{u.id}}" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano" value="true" valueType="boolean"/>
{% endif %}
{% if options['ld']['nodeflibs'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nodeflibs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nodeflibs" value="true" valueType="boolean"/>
{% endif %}
{% if options['ld']['nostdlibs'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostdlibs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostdlibs" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.flags.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.flags" valueType="stringList">
{% for opt in options['ld']['flags'] %}
<listOptionValue builtIn="false" value="{{opt}}"/>
{% endfor %}
</option>
{% if options['ld']['other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.other" value="{{options['ld']['other']}}" valueType="string"/>
{% endif %}
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
@ -158,7 +374,7 @@
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="{{excluded_folders}}" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry excluding="{{options['common']['excluded_folders']}}" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
@ -180,23 +396,135 @@
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="${cross_rm} -rf" description="" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.{{release_config_uid}}" name="Release" parent="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release">
<folderInfo id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.{{release_config_uid}}." name="/" resourcePath="">
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.release.{{u.id}}" name="Cross ARM GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.release">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.{{u.id}}" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.size" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.{{u.id}}" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.{{u.id}}" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.{{u.id}}" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.{{u.id}}" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.{{u.id}}" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.{{u.id}}" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.{{u.id}}" name="ARM family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.{{target_mcpu}}" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.{{u.id}}" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.{{target_fpu_abi}}" valueType="enumerated"/>
{% if target_fpu_unit %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.{{u.id}}" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.{{target_fpu_unit}}" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.{{u.id}}" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.{{options['common']['optimization.level']}}" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.{{u.id}}" name="ARM family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.{{options['common']['arm.target.family']}}" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.arch.{{options['common']['arm.target.arch']}}" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.{{u.id}}" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.{{options['common']['arm.target.instructionset']}}" valueType="enumerated"/>
{% if options['common']['arm.target.thumbinterwork'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['arm.target.endianness'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness.{{options['common']['arm.target.endianness']}}" valueType="enumerated"/>
{% endif %}
{% if options['common']['arm.target.fpu.abi'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.{{u.id}}" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.{{options['common']['arm.target.fpu.abi']}}" valueType="enumerated"/>
{% endif %}
{% if options['common']['arm.target.fpu.unit'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.{{u.id}}" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.{{options['common']['arm.target.fpu.unit']}}" valueType="enumerated"/>
{% endif %}
{% if options['common']['arm.target.unalignedaccess'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess.{{options['common']['arm.target.unalignedaccess']}}" valueType="enumerated"/>
{% endif %}
{% if options['common']['optimization.messagelength'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.{{u.id}}" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.signedchar'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.{{u.id}}" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.functionsections'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.{{u.id}}" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.datasections'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.{{u.id}}" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.nocommon'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nocommon.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nocommon" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.noinlinefunctions'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.noinlinefunctions.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.noinlinefunctions" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.freestanding'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.nobuiltin'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nobuiltin.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nobuiltin" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.spconstant'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.spconstant.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.spconstant" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.PIC'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.PIC.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.PIC" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.nomoveloopinvariants'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants.{{u.id}}" name="Disable loop invariant move (-fno-move-loop-invariants)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['optimization.other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.other" value="{{options['common']['optimization.other']}}" valueType="string"/>
{% endif %}
{% if options['common']['warnings.syntaxonly'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.syntaxonly.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.syntaxonly" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.pedantic'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.pedanticerrors'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedanticerrors.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedanticerrors" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.nowarn'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.nowarn.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.nowarn" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.unused'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.unused.{{u.id}}" name="Warn on various unused elements (-Wunused)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.unused" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.uninitialized'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.uninitialized.{{u.id}}" name="Warn on uninitialized variables (-Wuninitialised)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.uninitialized" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.allwarn'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.{{u.id}}" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.extrawarn'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.{{u.id}}" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.missingdeclaration'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.missingdeclaration.{{u.id}}" name="Warn on undeclared global function (-Wmissing-declaration)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.missingdeclaration" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.conversion'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.conversion.{{u.id}}" name="Warn on implicit conversions (-Wconversion)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.conversion" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.pointerarith'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pointerarith.{{u.id}}" name="Warn if pointer arithmetic (-Wpointer-arith)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pointerarith" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.padded'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.padded.{{u.id}}" name="Warn if padding is included (-Wpadded)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.padded" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.shadow'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.shadow.{{u.id}}" name="Warn if shadowed variable (-Wshadow)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.shadow" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.logicalop'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.logicalop.{{u.id}}" name="Warn if suspicious logical ops (-Wlogical-op)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.logicalop" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.agreggatereturn'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.agreggatereturn.{{u.id}}" name="Warn if struct is returned (-Wagreggate-return)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.agreggatereturn" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.floatequal'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.floatequal.{{u.id}}" name="Warn if floats are compared as equal (-Wfloat-equal)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.floatequal" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.toerrors'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.toerrors.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.toerrors" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['warnings.other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.other" value="{{options['common']['warnings.other']}}" valueType="string"/>
{% endif %}
{% if options['common']['debugging.level'] != 'none' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.{{u.id}}" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.{{options['common']['debugging.level']}}"/>
{% endif %}
{% if options['common']['debugging.format'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.{{u.id}}" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.{{options['common']['debugging.format']}}"/>
{% endif %}
{% if options['common']['debugging.prof'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.prof.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.prof" value="true" valueType="boolean"/>
{% endif %}
{% if options['common']['debugging.gprof'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.gprof.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.gprof" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name" value="GNU Tools for ARM Embedded Processors" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.{{u.id}}" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.{{u.id}}" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.{{u.id}}" name="Prefix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix" value="arm-none-eabi-" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.{{u.id}}" name="C compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.c" value="gcc" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.{{u.id}}" name="C++ compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp" value="g++" valueType="string"/>
@ -211,90 +539,203 @@
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.{{u.id}}" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
<builder buildPath="${workspace_loc:/{{name}}}/Release" id="ilg.gnuarmeclipse.managedbuild.cross.builder.{{u.id}}" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.{{u.id}}" name="Cross ARM GNU Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler">
{% if options['as']['usepreprocessor'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.{{u.id}}" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" value="true" valueType="boolean"/>
{% endif %}
{% if options['as']['nostdinc'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.nostdinc.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.nostdinc" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths.{{u.id}}" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths" valueType="includePath">
{% for path in include_paths %}
{% for path in options['common']['include_paths'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs.{{u.id}}" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
{% for s in asm_defines %}
{% for s in options['as']['defines'] %}
<listOptionValue builtIn="false" value="{{s}}"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.files.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.files" useByScannerDiscovery="true" valueType="includeFiles">
<listOptionValue builtIn="false" value="mbed_config.h"/>
{% for file in options['common']['include_files'] %}
<listOptionValue builtIn="false" value="&quot;{{file}}&quot;"/>
{% endfor %}
</option>
{% if options['as']['otherwarnings'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.otherwarnings.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.otherwarnings" value="{{options['as']['otherwarnings']}}" valueType="string"/>
{% endif %}
{% if options['as']['verbose'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.verbose.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.verbose" value="true" valueType="boolean"/>
{% endif %}
{% if options['as']['other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.other.{{u.id}}" name="Other assembler flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.other" value="{{options['as']['other']}}" valueType="string"/>
{% endif %}
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.{{release_tool_c_compiler_uid}}" name="Cross ARM C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler">
{% if options['c']['nostdinc'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.nostdinc.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.nostdinc" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.{{u.id}}" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="false" valueType="includePath">
{% for path in include_paths %}
{% for path in options['common']['include_paths'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.{{u.id}}" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
{% for s in c_defines %}
{% for s in options['c']['defines'] %}
<listOptionValue builtIn="false" value="{{s}}"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.files.{{u.id}}" name="Include files (-include)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.files" useByScannerDiscovery="true" valueType="includeFiles">
<listOptionValue builtIn="false" value="mbed_config.h"/>
{% for file in options['common']['include_files'] %}
<listOptionValue builtIn="false" value="&quot;{{file}}&quot;"/>
{% endfor %}
</option>
{% if options['c']['compiler.std'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std" value="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.{{options['c']['compiler.std']}}" valueType="enumerated"/>
{% endif %}
{% if options['c']['otheroptimizations'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.otheroptimizations.{{u.id}}" name="Other optimization flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.otheroptimizations" useByScannerDiscovery="true" value="{{options['c']['otheroptimizations']}}" valueType="string"/>
{% endif %}
{% if options['c']['warnings.missingprototypes'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.missingprototypes.{{u.id}}" name="Warn if a global function has no prototype (-Wmissing-prototypes)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.missingprototypes" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['c']['warnings.strictprototypes'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.strictprototypes.{{u.id}}" name="Warn if a function has no arg type (-Wstrict-prototypes)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.strictprototypes" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['c']['warnings.badfunctioncast'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.badfunctioncast.{{u.id}}" name="Warn if wrong cast (-Wbad-function-cast)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.warning.badfunctioncast" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['c']['otherwarnings'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.otherwarnings.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.otherwarnings" value="{{options['c']['otherwarnings']}}" valueType="string"/>
{% endif %}
{% if options['c']['verbose'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.verbose.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.verbose" value="true" valueType="boolean"/>
{% endif %}
{% if options['c']['other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.other" value="{{options['c']['other']}}" valueType="string"/>
{% endif %}
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.{{release_tool_c_compiler_input_uid}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.{{release_tool_cpp_compiler_uid}}" name="Cross ARM C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler">
{% if options['cpp']['nostdinc'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nostdinc.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nostdinc" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['nostdincpp'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nostdincpp.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nostdincpp" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths.{{u.id}}" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths" useByScannerDiscovery="false" valueType="includePath">
{% for path in include_paths %}
{% for path in options['common']['include_paths'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.noexceptions.{{u.id}}" name="Do not use exceptions (-fno-exceptions)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.noexceptions" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nortti.{{u.id}}" name="Do not use RTTI (-fno-rtti)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nortti" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nousecxaatexit.{{u.id}}" name="Do not use _cxa_atexit() (-fno-use-cxa-atexit)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nousecxaatexit" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nothreadsafestatics.{{u.id}}" name="Do not use thread-safe statics (-fno-threadsafe-statics)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nothreadsafestatics" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs.{{u.id}}" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
{% for s in cpp_defines %}
{% for s in options['cpp']['defines'] %}
<listOptionValue builtIn="false" value="{{s}}"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.files.{{u.id}}" name="Include files (-include)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.files" useByScannerDiscovery="true" valueType="includeFiles">
<listOptionValue builtIn="false" value="mbed_config.h"/>
{% for file in options['common']['include_files'] %}
<listOptionValue builtIn="false" value="&quot;{{file}}&quot;"/>
{% endfor %}
</option>
{% if options['cpp']['compiler.std'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.std.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.std" value="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.std.{{options['cpp']['compiler.std']}}" valueType="enumerated"/>
{% endif %}
{% if options['cpp']['optimization.noexceptions'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.noexceptions.{{u.id}}" name="Do not use exceptions (-fno-exceptions)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.noexceptions" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['optimization.nortti'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nortti.{{u.id}}" name="Do not use RTTI (-fno-rtti)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nortti" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['optimization.nousecxaatexit'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nousecxaatexit.{{u.id}}" name="Do not use _cxa_atexit() (-fno-use-cxa-atexit)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nousecxaatexit" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['optimization.nothreadsafestatics'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nothreadsafestatics.{{u.id}}" name="Do not use thread-safe statics (-fno-threadsafe-statics)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.nothreadsafestatics" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['otheroptimizations'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.otheroptimizations.{{u.id}}" name="Other optimization flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.otheroptimizations" useByScannerDiscovery="true" value="{{options['cpp']['otheroptimizations']}}" valueType="string"/>
{% endif %}
{% if options['cpp']['warnabi'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warnabi.{{u.id}}" name="Warn on ABI violations (-Wabi)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warnabi" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.ctordtorprivacy'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.ctordtorprivacy.{{u.id}}" name="Warn on class privacy (-Wctor-dtor-privacy)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.ctordtorprivacy" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.noexcept'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.noexcept.{{u.id}}" name="Warn on no-except expressions (-Wnoexcept)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.noexcept" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.nonvirtualdtor'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.nonvirtualdtor.{{u.id}}" name="Warn on virtual destructors (-Wnon-virtual-dtor)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.nonvirtualdtor" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.strictnullsentinel'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.strictnullsentinel.{{u.id}}" name="Warn on uncast NULL (-Wstrict-null-sentinel)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.strictnullsentinel" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warnings.signpromo'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.signpromo.{{u.id}}" name="Warn on sign promotion (-Wsign-promo)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warning.signpromo" useByScannerDiscovery="true" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['warneffc'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warneffc.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.warneffc" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['otherwarnings'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.otherwarnings.{{u.id}}" name="Other warning flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.otherwarnings" useByScannerDiscovery="true" value="{{options['cpp']['otherwarnings']}}" valueType="string"/>
{% endif %}
{% if options['cpp']['verbose'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.verbose.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.verbose" value="true" valueType="boolean"/>
{% endif %}
{% if options['cpp']['other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.other" value="{{options['cpp']['other']}}" valueType="string"/>
{% endif %}
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.{{release_tool_cpp_compiler_input_uid}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.{{u.id}}" name="Cross ARM C Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections.{{u.id}}" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.paths.{{u.id}}" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.paths" valueType="libPaths">
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.scriptfile.{{u.id}}" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.scriptfile" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{linker_script}}&quot;"/>
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nostart.{{u.id}}" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.nostart" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano.{{u.id}}" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano" value="true" valueType="boolean"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.{{u.id}}" name="Cross ARM C++ Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.{{u.id}}" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile.{{u.id}}" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{linker_script}}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{options['ld']['script']}}&quot;"/>
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths.{{u.id}}" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths" valueType="libPaths">
{% for path in library_paths %}
{% for path in options['ld']['library_paths'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs" valueType="libs">
{% for lib in libraries %}
{% for lib in options['ld']['user_libraries'] %}
<listOptionValue builtIn="false" value="{{lib}}"/>
{% endfor %}
{% for lib in options['ld']['system_libraries'] %}
<listOptionValue builtIn="false" value="{{lib}}"/>
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.otherobjs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.otherobjs" valueType="userObjs">
{% for path in object_files %}
{% for path in options['ld']['object_files'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
{% if options['ld']['gcsections'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.{{u.id}}" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
{% endif %}
{% if options['ld']['nostart'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart.{{u.id}}" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano.{{u.id}}" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano" value="true" valueType="boolean"/>
{% endif %}
{% if options['ld']['nodeflibs'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nodeflibs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nodeflibs" value="true" valueType="boolean"/>
{% endif %}
{% if options['ld']['nostdlibs'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostdlibs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostdlibs" value="true" valueType="boolean"/>
{% endif %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.flags.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.flags" valueType="stringList">
{% for opt in options['ld']['flags'] %}
<listOptionValue builtIn="false" value="{{opt}}"/>
{% endfor %}
</option>
{% if options['ld']['other'] != '' %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.other.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.other" value="{{options['ld']['other']}}" valueType="string"/>
{% endif %}
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
@ -315,7 +756,7 @@
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="{{excluded_folders}}" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry excluding="{{options['common']['excluded_folders']}}" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>

View File

@ -0,0 +1,488 @@
# GNU ARM Eclipse
The [GNU ARM Eclipse](http://gnuarmeclipse.github.io) is an open source project that includes a family of Eclipse plug-ins and tools for multi-platform embedded ARM development, based on GNU toolchains. The project is hosted on [GitHub](https://github.com/gnuarmeclipse).
This exporter aims to create managed GNU ARM Eclipse projects, ready to build, and with as many options properly identified and set in the Eclipse C/C++ Build -> Settings page.
## Build plug-in configuration options
All options are prefixed by `ilg.gnuarmeclipse.managedbuild.cross.option.`.
### Target Processor
- `arm.target.family` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.cortex-m3** '-mcpu=cortex-m3'
- cortex-m0 '-mcpu=%s'
- cortex-m0-small-multiply '-mcpu=%s'
- cortex-m0plus '-mcpu=%s'
- cortex-m0plus-small-multiply '-mcpu=%s'
- cortex-m1 '-mcpu=%s'
- cortex-m1-small-multiply '-mcpu=%s'
- cortex-m4 '-mcpu=%s'
- cortex-m7 '-mcpu=%s'
- `arm.target.architecture` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.arch.none** ''
- armv6-m '-march=%s'
- armv7-m '-march=%s'
- `arm.target.instructionset` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb** '-mthumb'
- arm '-marm'
- `arm.target.thumbinterwork` bool
- true `-mthumb-interwork`
- `arm.target.endianness` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness.default**
- little `-mlittle-endian`
- big `-mbig-endian`
- `arm.target.fpu.abi` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.default**
- soft '-mfloat-abi=soft'
- softfp '-mfloat-abi=softfp'
- hard '-mfloat-abi=hard'
- `arm.target.fpu.unit` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.default**
- fpv4spd16 '-mfpu=fpv4-sp-d16'
- fpv5d16 '-mfpu=fpv5-d16'
- fpv5spd16 '-mfpu=fpv5-sp-d16'
- ...
- `arm.target.unalignedaccess`
- **ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess.default**
- enabled '-munaligned-access'
- disabled '-mno-unaligned-access'
- `target.other` string
### Optimization
- `optimization.level` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.more** '-O2'
- none '-O0'
- optimize '-O1'
- most '-O3'
- size '-Os'
- debug '-Og'
- `optimization.messagelength` bool
- **false** ''
- true '-fmessage-length=0'
- `optimization.signedchar` bool
- **false**
- true '-fsigned-char'
- `optimization.functionsections` bool
- **false**
- true '-ffunction-sections'
- `optimization.datasections` bool
- **false**
- true '-fdata-sections'
- `optimization.nocommon` bool
- **false**
- true '-fno-common'
- `optimization.noinlinefunctions` bool
- **false** ''
- true '-fno-inline-functions'
- `optimization.freestanding` bool
- **false** ''
- true '-ffreestanding'
- `optimization.nobuiltin` bool
- **false** ''
- true '-fno-builtin'
- `optimization.spconstant` bool
- **false** ''
- true '-fsingle-precision-constant'
- `optimization.PIC` bool
- **false** ''
- true '-fPIC'
- `optimization.lto` bool
- **false** ''
- true '-flto'
- `optimization.nomoveloopinvariants` bool
- **false** ''
- true '-fno-move-loop-invariants'
- `optimization.other` string
- `` bool
- **false** ''
- true ''
### Warnings
- `warnings.syntaxonly` bool
- **false** ''
- true '-fsyntax-only'
- `warnings.pedantic` bool
- **false** ''
- true '-pedantic'
- `warnings.pedanticerrors` bool
- **false** ''
- true '-pedantic-errors'
- `warnings.nowarn` bool
- **false** ''
- true '-w'
- `warnings.unused` bool
- **false** ''
- true '-Wunused'
- `warnings.uninitialized` bool
- **false** ''
- true '-Wuninitialized'
- `warnings.allwarn` bool
- **false** ''
- true '-Wall'
- `warnings.extrawarn` bool
- **false** ''
- true '-Wextra'
- `warnings.missingdeclaration` bool
- **false** ''
- true '-Wmissing-declarations'
- `warnings.conversion` bool
- **false** ''
- true '-Wconversion'
- `warnings.pointerarith` bool
- **false** ''
- true '-Wpointer-arith'
- `warnings.padded` bool
- **false** ''
- true '-Wpadded'
- `warnings.shadow` bool
- **false** ''
- true '-Wshadow'
- `warnings.logicalop` bool
- **false** ''
- true '-Wlogical-op'
- `warnings.agreggatereturn` bool
- **false** ''
- true '-Waggregate-return'
- `warnings.floatequal` bool
- **false** ''
- true '-Wfloat-equal'
- `warnings.toerrors` bool
- **false** ''
- true '-Werror'
- `warnings.other` string
### Debugging
- `debugging.level` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.default** '-g'
- none ''
- minimal '-g1'
- max '-g3'
- `debugging.format` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.default** ''
- gdb '-ggdb'
- stabs '-gstabs'
- stabsplus '-gstabs+'
- dwarf2 '-gdwarf-2'
- dwarf3 '-gdwarf-3'
- dwarf4 '-gdwarf-4'
- dwarf5 '-gdwarf-5'
- `debugging.prof` bool
- **false** ''
- true '-p'
- `debugging.gprof` bool
- **false** ''
- true '-pg'
- `debugging.other` string
### Compiler common options
- `verbose` bool
- **false** ''
- true '-v'
- `savetemps` bool
- **false** ''
- true '--save-temps'
- `nostdinc` bool
- **false** ''
- true '-nostdinc'
- `asmlisting` bool
- **false** ''
- true '-Wa,-adhlns="$@.lst"'
- `preprocessor.preprocessonly` bool
- **false** ''
- true '-E'
- `dirs.include.files`
- '-include%s'
- `compiler.other` string
### Linker common options
- `mapfilename` string
- '-Wl,-Map,"${BuildArtifactFileBaseName}.map"'
- `linker.scriptfile`
- '-T %s'
- `cref` bool
- **false** ''
- true '-Xlinker --cref'
- `printmap` bool
- **false** ''
- true '-Xlinker --print-map'
- `linker.nostart` bool
- **false** ''
- true '-nostartfiles'
- `linker.nodeflibs` bool
- **false** ''
- true '-nodefaultlibs'
- `linker.nostdlibs` bool
- **false** ''
- true '-nostdlib'
- `linker.gcsections` bool
- **false** ''
- true '-Xlinker --gc-sections'
- `linker.printgcsections` bool
- **false** ''
- true '-Xlinker --print-gc-sections'
- `linker.strip` bool
- **false** ''
- true '-s'
- `linker.other` string
- `linker.usenewlibnano` bool
- **false** ''
- true '--specs=nano.specs'
- `linker.useprintffloat` bool
- **false** ''
- true '-u \_printf\_float'
- `linker.usescanffloat` bool
- **false** ''
- true '-u \_scanf\_float'
### Cross ARM GNU Assembler
#### Preprocessor
- `nostdinc` bool
- **false** ''
- true '-nostdinc'
#### Includes
#### Warnings
#### Miscellaneous
- `verbose` bool
- **false** ''
- true '-v'
- `assembler.other` string
### Cross ARM GNU C Compiler
#### Preprocessor
- `nostdinc` bool
- **false** ''
- true '-nostdinc'
#### Includes
#### Optimization
- `c.compiler.std` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.default** ''
- ansi '-ansi'
- c90 '-std=c90' (c89)
- gnu90 '-std=gnu90' (gnu89)
- c99 '-std=c99' (c9x)
- gnu99 '-std=gnu99' (gnu9x)
- c11 '-std=c11' (c1x)
- gnu11 '-std=gnu11' (gnu1x)
#### Warnings
- `c.compiler.warning.missingprototypes` bool
- **false** ''
- true '-Wmissing-prototypes'
- `c.compiler.warning.strictprototypes` bool
- **false** ''
- true '-Wstrict-prototypes'
- `c.compiler.warning.badfunctioncast` bool
- **false** ''
- true '-Wbad-function-cast'
#### Miscellaneous
- `verbose` bool
- **false** ''
- true '-v'
- `c.compiler.other` string
### Cross ARM GNU C++ Compiler
#### Preprocessor
- `nostdinc` bool
- **false** ''
- true '-nostdinc'
- `nostdincpp` bool
- **false** ''
- true '-nostdinc++'
#### Includes
#### Optimization
- `cpp.compiler.std` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.std.default** ''
- ansi (-ansi)
- cpp98 '-std=c++98' (c++03)
- gnucpp98 '-std=gnu++98' (gnu++03)
- cpp0x '-std=c++0x'
- gnucpp0x '-std=gnu++0x'
- cpp11 '-std=c++11'
- gnucpp11 '-std=gnu++11'
- cpp1y '-std=c++1y'
- gnucpp1y '-std=gnu++1y'
- cpp14 '-std=c++14'
- gnucpp1 4'-std=gnu++14'
- cpp1z '-std=c++1z'
- gnucpp1z '-std=gnu++1z'
- `cpp.compiler.abiversion` enumerated
- **ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.abiversion.0** '-fabi-version=0'
- default ''
- 1 '-fabi-version=1'
- 2 '-fabi-version=2'
- 3 '-fabi-version=3'
- 4 '-fabi-version=4'
- 5 '-fabi-version=5'
- 6 '-fabi-version=6'
- `cpp.compiler.noexceptions` bool
- **false** ''
- true '-fno-exceptions'
- `cpp.compiler.nortti` bool
- **false** ''
- true '-fno-rtti'
- `cpp.compiler.nousecxaatexit` bool
- **false** ''
- true '-fno-use-cxa-atexit'
- `cpp.compiler.nothreadsafestatics` bool
- **false** ''
- true '-fno-threadsafe-statics'
#### Warnings
- `cpp.compiler.warnabi` bool
- **false** '-Wabi'
- `cpp.compiler.warning.ctordtorprivacy` bool
- **false** '-Wctor-dtor-privacy'
- `cpp.compiler.warning.noexcept` bool
- **false** '-Wnoexcept'
- `cpp.compiler.warning.nonvirtualdtor` bool
- **false** '-Wnon-virtual-dtor'
- `cpp.compiler.warning.strictnullsentinel` bool
- **false** '-Wstrict-null-sentinel'
- `cpp.compiler.warning.signpromo` bool
- **false** '-Wsign-promo'
- `cpp.compiler.warneffc` bool
- **false** ''
- true '-Weffc++'
#### Miscellaneous
- `verbose` bool
- **false** ''
- true '-v'
- `cpp.compiler.other` string
### Cross ARM GNU C++ Linker
#### General
- `cpp.linker.nostart`
- **false** ''
- true '-nostartfiles'
- `cpp.linker.nodeflibs`
- **false** ''
- true '-nodefaultlibs'
- `cpp.linker.nostdlibs`
- **false** ''
- true '-nostdlib'
#### Libraries
#### Miscellaneous
## Template
- `` bool
- **false** ''
- true ''

View File

@ -26,10 +26,13 @@ from os.path import splitext, basename, relpath, dirname
from random import randint
import os
import copy
# import logging
from tools.targets import TARGET_MAP
from tools.utils import NotSupportedException
# =============================================================================
class UID:
"""
@ -44,6 +47,8 @@ class UID:
# Each invocation generates a new number.
u = UID()
# =============================================================================
class GNUARMEclipse(Exporter):
NAME = 'GNU ARM Eclipse'
@ -53,17 +58,7 @@ class GNUARMEclipse(Exporter):
TARGETS = [target for target, obj in TARGET_MAP.iteritems()
if 'GCC_ARM' in obj.supported_toolchains]
@staticmethod
def filter_dot(s):
"""
Remove the './' prefix, if present.
"""
if s == None:
return None
if s[:2] == './':
return s[2:]
return s
# override
@property
def flags(self):
"""Returns a dictionary of toolchain flags.
@ -88,48 +83,184 @@ class GNUARMEclipse(Exporter):
config_header)
return flags
def dump_tree(self, node, depth=0):
for k in node.keys():
n = node[k]
pn = n['parent']['name'] if 'parent' in n.keys() else ''
print ' ' * depth, n['name'], n['is_used'], pn
if len(n['children'].keys()) != 0:
self.dump_tree(n['children'], depth + 1)
def dump_paths(self, node, depth=0):
for k in node.keys():
n = node[k]
x = []
ni = n
while True:
x.insert(0, ni['name'])
if 'parent' not in ni:
break
ni = ni['parent']
path = '/'.join(x)
print path, n['is_used']
self.dump_paths(n['children'], depth + 1)
def recurse_excludings(self, node):
# override
def generate(self):
"""
Recurse the tree and collect all unused folders; descend
the hierarchy only for used nodes.
Generate the .project and .cproject files.
"""
for k in node.keys():
n = node[k]
if n['is_used'] == False:
x = []
ni = n
while True:
x.insert(0, ni['name'])
if 'parent' not in ni:
break
ni = ni['parent']
path = '/'.join(x)
# print path
self.excluded_folders.append(path)
else:
self.recurse_excludings(n['children'])
if not self.resources.linker_script:
raise NotSupportedException("No linker script found.")
print
print '[Create a GNU ARM Eclipse C++ managed project]'
print 'Project name: {0}'.format(self.project_name)
print 'Build configurations: Debug & Release'
self.resources.win_to_unix()
# TODO: use some logger to display additional info if verbose
# There are 4 categories of options, a category common too
# all tools and a specific category for each of the tools.
self.options = {}
self.options['common'] = {}
self.options['as'] = {}
self.options['c'] = {}
self.options['cpp'] = {}
self.options['ld'] = {}
libraries = []
# print 'libraries'
# print self.resources.libraries
for lib in self.resources.libraries:
l, _ = splitext(basename(lib))
libraries.append(l[3:])
self.system_libraries = [
'stdc++', 'supc++', 'm', 'c', 'gcc', 'nosys'
]
# TODO: get the list from existing .cproject
build_folders = ['Debug', 'Release', 'BUILD']
objects = [self.filter_dot(s) for s in self.resources.objects]
for bf in build_folders:
objects = [o for o in objects if not o.startswith(bf + '/')]
# print 'objects'
# print objects
self.compute_exclusions()
self.process_options()
self.options['as']['defines'] = self.toolchain.get_symbols(True)
self.options['c']['defines'] = self.toolchain.get_symbols()
self.options['cpp']['defines'] = self.toolchain.get_symbols()
print 'Symbols: {0}'.format(len(self.options['cpp']['defines']))
self.options['common']['include_paths'] = [
self.filter_dot(s) for s in self.resources.inc_dirs]
print 'Include folders: {0}'.format(len(self.options['common']['include_paths']))
self.options['common']['excluded_folders'] = '|'.join(
self.excluded_folders)
self.options['ld']['library_paths'] = [
self.filter_dot(s) for s in self.resources.lib_dirs]
self.options['ld']['object_files'] = objects
self.options['ld']['user_libraries'] = libraries
self.options['ld']['system_libraries'] = self.system_libraries
self.options['ld']['script'] = self.filter_dot(
self.resources.linker_script)
print 'Linker script: {0}'.format(self.options['ld']['script'])
ctx = {
'name': self.project_name,
# Compiler & linker command line options
'options': self.options,
# Unique IDs used in multiple places.
# Those used only once are implemented with {{u.id}}.
'debug_config_uid': u.id,
'debug_tool_c_compiler_uid': u.id,
'debug_tool_c_compiler_input_uid': u.id,
'debug_tool_cpp_compiler_uid': u.id,
'debug_tool_cpp_compiler_input_uid': u.id,
'release_config_uid': u.id,
'release_tool_c_compiler_uid': u.id,
'release_tool_c_compiler_input_uid': u.id,
'release_tool_cpp_compiler_uid': u.id,
'release_tool_cpp_compiler_input_uid': u.id,
# Must be an object with an `id` property, which
# will be called repeatedly, to generate multiple UIDs.
'u': u,
}
# TODO: it would be good to have jinja stop if one of the
# expected context values is not defined.
self.gen_file('gnuarmeclipse/.project.tmpl', ctx, '.project')
self.gen_file('gnuarmeclipse/.cproject.tmpl', ctx, '.cproject')
print 'Done.'
# override
@staticmethod
def build(project_name, log_name="build_log.txt", cleanup=True):
"""
Build GNU ARM Eclipse project.
"""
ret_code = 0
# TODO: add code to run the build in a headless configuration.
# Cleanup the exported and built files
if cleanup:
os.remove('.project')
os.remove('.cproject')
# TODO: remove Debug, Release
if ret_code != 0:
# Seems like something went wrong.
return -1
else:
return 0
# -------------------------------------------------------------------------
# Process source files/folders exclusions.
def compute_exclusions(self):
"""
With the project root as the only source folder known to CDT,
based on the list of source files, compute the folders to not
be included in the build.
The steps are:
- get the list of source folders, as dirname(source_file)
- compute the top folders (subfolders of the project folder)
- iterate all subfolders and add them to a tree, with all
nodes markes as 'not used'
- iterate the source folders and mark them as 'used' in the
tree, including all intermediate nodes
- recurse the tree and collect all unused folders; descend
the hierarchy only for used nodes
"""
source_folders = [self.filter_dot(s) for s in set(dirname(
src) for src in self.resources.c_sources + self.resources.cpp_sources + self.resources.s_sources)]
if '.' in source_folders:
source_folders.remove('.')
# print 'source folders'
# print source_folders
top_folders = [f for f in set(s.split(os.sep)[0]
for s in source_folders)]
# print 'top folders'
# print top_folders
self.source_tree = {}
for top_folder in top_folders:
for root, dirs, files in os.walk(top_folder):
if len(dirs) == 0:
self.add_source_folder_to_tree(root)
for folder in source_folders:
self.add_source_folder_to_tree(folder, True)
# print
# print self.source_tree
# self.dump_paths(self.source_tree)
# print 'excludings'
self.excluded_folders = ['BUILD']
self.recurse_excludings(self.source_tree)
print 'Source folders: {0}, with {1} exclusions'.format(len(source_folders), len(self.excluded_folders))
def add_source_folder_to_tree(self, path, is_used=False):
"""
@ -155,67 +286,105 @@ class GNUARMEclipse(Exporter):
p = n[s]
n = n[s]['children']
def compute_exclusions(self):
def recurse_excludings(self, node):
"""
With the project root as the only source folder known to CDT,
based on the list of source files, compute the folders to not
be included in the build.
The steps are:
- get the list of source folders, as dirname(source_file)
- compute the top folders (subfolders of the project folder)
- iterate all subfolders and add them to a tree, with all
nodes markes as 'not used'
- iterate the source folders and mark them as 'used' in the
tree, including all intermediate nodes
- recurse the tree and collect all unused folders; descend
the hierarchy only for used nodes
Recurse the tree and collect all unused folders; descend
the hierarchy only for used nodes.
"""
source_folders = [self.filter_dot(s) for s in set(dirname(
src) for src in self.resources.c_sources + self.resources.cpp_sources + self.resources.s_sources)]
source_folders.remove('.')
# print 'source folders'
# print source_folders
for k in node.keys():
n = node[k]
if n['is_used'] == False:
x = []
ni = n
while True:
x.insert(0, ni['name'])
if 'parent' not in ni:
break
ni = ni['parent']
path = '/'.join(x)
# print path
self.excluded_folders.append(path)
else:
self.recurse_excludings(n['children'])
top_folders = [f for f in set(s.split(os.sep)[0]
for s in source_folders)]
# print 'top folders'
# print top_folders
# -------------------------------------------------------------------------
self.source_tree = {}
for top_folder in top_folders:
for root, dirs, files in os.walk(top_folder):
if len(dirs) == 0:
self.add_source_folder_to_tree(root)
for folder in source_folders:
self.add_source_folder_to_tree(folder, True)
# print
# print self.source_tree
# self.dump_paths(self.source_tree)
# print 'excludings'
self.excluded_folders = []
self.recurse_excludings(self.source_tree)
def generate(self):
@staticmethod
def filter_dot(s):
"""
Override the parent method with code generation.
Remove the './' prefix, if present.
This function assumes that resources.win_to_unix()
replaced all windows backslashes with slashes.
"""
if not self.resources.linker_script:
raise NotSupportedException("No linker script found.")
if s == None:
return None
if s[:2] == './':
return s[2:]
return s
self.resources.win_to_unix()
# -------------------------------------------------------------------------
print 'libraries'
print self.resources.libraries
def dump_tree(self, node, depth=0):
for k in node.keys():
n = node[k]
pn = n['parent']['name'] if 'parent' in n.keys() else ''
print ' ' * depth, n['name'], n['is_used'], pn
if len(n['children'].keys()) != 0:
self.dump_tree(n['children'], depth + 1)
libraries = []
print self.resources.libraries
for lib in self.resources.libraries:
l, _ = splitext(basename(lib))
libraries.append(l[3:])
def dump_paths(self, node, depth=0):
for k in node.keys():
n = node[k]
x = []
ni = n
while True:
x.insert(0, ni['name'])
if 'parent' not in ni:
break
ni = ni['parent']
path = '/'.join(x)
print path, n['is_used']
self.dump_paths(n['children'], depth + 1)
# -------------------------------------------------------------------------
def process_options(self):
"""
CDT managed projects store lots of build options in separate
variables, with separate IDs in the .cproject file.
When the CDT build is started, all these options are brought
together to compose the compiler and linker command lines.
Here the process is reversed, from the compiler and linker
command lines, the options are identified and various flags are
set to control the template generation process.
Once identified, the options are removed from the command lines.
The options that were not identified are options that do not
have CDT equivalents and will be passed in the 'Other options'
categories.
Althogh this process does not have a very complicated logic,
given the large number of explicit configuration options
used by GNU ARM Eclipse managed build plug-in, it is tedious...
"""
flags = self.flags
if False:
print
print 'common_flags', flags['common_flags']
print 'asm_flags', flags['asm_flags']
print 'c_flags', flags['c_flags']
print 'cxx_flags', flags['cxx_flags']
print 'ld_flags', flags['ld_flags']
# Initialise the 'last resort' options where all unrecognised
# options will be collected.
self.options['as']['other'] = ''
self.options['c']['other'] = ''
self.options['cpp']['other'] = ''
self.options['ld']['other'] = ''
MCPUS = {
'Cortex-M0': {'mcpu': 'cortex-m0', 'fpu_unit': None},
@ -229,119 +398,449 @@ class GNUARMEclipse(Exporter):
'Cortex-M7FD': {'mcpu': 'cortex-m7', 'fpu_unit': 'fpv5d16'},
}
# Remove options that are supplied by CDT
self.remove_option(flags['common_flags'], '-c')
self.remove_option(flags['common_flags'], '-MMD')
# As 'plan B', get the CPU from the target definition.
core = self.toolchain.target.core
try:
# cortex-m0, cortex-m0-small-multiply, cortex-m0plus,
# cortex-m0plus-small-multiply, cortex-m1, cortex-m1-small-multiply,
# cortex-m3, cortex-m4, cortex-m7.
target_mcpu = MCPUS[core]['mcpu']
self.options['common']['arm.target.family'] = None
# default, fpv4spd16, fpv5d16, fpv5spd16
target_fpu_unit = MCPUS[core]['fpu_unit']
# cortex-m0, cortex-m0-small-multiply, cortex-m0plus,
# cortex-m0plus-small-multiply, cortex-m1, cortex-m1-small-multiply,
# cortex-m3, cortex-m4, cortex-m7.
str = self.find_options(flags['common_flags'], '-mcpu=')
if str != None:
self.options['common']['arm.target.family'] = str[len('-mcpu='):]
self.remove_option(flags['common_flags'], str)
self.remove_option(flags['ld_flags'], str)
else:
if core not in MCPUS:
raise NotSupportedException(
'Target core {0} not supported.'.format(core))
self.options['common']['arm.target.family'] = MCPUS[core]['mcpu']
# soft, softfp, hard.
target_fpu_abi = 'soft'
self.options['common']['arm.target.arch'] = 'none'
str = self.find_options(flags['common_flags'], '-march=')
arch = str[len('-march='):]
archs = {'armv6-m': 'armv6-m', 'armv7-m': 'armv7-m'}
if arch in archs:
self.options['common']['arm.target.arch'] = archs[arh]
self.remove_option(flags['common_flags'], str)
if target_fpu_unit != None:
target_fpu_abi = 'hard'
self.options['common']['arm.target.instructionset'] = 'thumb'
if '-mthumb' in flags['common_flags']:
self.remove_option(flags['common_flags'], '-mthumb')
self.remove_option(flags['ld_flags'], '-mthumb')
elif '-marm' in flags['common_flags']:
self.options['common']['arm.target.instructionset'] = 'arm'
self.remove_option(flags['common_flags'], '-marm')
self.remove_option(flags['ld_flags'], '-marm')
except AttributeError:
# TODO filter out projects with toolchain core not supported,
# instead of raising an exception.
raise NotSupportedException(
'Target core {0} not supported.'.format(core))
self.options['common']['arm.target.thumbinterwork'] = False
if '-mthumb-interwork' in flags['common_flags']:
self.options['common']['arm.target.thumbinterwork'] = True
self.remove_option(flags['common_flags'], '-mthumb-interwork')
# TODO: get the list from existing .cproject
build_folders = ['Debug', 'Release']
self.options['common']['arm.target.endianness'] = None
if '-mlittle-endian' in flags['common_flags']:
self.options['common']['arm.target.endianness'] = 'little'
self.remove_option(flags['common_flags'], '-mlittle-endian')
elif '-mbig-endian' in flags['common_flags']:
self.options['common']['arm.target.endianness'] = 'big'
self.remove_option(flags['common_flags'], '-mbig-endian')
objects = [self.filter_dot(s) for s in self.resources.objects]
for bf in build_folders:
objects = [o for o in objects if not o.startswith(bf + '/')]
print 'objects'
print objects
self.options['common']['arm.target.fpu.unit'] = None
# default, fpv4spd16, fpv5d16, fpv5spd16
str = self.find_options(flags['common_flags'], '-mfpu=')
if str != None:
fpu = str[len('-mfpu='):]
fpus = {
'fpv4-sp-d16': 'fpv4spd16',
'fpv5-d16': 'fpv5d16',
'fpv5-sp-d16': 'fpv5spd16'
}
if fpu in fpus:
self.options['common']['arm.target.fpu.unit'] = fpus[fpu]
f = self.flags
print 'common_flags'
print f['common_flags']
print 'asm_flags'
print f['asm_flags']
print 'c_flags'
print f['c_flags']
print 'cxx_flags'
print f['cxx_flags']
print 'ld_flags'
print f['ld_flags']
self.remove_option(flags['common_flags'], str)
self.remove_option(flags['ld_flags'], str)
if self.options['common']['arm.target.fpu.unit'] == None:
if core not in MCPUS:
raise NotSupportedException(
'Target core {0} not supported.'.format(core))
if MCPUS[core]['fpu_unit']:
self.options['common'][
'arm.target.fpu.unit'] = MCPUS[core]['fpu_unit']
source_folders = [self.filter_dot(s) for s in set(dirname(
src) for src in self.resources.c_sources + self.resources.cpp_sources + self.resources.s_sources)]
source_folders.remove('.')
# soft, softfp, hard.
str = self.find_options(flags['common_flags'], '-mfloat-abi=')
if str != None:
self.options['common']['arm.target.fpu.abi'] = str[
len('-mfloat-abi='):]
self.remove_option(flags['common_flags'], str)
self.remove_option(flags['ld_flags'], str)
self.compute_exclusions()
self.options['common']['arm.target.unalignedaccess'] = None
if '-munaligned-access' in flags['common_flags']:
self.options['common']['arm.target.unalignedaccess'] = 'enabled'
self.remove_option(flags['common_flags'], '-munaligned-access')
elif '-mno-unaligned-access' in flags['common_flags']:
self.options['common']['arm.target.unalignedaccess'] = 'disabled'
self.remove_option(flags['common_flags'], '-mno-unaligned-access')
asm_defines = self.toolchain.get_symbols(True)
c_defines = self.toolchain.get_symbols()
cpp_defines = self.toolchain.get_symbols()
# Default optimisation level for Release.
self.options['common']['optimization.level'] = '-Os'
include_paths = [self.filter_dot(s) for s in self.resources.inc_dirs]
# If the project defines an optimisation level, it is used
# only for the Release configuration, the Debug one used '-Og'.
str = self.find_options(flags['common_flags'], '-O')
if str != None:
levels = {
'-O0': 'none', '-O1': 'optimize', '-O2': 'more',
'-O3': 'most', '-Os': 'size', '-Og': 'debug'
}
if str in levels:
self.options['common']['optimization.level'] = levels[str]
self.remove_option(flags['common_flags'], str)
library_paths = [self.filter_dot(s) for s in self.resources.lib_dirs]
include_files = []
for all_flags in [flags['common_flags'], flags['c_flags'], flags['cxx_flags']]:
while '-include' in all_flags:
ix = all_flags.index('-include')
str = all_flags[ix + 1]
if str not in include_files:
include_files.append(str)
self.remove_option(all_flags, '-include')
self.remove_option(all_flags, str)
linker_script = self.filter_dot(self.resources.linker_script)
self.options['common']['include_files'] = include_files
ctx = {
'name': self.project_name,
'excluded_folders': '|'.join(self.excluded_folders),
'include_paths': include_paths,
'library_paths': library_paths,
'object_files': objects,
'libraries': libraries,
'linker_script': linker_script,
'asm_defines': asm_defines,
'c_defines': c_defines,
'cpp_defines': cpp_defines,
'target_mcpu': target_mcpu,
'target_fpu_abi': target_fpu_abi,
'target_fpu_unit': target_fpu_unit,
if '-ansi' in flags['c_flags']:
self.options['c']['compiler.std'] = '-ansi'
self.remove_option(flags['c_flags'], str)
else:
str = self.find_options(flags['c_flags'], '-std')
std = str[len('-std='):]
c_std = {
'c90': 'c90', 'c89': 'c90', 'gnu90': 'gnu90', 'gnu89': 'gnu90',
'c99': 'c99', 'c9x': 'c99', 'gnu99': 'gnu99', 'gnu9x': 'gnu98',
'c11': 'c11', 'c1x': 'c11', 'gnu11': 'gnu11', 'gnu1x': 'gnu11'
}
if std in c_std:
self.options['c']['compiler.std'] = c_std[std]
self.remove_option(flags['c_flags'], str)
# Unique IDs used each in multiple places.
# Add more if needed.
'debug_config_uid': u.id,
'debug_tool_c_compiler_uid': u.id,
'debug_tool_c_compiler_input_uid': u.id,
'debug_tool_cpp_compiler_uid': u.id,
'debug_tool_cpp_compiler_input_uid': u.id,
'release_config_uid': u.id,
'release_tool_c_compiler_uid': u.id,
'release_tool_c_compiler_input_uid': u.id,
'release_tool_cpp_compiler_uid': u.id,
'release_tool_cpp_compiler_input_uid': u.id,
if '-ansi' in flags['cxx_flags']:
self.options['cpp']['compiler.std'] = '-ansi'
self.remove_option(flags['cxx_flags'], str)
else:
str = self.find_options(flags['cxx_flags'], '-std')
std = str[len('-std='):]
cpp_std = {
'c++98': 'cpp98', 'c++03': 'cpp98',
'gnu++98': 'gnucpp98', 'gnu++03': 'gnucpp98',
'c++0x': 'cpp0x', 'gnu++0x': 'gnucpp0x',
'c++11': 'cpp11', 'gnu++11': 'gnucpp11',
'c++1y': 'cpp1y', 'gnu++1y': 'gnucpp1y',
'c++14': 'cpp14', 'gnu++14': 'gnucpp14',
'c++1z': 'cpp1z', 'gnu++1z': 'gnucpp1z',
}
if std in cpp_std:
self.options['cpp']['compiler.std'] = cpp_std[std]
self.remove_option(flags['cxx_flags'], str)
# Must be an object with an `id` property, which
# will be called repeatedly, to generate multiple UIDs.
'u': u,
# Common optimisation options.
optimization_options = {
'-fmessage-length=0': 'optimization.messagelength',
'-fsigned-char': 'optimization.signedchar',
'-ffunction-sections': 'optimization.functionsections',
'-fdata-sections': 'optimization.datasections',
'-fno-common': 'optimization.nocommon',
'-fno-inline-functions': 'optimization.noinlinefunctions',
'-ffreestanding': 'optimization.freestanding',
'-fno-builtin': 'optimization.nobuiltin',
'-fsingle-precision-constant': 'optimization.spconstant',
'-fPIC': 'optimization.PIC',
'-fno-move-loop-invariants': 'optimization.nomoveloopinvariants',
}
self.gen_file('gnuarmeclipse/.project.tmpl', ctx, '.project')
self.gen_file('gnuarmeclipse/.cproject.tmpl', ctx, '.cproject')
for option in optimization_options:
self.options['common'][optimization_options[option]] = False
if option in flags['common_flags']:
self.options['common'][optimization_options[option]] = True
self.remove_option(flags['common_flags'], option)
# Common warning options.
warning_options = {
'-fsyntax-only': 'warnings.syntaxonly',
'-pedantic': 'warnings.pedantic',
'-pedantic-errors': 'warnings.pedanticerrors',
'-w': 'warnings.nowarn',
'-Wunused': 'warnings.unused',
'-Wuninitialized': 'warnings.uninitialized',
'-Wall': 'warnings.allwarn',
'-Wextra': 'warnings.extrawarn',
'-Wmissing-declarations': 'warnings.missingdeclaration',
'-Wconversion': 'warnings.conversion',
'-Wpointer-arith': 'warnings.pointerarith',
'-Wpadded': 'warnings.padded',
'-Wshadow': 'warnings.shadow',
'-Wlogical-op': 'warnings.logicalop',
'-Waggregate-return': 'warnings.agreggatereturn',
'-Wfloat-equal': 'warnings.floatequal',
'-Werror': 'warnings.toerrors',
}
for option in warning_options:
self.options['common'][warning_options[option]] = False
if option in flags['common_flags']:
self.options['common'][warning_options[option]] = True
self.remove_option(flags['common_flags'], option)
# Common debug options.
debug_levels = {
'-g': 'default',
'-g1': 'minimal',
'-g3': 'max',
}
self.options['common']['debugging.level'] = 'none'
for option in debug_levels:
if option in flags['common_flags']:
self.options['common'][
'debugging.level'] = debug_levels[option]
self.remove_option(flags['common_flags'], option)
debug_formats = {
'-ggdb': 'gdb',
'-gstabs': 'stabs',
'-gstabs+': 'stabsplus',
'-gdwarf-2': 'dwarf2',
'-gdwarf-3': 'dwarf3',
'-gdwarf-4': 'dwarf4',
'-gdwarf-5': 'dwarf5',
}
self.options['common']['debugging.format'] = ''
for option in debug_levels:
if option in flags['common_flags']:
self.options['common'][
'debugging.format'] = debug_formats[option]
self.remove_option(flags['common_flags'], option)
self.options['common']['debugging.prof'] = False
if '-p' in flags['common_flags']:
self.options['common']['debugging.prof'] = True
self.remove_option(flags['common_flags'], '-p')
self.options['common']['debugging.gprof'] = False
if '-pg' in flags['common_flags']:
self.options['common']['debugging.gprof'] = True
self.remove_option(flags['common_flags'], '-gp')
# Assembler options.
self.options['as']['usepreprocessor'] = False
while '-x' in flags['asm_flags']:
ix = flags['asm_flags'].index('-x')
str = flags['asm_flags'][ix + 1]
if str == 'assembler-with-cpp':
self.options['as']['usepreprocessor'] = True
else:
# Collect all other assembler options.
self.options['as']['other'] += ' -x ' + str
self.remove_option(flags['asm_flags'], '-x')
self.remove_option(flags['asm_flags'], 'assembler-with-cpp')
self.options['as']['nostdinc'] = False
if '-nostdinc' in flags['asm_flags']:
self.options['as']['nostdinc'] = True
self.remove_option(flags['asm_flags'], '-nostdinc')
self.options['as']['verbose'] = False
if '-v' in flags['asm_flags']:
self.options['as']['verbose'] = True
self.remove_option(flags['asm_flags'], '-v')
# C options.
self.options['c']['nostdinc'] = False
if '-nostdinc' in flags['c_flags']:
self.options['c']['nostdinc'] = True
self.remove_option(flags['c_flags'], '-nostdinc')
self.options['c']['verbose'] = False
if '-v' in flags['c_flags']:
self.options['c']['verbose'] = True
self.remove_option(flags['c_flags'], '-v')
warning_options = {
'-Wmissing-prototypes': 'warnings.missingprototypes',
'-Wstrict-prototypes': 'warnings.strictprototypes',
'-Wbad-function-cast': 'warnings.badfunctioncast',
}
for option in warning_options:
self.options['c'][warning_options[option]] = False
if option in flags['common_flags']:
self.options['c'][warning_options[option]] = True
self.remove_option(flags['common_flags'], option)
# C++ options.
self.options['cpp']['nostdinc'] = False
if '-nostdinc' in flags['cxx_flags']:
self.options['cpp']['nostdinc'] = True
self.remove_option(flags['cxx_flags'], '-nostdinc')
self.options['cpp']['nostdincpp'] = False
if '-nostdinc++' in flags['cxx_flags']:
self.options['cpp']['nostdincpp'] = True
self.remove_option(flags['cxx_flags'], '-nostdinc++')
optimization_options = {
'-fno-exceptions': 'optimization.noexceptions',
'-fno-rtti': 'optimization.nortti',
'-fno-use-cxa-atexit': 'optimization.nousecxaatexit',
'-fno-threadsafe-statics': 'optimization.nothreadsafestatics',
}
for option in optimization_options:
self.options['cpp'][optimization_options[option]] = False
if option in flags['cxx_flags']:
self.options['cpp'][optimization_options[option]] = True
self.remove_option(flags['cxx_flags'], option)
if option in flags['common_flags']:
self.options['cpp'][optimization_options[option]] = True
self.remove_option(flags['common_flags'], option)
warning_options = {
'-Wabi': 'warnabi',
'-Wctor-dtor-privacy': 'warnings.ctordtorprivacy',
'-Wnoexcept': 'warnings.noexcept',
'-Wnon-virtual-dtor': 'warnings.nonvirtualdtor',
'-Wstrict-null-sentinel': 'warnings.strictnullsentinel',
'-Wsign-promo': 'warnings.signpromo',
'-Weffc++': 'warneffc',
}
for option in warning_options:
self.options['cpp'][warning_options[option]] = False
if option in flags['cxx_flags']:
self.options['cpp'][warning_options[option]] = True
self.remove_option(flags['cxx_flags'], option)
if option in flags['common_flags']:
self.options['cpp'][warning_options[option]] = True
self.remove_option(flags['common_flags'], option)
self.options['cpp']['verbose'] = False
if '-v' in flags['cxx_flags']:
self.options['cpp']['verbose'] = True
self.remove_option(flags['cxx_flags'], '-v')
# Linker options.
linker_options = {
'-nostartfiles': 'nostart',
'-nodefaultlibs': 'nodeflibs',
'-nostdlib': 'nostdlibs',
}
for option in linker_options:
self.options['ld'][linker_options[option]] = False
if option in flags['ld_flags']:
self.options['ld'][linker_options[option]] = True
self.remove_option(flags['ld_flags'], option)
self.options['ld']['gcsections'] = False
if '-Wl,--gc-sections' in flags['ld_flags']:
self.options['ld']['gcsections'] = True
self.remove_option(flags['ld_flags'], '-Wl,--gc-sections')
self.options['ld']['flags'] = []
to_remove = []
for opt in flags['ld_flags']:
if opt.startswith('-Wl,--wrap,'):
self.options['ld']['flags'].append('--wrap='+opt[len('-Wl,--wrap,'):])
to_remove.append(opt)
for opt in to_remove:
self.remove_option(flags['ld_flags'], opt)
# Other tool remaining options are separated by category.
self.options['as']['otherwarnings'] = self.find_options(
flags['asm_flags'], '-W')
self.options['c']['otherwarnings'] = self.find_options(
flags['c_flags'], '-W')
self.options['c']['otheroptimizations'] = self.find_options(flags[
'c_flags'], '-f')
self.options['cpp']['otherwarnings'] = self.find_options(
flags['cxx_flags'], '-W')
self.options['cpp']['otheroptimizations'] = self.find_options(
flags['cxx_flags'], '-f')
# Other common remaining options are separated by category.
self.options['common']['optimization.other'] = self.find_options(
flags['common_flags'], '-f')
self.options['common']['warnings.other'] = self.find_options(
flags['common_flags'], '-W')
# Remaining common flags are added to each tool.
self.options['as']['other'] += ' ' + \
' '.join(flags['common_flags']) + ' ' + \
' '.join(flags['asm_flags'])
self.options['c']['other'] += ' ' + \
' '.join(flags['common_flags']) + ' ' + ' '.join(flags['c_flags'])
self.options['cpp']['other'] += ' ' + \
' '.join(flags['common_flags']) + ' ' + \
' '.join(flags['cxx_flags'])
self.options['ld']['other'] += ' ' + \
' '.join(flags['common_flags']) + ' ' + ' '.join(flags['ld_flags'])
if len(self.system_libraries) > 0:
self.options['ld']['other'] += ' -Wl,--start-group '
self.options['ld'][
'other'] += ' '.join('-l' + s for s in self.system_libraries)
self.options['ld']['other'] += ' -Wl,--end-group '
# Strip all 'other' flags, since they might have leading spaces.
self.options['as']['other'] = self.options['as']['other'].strip()
self.options['c']['other'] = self.options['c']['other'].strip()
self.options['cpp']['other'] = self.options['cpp']['other'].strip()
self.options['ld']['other'] = self.options['ld']['other'].strip()
if False:
print
print self.options
print
print 'common_flags', flags['common_flags']
print 'asm_flags', flags['asm_flags']
print 'c_flags', flags['c_flags']
print 'cxx_flags', flags['cxx_flags']
print 'ld_flags', flags['ld_flags']
@staticmethod
def build(project_name, log_name="build_log.txt", cleanup=True):
"""
Build GNU ARM Eclipse project.
"""
ret_code = 0
# TODO: add code to run the build in a headless configuration.
# Cleanup the exported and built files
if cleanup:
os.remove('.project')
os.remove('.cproject')
if ret_code !=0:
# Seems like something went wrong.
return -1
def find_options(lst, option):
tmp = [str for str in lst if str.startswith(option)]
if len(tmp) > 0:
return tmp[0]
else:
return 0
return None
@staticmethod
def find_options(lst, prefix):
other = ''
opts = [str for str in lst if str.startswith(prefix)]
if len(opts) > 0:
for opt in opts:
other += ' ' + opt
GNUARMEclipse.remove_option(lst, opt)
return other.strip()
@staticmethod
def remove_option(lst, option):
if option in lst:
lst.remove(option)
# =============================================================================