Refactoring of Netbeans Exporter...still some more work to do, because linking still not works

pull/5954/head
c.mandl 2017-11-24 09:45:46 +01:00 committed by Cruz Monrreal II‰
parent 979e54b031
commit 103244da8c
5 changed files with 531 additions and 245 deletions

View File

@ -58,14 +58,12 @@ EXPORTERS = {
'eclipse_iar' : cdt.EclipseIAR, 'eclipse_iar' : cdt.EclipseIAR,
'eclipse_armc5' : cdt.EclipseArmc5, 'eclipse_armc5' : cdt.EclipseArmc5,
'gnuarmeclipse': gnuarmeclipse.GNUARMEclipse, 'gnuarmeclipse': gnuarmeclipse.GNUARMEclipse,
'netbeans': nb.GNUARMNetbeans,
'mcuxpresso': mcuxpresso.MCUXpresso, 'mcuxpresso': mcuxpresso.MCUXpresso,
'qtcreator': qtcreator.QtCreator, 'qtcreator': qtcreator.QtCreator,
'vscode_gcc_arm' : vscode.VSCodeGcc, 'vscode_gcc_arm' : vscode.VSCodeGcc,
'vscode_iar' : vscode.VSCodeIAR, 'vscode_iar' : vscode.VSCodeIAR,
'vscode_armc5' : vscode.VSCodeArmc5, 'vscode_armc5' : vscode.VSCodeArmc5
'netbeans_gcc_arm' : nb.NetbeansGcc,
'netbeans_iar' : nb.NetbeansIAR,
'netbeans_armc5' : nb.NetbeansArmc5
} }
ERROR_MESSAGE_UNSUPPORTED_TOOLCHAIN = """ ERROR_MESSAGE_UNSUPPORTED_TOOLCHAIN = """

View File

@ -0,0 +1,128 @@
#
# There exist several targets which are by default empty and which can be
# used for execution of your targets. These targets are usually executed
# before and after some main targets. They are:
#
# .build-pre: called before 'build' target
# .build-post: called after 'build' target
# .clean-pre: called before 'clean' target
# .clean-post: called after 'clean' target
# .clobber-pre: called before 'clobber' target
# .clobber-post: called after 'clobber' target
# .all-pre: called before 'all' target
# .all-post: called after 'all' target
# .help-pre: called before 'help' target
# .help-post: called after 'help' target
#
# Targets beginning with '.' are not intended to be called on their own.
#
# Main targets can be executed directly, and they are:
#
# build build a specific configuration
# clean remove built files from a configuration
# clobber remove all built files
# all build all configurations
# help print help mesage
#
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
# .help-impl are implemented in nbproject/makefile-impl.mk.
#
# Available make variables:
#
# CND_BASEDIR base directory for relative paths
# CND_DISTDIR default top distribution directory (build artifacts)
# CND_BUILDDIR default top build directory (object files, ...)
# CONF name of current configuration
# CND_PLATFORM_${CONF} platform name (current configuration)
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
#
# NOCDDL
# Environment
MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
# build
build: .build-post
.build-pre:
# Add your pre 'build' code here...
.build-post: .build-impl
# Add your post 'build' code here...
# clean
clean: .clean-post
.clean-pre:
# Add your pre 'clean' code here...
.clean-post: .clean-impl
# Add your post 'clean' code here...
# clobber
clobber: .clobber-post
.clobber-pre:
# Add your pre 'clobber' code here...
.clobber-post: .clobber-impl
# Add your post 'clobber' code here...
# all
all: .all-post
.all-pre:
# Add your pre 'all' code here...
.all-post: .all-impl
# Add your post 'all' code here...
# build tests
build-tests: .build-tests-post
.build-tests-pre:
# Add your pre 'build-tests' code here...
.build-tests-post: .build-tests-impl
# Add your post 'build-tests' code here...
# run tests
test: .test-post
.test-pre: build-tests
# Add your pre 'test' code here...
.test-post: .test-impl
# Add your post 'test' code here...
# help
help: .help-post
.help-pre:
# Add your pre 'help' code here...
.help-post: .help-impl
# Add your post 'help' code here...
# include project implementation makefile
include nbproject/Makefile-impl.mk
# include project make variables
include nbproject/Makefile-variables.mk

View File

@ -1,20 +1,34 @@
import re
import os import os
import copy import copy
from os.path import relpath, join, exists from os.path import relpath, join, exists, dirname, basename
from os import makedirs from os import makedirs
from json import load
from tools.export.makefile import Makefile, GccArm, Armc5, IAR from tools.export.exporters import Exporter, apply_supported_whitelist
from tools.targets import TARGET_MAP
from tools.utils import NotSupportedException
from tools.build_api import prepare_toolchain
POST_BINARY_WHITELIST = set([
"TEENSY3_1Code.binary_hook",
"MCU_NRF51Code.binary_hook",
"LPCTargetCode.lpc_patch",
"LPC4088Code.binary_hook"
])
class Netbeans(Makefile): class GNUARMNetbeans(Exporter):
"""Generic Netbeans project. Intended to be subclassed by classes that NAME = 'GNU ARM Netbeans'
specify a type of Makefile. TOOLCHAIN = 'GCC_ARM'
"""
@property @classmethod
def flags(self): def is_target_supported(cls, target_name):
target = TARGET_MAP[target_name]
return apply_supported_whitelist(
cls.TOOLCHAIN, POST_BINARY_WHITELIST, target)
def toolchain_flags(self, toolchain):
"""Returns a dictionary of toolchain flags. """Returns a dictionary of toolchain flags.
Keys of the dictionary are: Keys of the dictionary are:
cxx_flags - c++ flags cxx_flags - c++ flags
@ -23,168 +37,352 @@ class Netbeans(Makefile):
asm_flags - assembler flags asm_flags - assembler flags
common_flags - common options common_flags - common options
The difference from the parent function is that it does not The difference from the above is that it takes a parameter.
add macro definitions, since they are passed separately.
""" """
# Note: use the config options from the currently selected toolchain.
config_header = self.toolchain.get_config_header() config_header = self.toolchain.get_config_header()
flags = {key + "_flags": copy.deepcopy(value) for key, value flags = {key + "_flags": copy.deepcopy(value) for key, value
in self.toolchain.flags.iteritems()} in toolchain.flags.iteritems()}
if config_header: if config_header:
config_header = relpath(config_header, config_header = relpath(config_header,
self.resources.file_basepath[config_header]) self.resources.file_basepath[config_header])
flags['c_flags'] += self.toolchain.get_config_option(config_header) header_options = self.toolchain.get_config_option(config_header)
flags['cxx_flags'] += self.toolchain.get_config_option( flags['c_flags'] += header_options
config_header) flags['cxx_flags'] += header_options
return flags return flags
def generate(self): @staticmethod
"""Generate Makefile, configurations.xml & project.xml Netbeans project file def get_defines_and_remove_from_flags(flags_in, str_key):
""" defines = []
super(Netbeans, self).generate() flags_temp = copy.deepcopy(flags_in)
for f in flags_temp[str_key]:
f = f.strip()
if f.startswith('-D'):
defines.append(f[2:])
flags_in[str_key].remove(f)
defines = [] # list of tuples ('D'/'U', [key, value]) (value is optional) return defines
forced_includes = [] # list of strings
sources = [] # list of strings
headers = [] # list of strings
@staticmethod
def get_includes_and_remove_from_flags(flags_in, str_key):
includes = []
flags_temp = copy.deepcopy(flags_in)
next_is_include = False next_is_include = False
for f in self.flags['c_flags'] + self.flags['cxx_flags']: for f in flags_temp[str_key]:
f = f.strip() f = f.strip()
if next_is_include: if next_is_include:
forced_includes.append(f) includes.append(f)
flags_in[str_key].remove(f)
next_is_include = False next_is_include = False
continue continue
if f.startswith('-D'): if f == "-include":
defines.append(('D', f[2:].split('=', 1))) flags_in[str_key].remove(f)
elif f.startswith('-U'):
defines.append(('U', [f[2:]]))
elif f == "-include":
next_is_include = True next_is_include = True
return includes
@staticmethod
def get_c_std_and_remove_from_flag(flags_in, str_key):
comp_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'
}
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',
}
flags_temp = copy.deepcopy(flags_in)
for f in flags_temp[str_key]:
f = f.strip()
if f.startswith('-std='):
comp_std = f[len('-std='):]
flags_in[str_key].remove(f)
elif f.startswith('-'):
std = f[len('-'):]
if std in c_std or std in cpp_std:
comp_std = std
flags_in[str_key].remove(f)
return comp_std
def validate_resources(self):
if not self.resources.linker_script:
raise NotSupportedException("No linker script found.")
def create_jinja_ctx(self):
self.validate_resources()
# Convert all Backslashes to Forward Slashes # Convert all Backslashes to Forward Slashes
self.resources.win_to_unix() self.resources.win_to_unix()
print 'Include folders: {0}'.format(len(self.resources.inc_dirs))
print 'Symbols: {0}'.format(len(self.toolchain.get_symbols()))
self.ld_script = self.filter_dot(
self.resources.linker_script)
print 'Linker script: {0}'.format(self.ld_script)
# Read in all profiles, we'll extract compiler options.
profiles = self.get_all_profiles()
profile_ids = [s.lower() for s in profiles]
profile_ids.sort()
self.options = {}
for prof_id in profile_ids:
# There are 4 categories of options, a category common too
# all tools and a specific category for each of the tools.
opts = {}
opts['defines'] = {}
opts['common'] = {}
opts['as'] = {}
opts['c'] = {}
opts['cpp'] = {}
opts['ld'] = {}
opts['id'] = prof_id
opts['name'] = opts['id'].capitalize()
print
print 'Build configuration: {0}'.format(opts['name'])
profile = profiles[prof_id]
# A small hack, do not bother with src_path again,
# pass an empty string to avoid crashing.
src_paths = ['']
target_name = self.toolchain.target.name
toolchain = prepare_toolchain(
src_paths, "", target_name, self.TOOLCHAIN, build_profile=[profile])
flags = self.toolchain_flags(toolchain)
print 'Common flags:', ' '.join(flags['common_flags'])
print 'C++ flags:', ' '.join(flags['cxx_flags'])
print 'C flags:', ' '.join(flags['c_flags'])
print 'ASM flags:', ' '.join(flags['asm_flags'])
print 'Linker flags:', ' '.join(flags['ld_flags'])
opts['defines'] = self.get_defines_and_remove_from_flags(flags, 'common_flags')
opts['forced_includes'] = self.get_includes_and_remove_from_flags(flags, 'common_flags')
opts['common'] = flags['common_flags']
opts['as'] = flags['asm_flags']
opts['c'] = flags['c_flags']
opts['cpp'] = flags['cxx_flags']
opts['ld'] = flags['ld_flags']
self.options[prof_id] = opts
sources = [] # list of strings
forced_includes = self.get_includes_and_remove_from_flags(flags, 'c_flags')
forced_includes += self.get_includes_and_remove_from_flags(flags, 'cxx_flags')
# Remove Duplicates
forced_includes = list(set(forced_includes))
c_std = self.get_c_std_and_remove_from_flag(flags, 'c_flags')
cpp_std = self.get_c_std_and_remove_from_flag(flags, 'cxx_flags')
# Make one list of all resources
for r_type in ['c_sources', 's_sources', 'cpp_sources']: for r_type in ['c_sources', 's_sources', 'cpp_sources']:
sources.extend(getattr(self.resources, r_type)) sources.extend(getattr(self.resources, r_type))
for r_type in ['headers']: # Remove all leading './'
headers.extend(getattr(self.resources, r_type)) c_sources = [self.filter_dot(field) for field in getattr(self.resources, 'c_sources')]
cpp_sources = [self.filter_dot(field) for field in getattr(self.resources, 'cpp_sources')]
s_sources = [self.filter_dot(field) for field in getattr(self.resources, 's_sources')]
headers = [self.filter_dot(field) for field in getattr(self.resources, 'headers')]
sources = [self.filter_dot(field) for field in sources]
include_paths = [self.filter_dot(field) for field in self.resources.inc_dirs]
starting_dot = re.compile(r'(^[.]/|^[.]$)') if 'nbproject' in include_paths:
sources = [starting_dot.sub('', field) for field in sources] include_paths.remove('nbproject')
headers = [starting_dot.sub('', field) for field in headers]
include_paths = [starting_dot.sub('', field) for field in self.resources.inc_dirs]
headers.sort() jinja_ctx = {
sources.sort()
headers_output = create_netbeans_file_list(headers)
sources_output = create_netbeans_file_list(sources)
ctx = {
'name': self.project_name, 'name': self.project_name,
'elf_location': join('BUILD', self.project_name) + '.elf', 'elf_location': join('BUILD', self.project_name) + '.elf',
'c_symbols': self.toolchain.get_symbols(), 'c_symbols': self.toolchain.get_symbols(),
'asm_symbols': self.toolchain.get_symbols(True), 'asm_symbols': self.toolchain.get_symbols(True),
'c_flags': self.flags['c_flags'], 'c_flags': flags['c_flags'],
'cxx_flags': self.flags['cxx_flags'], 'cxx_flags': flags['cxx_flags'],
'ld_flags': self.flags['ld_flags'], 'ld_flags': self.flags['ld_flags'],
'asm_flags': self.flags['asm_flags'], 'asm_flags': self.flags['asm_flags'],
'common_flags': self.flags['common_flags'], 'common_flags': self.flags['common_flags'],
'target': self.target, 'target': self.target,
'include_paths': include_paths, 'include_paths': include_paths,
'sources': sources, 'forced_includes': forced_includes,
'c_sources': c_sources,
'cpp_sources': cpp_sources,
's_sources': s_sources,
'headers': headers, 'headers': headers,
'headers_folder': headers_output, 'headers_folder': self.get_netbeans_file_list(sorted(headers)),
'sources_folder': sources_output, 'sources_folder': self.get_netbeans_file_list(sorted(sources)),
'load_exe': str(self.LOAD_EXE).lower() 'options': self.options,
'c_std': self.get_netbeans_c_std(c_std),
'cpp_std': self.get_netbeans_cpp_std(cpp_std),
'linker_script': self.ld_script,
} }
return jinja_ctx
def generate(self):
"""Generate Makefile, configurations.xml & project.xml Netbeans project file
"""
# super(Netbeans, self).generate()
jinja_ctx = self.create_jinja_ctx()
print
print 'Create a GNU ARM Netbeans C++ managed project'
print 'Project name: {0}'.format(self.project_name)
print 'Target: {0}'.format(self.toolchain.target.name)
print 'Toolchain: {0}'.format(self.TOOLCHAIN)
if not exists(join(self.export_dir, 'nbproject')): if not exists(join(self.export_dir, 'nbproject')):
makedirs(join(self.export_dir, 'nbproject')) makedirs(join(self.export_dir, 'nbproject'))
self.gen_file('nb/configurations.tmpl', ctx, 'nbproject/configurations.xml') self.gen_file('nb/configurations.tmpl', jinja_ctx, 'nbproject/configurations.xml')
self.gen_file('nb/project.tmpl', ctx, 'nbproject/project.xml') self.gen_file('nb/project.tmpl', jinja_ctx, 'nbproject/project.xml')
self.gen_file('nb/mbedignore.tmpl', ctx, '.mbedignore') self.gen_file('nb/mbedignore.tmpl', jinja_ctx, '.mbedignore')
self.gen_file('nb/Makefile.tmpl', jinja_ctx, 'Makefile')
print
print 'Done. Import the \'{0}\' project in Netbeans.'.format(self.project_name)
def create_netbeans_file_list(file_list): # -------------------------------------------------------------------------
output = []
prev_dir = ''
folder_count = 1
for idx, item in enumerate(file_list):
cur_dir = os.path.dirname(item)
dir_temp = os.path.normpath(cur_dir)
prev_dir_temp = os.path.normpath(prev_dir)
dir_list = dir_temp.split(os.sep)
prev_dir_list = prev_dir_temp.split(os.sep)
dir_depth = len(dir_list)
# print 'PREV_DIR: ' + str(prev_dir_list) @staticmethod
def filter_dot(str_in):
"""
Remove the './' prefix, if present.
This function assumes that resources.win_to_unix()
replaced all windows backslashes with slashes.
"""
if str_in is None:
return None
if str_in[:2] == './':
return str_in[2:]
return str_in
# print 'CURR_DIR: ' + str(dir_list) # -------------------------------------------------------------------------
# Current File is in Directory: Compare the given dir with previous Dir @staticmethod
if cur_dir and prev_dir != cur_dir: def get_all_profiles():
# evaluate all matched items (from current and previous list) tools_path = dirname(dirname(dirname(__file__)))
matched = [] file_names = [join(tools_path, "profiles", fn) for fn in os.listdir(
for element in dir_list: join(tools_path, "profiles")) if fn.endswith(".json")]
if element in prev_dir_list:
matched.append(element)
# calculate difference between matched and length # print file_names
diff = dir_depth - len(matched)
# print 'MATCHED: ' + str(matched) # profile_names = [basename(fn).replace(".json", "")
# for fn in file_names]
# print profile_names
# if previous dir was not root profiles = {}
if prev_dir != '':
# if the elements count is not equal we calculate the difference
if len(dir_list) != len(prev_dir_list):
dir_depth_prev = len(prev_dir_list)
delta = dir_depth_prev - len(matched)
for i in range(dir_depth_prev - delta, dir_depth_prev): for fn in file_names:
content = load(open(fn))
profile_name = basename(fn).replace(".json", "")
profiles[profile_name] = content
return profiles
@staticmethod
def get_netbeans_file_list(file_list):
output = []
prev_dir = ''
folder_count = 1
for idx, item in enumerate(file_list):
cur_dir = os.path.dirname(item)
dir_temp = os.path.normpath(cur_dir)
prev_dir_temp = os.path.normpath(prev_dir)
dir_list = dir_temp.split(os.sep)
prev_dir_list = prev_dir_temp.split(os.sep)
dir_depth = len(dir_list)
# print 'PREV_DIR: ' + str(prev_dir_list)
# print 'CURR_DIR: ' + str(dir_list)
# Current File is in Directory: Compare the given dir with previous Dir
if cur_dir and prev_dir != cur_dir:
# evaluate all matched items (from current and previous list)
matched = []
for element in dir_list:
if element in prev_dir_list:
matched.append(element)
# calculate difference between matched and length
diff = dir_depth - len(matched)
# print 'MATCHED: ' + str(matched)
# if previous dir was not root
if prev_dir != '':
# if the elements count is not equal we calculate the difference
if len(dir_list) != len(prev_dir_list):
dir_depth_prev = len(prev_dir_list)
delta = dir_depth_prev - len(matched)
for i in range(dir_depth_prev - delta, dir_depth_prev):
output.append('</logicalFolder>')
# if the elements count is equal, we subtract the matched length from the total length
else:
for i in range(len(matched), len(dir_list)):
output.append('</logicalFolder>')
for i in range(dir_depth - diff, dir_depth):
output.append('<logicalFolder name="f' + str(folder_count) + '" displayName="' + str(
dir_list[i]) + '" projectFiles="true">')
folder_count += 1
# Current File is in root
else:
# Close Tag if we are in root and the previous dir wasn't
if cur_dir == '' and prev_dir != '':
for i in range(0, len(prev_dir_list)):
output.append('</logicalFolder>') output.append('</logicalFolder>')
# if the elements count is equal, we subtract the matched length from the total length # Save the Current Dir
else: prev_dir = cur_dir
for i in range(len(matched), len(dir_list)): output.append('<itemPath>' + str(item) + '</itemPath>')
output.append('</logicalFolder>') # if last iteration close all open tags
if idx == len(file_list) - 1 and cur_dir != '':
for i in range(dir_depth - diff, dir_depth): for i in range(0, len(dir_list)):
output.append('<logicalFolder name="f' + str(folder_count) + '" displayName="' + str(
dir_list[i]) + '" projectFiles="true">')
folder_count += 1
# Current File is in root
else:
# Close Tag if we are in root and the previous dir wasn't
if cur_dir == '' and prev_dir != '':
for i in range(0, len(prev_dir_list)):
output.append('</logicalFolder>') output.append('</logicalFolder>')
# Save the Current Dir return output
prev_dir = cur_dir
output.append('<itemPath>' + str(item) + '</itemPath>')
# if last iteration close all open tags
if idx == len(file_list) - 1 and cur_dir != '':
for i in range(0, len(dir_list)):
output.append('</logicalFolder>')
return output @staticmethod
def get_netbeans_c_std(c_std):
c_std_netbeans = 0
if '89' in c_std:
c_std_netbeans = 2
elif '99' in c_std:
c_std_netbeans = 3
elif '11' in c_std:
c_std_netbeans = 10
return c_std_netbeans
@staticmethod
class NetbeansGcc(Netbeans, GccArm): def get_netbeans_cpp_std(cpp_std):
LOAD_EXE = True cpp_std_netbeans = 0
NAME = "Netbeans-GCC-ARM" if '98' in cpp_std:
cpp_std_netbeans = 4
elif '11' in cpp_std:
class NetbeansArmc5(Netbeans, Armc5): cpp_std_netbeans = 8
LOAD_EXE = False elif '14' in cpp_std:
NAME = "Netbeans-Armc5" cpp_std_netbeans = 11
return cpp_std_netbeans
class NetbeansIAR(Netbeans, IAR):
LOAD_EXE = True
NAME = "Netbeans-IAR"

View File

@ -1,8 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configurationDescriptor version="100"> <configurationDescriptor version="100">
<logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT"> <logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">
<logicalFolder name="HeaderFiles" <logicalFolder name="HeaderFiles"
displayName="Header Files" displayName="Header Files"
projectFiles="true"> projectFiles="true">
@ -10,6 +8,11 @@
{{ header }} {{ header }}
{% endfor %} {% endfor %}
</logicalFolder> </logicalFolder>
<logicalFolder name="LinkerScript"
displayName="Linker Files"
projectFiles="true">
<itemPath>{{ linker_script }}</itemPath>
</logicalFolder>
<logicalFolder name="ResourceFiles" <logicalFolder name="ResourceFiles"
displayName="Resource Files" displayName="Resource Files"
projectFiles="true"> projectFiles="true">
@ -21,6 +24,10 @@
{{ source }} {{ source }}
{% endfor %} {% endfor %}
</logicalFolder> </logicalFolder>
<logicalFolder name="OtherFiles"
displayName="Other Files"
projectFiles="true">
</logicalFolder>
<logicalFolder name="TestFiles" <logicalFolder name="TestFiles"
displayName="Test Files" displayName="Test Files"
projectFiles="false" projectFiles="false"
@ -33,9 +40,15 @@
<itemPath>Makefile</itemPath> <itemPath>Makefile</itemPath>
</logicalFolder> </logicalFolder>
</logicalFolder> </logicalFolder>
<sourceFolderFilter>^(nbproject)$</sourceFolderFilter>
<sourceRootList>
<Elem>.</Elem>
</sourceRootList>
<projectmakefile>Makefile</projectmakefile> <projectmakefile>Makefile</projectmakefile>
<confs> <confs>
<conf name="Debug" type="1"> {% for id in options -%}
{% set opts = options[id] %}
<conf name="{{opts['id']}}" type="1">
<toolsSet> <toolsSet>
<compilerSet>default</compilerSet> <compilerSet>default</compilerSet>
<dependencyChecking>true</dependencyChecking> <dependencyChecking>true</dependencyChecking>
@ -43,37 +56,53 @@
</toolsSet> </toolsSet>
<compileType> <compileType>
<cTool> <cTool>
<standard>{{ c_std }}</standard>
<incDir> <incDir>
{% for include in include_paths -%} {% for inc_dir in include_paths -%}{% if inc_dir -%}
<pElem>{{ include }}</pElem> <pElem>{{ inc_dir }}</pElem>
{% endfor %} {% endif -%}
{% endfor -%}
</incDir> </incDir>
<commandLine> <incFile>
{% for flag in c_flags -%} {% for inc_file in forced_includes -%}
{{ flag }} <pElem>{{ inc_file }}</pElem>
{% endfor %} {% endfor -%}
</incFile>
<commandLine>{%- for flag in c_flags -%}{{ flag+" "}}{%- endfor -%}
{%- for item in opts['common'] -%}{{ item+" "}}{%- endfor -%}
</commandLine> </commandLine>
<preprocessorList> <preprocessorList>
{% for item in opts['defines'] -%}
<Elem>{{ item }}</Elem>
{% endfor -%}
{% for symbol in c_symbols -%} {% for symbol in c_symbols -%}
<Elem>{{ symbol }}</Elem> <Elem>{{ symbol }}</Elem>
{% endfor %} {% endfor -%}
</preprocessorList> </preprocessorList>
</cTool> </cTool>
<ccTool> <ccTool>
<standard>{{ cpp_std }}</standard>
<incDir> <incDir>
{% for include in include_paths -%} {% for inc_dir in include_paths -%}{% if inc_dir -%}
<pElem>{{ include }}</pElem> <pElem>{{ inc_dir }}</pElem>
{% endfor %} {% endif -%}
{% endfor -%}
</incDir> </incDir>
<commandLine> <incFile>
{% for flag in cxx_flags -%} {% for inc_file in forced_includes -%}
{{ flag }} <pElem>{{ inc_file }}</pElem>
{% endfor %} {% endfor -%}
</incFile>
<commandLine>{%- for flag in cxx_flags -%}{{ flag+" "}}{%- endfor -%}
{%- for item in opts['common'] -%}{{ item+" "}}{%- endfor -%}
</commandLine> </commandLine>
<preprocessorList> <preprocessorList>
{% for item in opts['defines'] -%}
<Elem>{{ item }}</Elem>
{% endfor -%}
{% for symbol in c_symbols -%} {% for symbol in c_symbols -%}
<Elem>{{ symbol }}</Elem> <Elem>{{ symbol }}</Elem>
{% endfor %} {% endfor -%}
</preprocessorList> </preprocessorList>
</ccTool> </ccTool>
<fortranCompilerTool> <fortranCompilerTool>
@ -82,124 +111,57 @@
<asmTool> <asmTool>
<developmentMode>5</developmentMode> <developmentMode>5</developmentMode>
<incDir> <incDir>
{% for include in include_paths -%} {% for inc_dir in include_paths -%}{% if inc_dir -%}
<pElem>{{ include }}</pElem> <pElem>{{ inc_dir }}</pElem>
{% endfor %} {% endif -%}
{% endfor -%}
</incDir> </incDir>
<commandLine> <incFile>
{% for flag in asm_flags -%} {% for inc_file in forced_includes -%}
{{ flag }} <pElem>{{ inc_file }}</pElem>
{% endfor %} {% endfor -%}
</incFile>
<commandLine>{%- for flag in asm_flags -%}{{ flag+" "}}{%- endfor -%}
{%- for item in opts['common'] -%}{{ item+" "}}{%- endfor -%}
</commandLine> </commandLine>
<preprocessorList> <preprocessorList>
{% for symbol in asm_symbols -%} {% for symbol in asm_symbols -%}
<Elem>{{ symbol }}</Elem> <Elem>{{ symbol }}</Elem>
{% endfor %} {% endfor -%}
</preprocessorList> </preprocessorList>
</asmTool> </asmTool>
<linkerTool> <linkerTool>
<commandLine> <commandlineTool>arm-none-eabi-gcc</commandlineTool>
{% for flag in ld_flags -%} <commandLine>{%- for symbol in opts['ld'] -%}{{ symbol+" "}}{%- endfor -%}</commandLine>
{{ flag }}
{% endfor %}
</commandLine>
</linkerTool> </linkerTool>
</compileType> </compileType>
{% for h in headers -%} {% for h in headers -%}
<item path="{{h}}" ex="false" tool="3" flavor2="0"> <item path="{{h}}" ex="false" tool="3" flavor2="0">
</item> </item>
{% endfor %} {% endfor -%}
{% for s in sources -%} {% for s in c_sources -%}
<item path="{{s}}" ex="false" tool="1" flavor2="0"> <item path="{{s}}" ex="false" tool="0" flavor2="3">
</item> <cTool flags="1">
{% endfor %}
<item path="main.cpp" ex="false" tool="1" flavor2="0">
</item>
</conf>
<conf name="Release" type="1">
<toolsSet>
<compilerSet>default</compilerSet>
<dependencyChecking>true</dependencyChecking>
<rebuildPropChanged>false</rebuildPropChanged>
</toolsSet>
<compileType>
{% for h in headers -%}
<item path="{{h}}" ex="false" tool="3" flavor2="0">
</item>
{% endfor %}
{% for s in sources -%}
<item path="{{s}}" ex="false" tool="1" flavor2="0">
</item>
{% endfor %}
<cTool>
<developmentMode>5</developmentMode>
<incDir>
{% for include in include_paths -%}
<pElem>{{ include }}</pElem>
{% endfor %}
</incDir>
<commandLine>
{% for flag in c_flags -%}
{{ flag }}
{% endfor %}
</commandLine>
<preprocessorList>
{% for symbol in c_symbols -%}
<Elem>{{ symbol }}</Elem>
{% endfor %}
</preprocessorList>
</cTool> </cTool>
<ccTool> </item>
<developmentMode>5</developmentMode> {% endfor -%}
<incDir> {% for s in cpp_sources -%}
{% for include in include_paths -%} <item path="{{s}}" ex="false" tool="1" flavor2="0">
<pElem>{{ include }}</pElem> <ccTool flags="0">
{% endfor %}
</incDir>
<commandLine>
{% for flag in cxx_flags -%}
{{ flag }}
{% endfor %}
</commandLine>
<preprocessorList>
{% for symbol in c_symbols -%}
<Elem>{{ symbol }}</Elem>
{% endfor %}
</preprocessorList>
</ccTool> </ccTool>
<fortranCompilerTool> </item>
<developmentMode>5</developmentMode> {% endfor -%}
</fortranCompilerTool> {% for s in s_sources -%}
<asmTool> <item path="{{s}}" ex="false" tool="0" flavor2="0">
<developmentMode>5</developmentMode> </item>
<incDir> {% endfor -%}
{% for include in include_paths -%} <item path="{{linker_script }}" ex="false" tool="3" flavor2="0">
<pElem>{{ include }}</pElem> </item>
{% endfor %} <item path="/nbproject/private/c_standard_headers_indexer.c" ex="true" tool="0" flavor2="0">
</incDir> </item>
<commandLine> <item path="/nbproject/private/c_standard_headers_indexer.cpp" ex="true" tool="1" flavor2="0">
{% for flag in asm_flags -%}
{{ flag }}
{% endfor %}
</commandLine>
<preprocessorList>
{% for symbol in asm_symbols -%}
<Elem>{{ symbol }}</Elem>
{% endfor %}
</preprocessorList>
</asmTool>
<linkerTool>
<commandLine>
{% for flag in ld_flags -%}
{{ flag }}
{% endfor %}
</commandLine>
</linkerTool>
</compileType>
<item path="main.cpp" ex="false" tool="1" flavor2="0">
</item> </item>
</conf> </conf>
{% endfor -%}
</confs> </confs>
</configurationDescriptor> </configurationDescriptor>

View File

@ -4,9 +4,9 @@
<configuration> <configuration>
<data xmlns="http://www.netbeans.org/ns/make-project/1"> <data xmlns="http://www.netbeans.org/ns/make-project/1">
<name>{{name}}</name> <name>{{name}}</name>
<c-extensions/> <c-extensions>c</c-extensions>
<cpp-extensions>cpp</cpp-extensions> <cpp-extensions>cpp</cpp-extensions>
<header-extensions/> <header-extensions>h</header-extensions>
<sourceEncoding>UTF-8</sourceEncoding> <sourceEncoding>UTF-8</sourceEncoding>
<make-dep-projects/> <make-dep-projects/>
<sourceRootList/> <sourceRootList/>