Merge pull request #3383 from armink/fix_eclipse

Fix eclipse
This commit is contained in:
Bernard Xiong 2020-02-18 15:39:45 +08:00 committed by GitHub
commit 10d480eec0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 527 additions and 59 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -20,6 +20,10 @@ from utils import xml_indent
import xml.etree.ElementTree as etree import xml.etree.ElementTree as etree
from xml.etree.ElementTree import SubElement from xml.etree.ElementTree import SubElement
from building import *
MODULE_VER_NUM = 0
source_pattern = ['*.c', '*.cpp', '*.cxx', '*.s', '*.S', '*.asm'] source_pattern = ['*.c', '*.cpp', '*.cxx', '*.s', '*.S', '*.asm']
def OSPath(path): def OSPath(path):
@ -134,57 +138,66 @@ def IsRttEclipsePathFormat(path):
return True return True
else : else :
return False return False
def IsCppProject():
return GetDepend('RT_USING_CPLUSPLUS')
def HandleToolOption(tools, env, project, reset): def HandleToolOption(tools, env, project, reset):
is_cpp_prj = IsCppProject()
BSP_ROOT = os.path.abspath(env['BSP_ROOT']) BSP_ROOT = os.path.abspath(env['BSP_ROOT'])
CPPDEFINES = project['CPPDEFINES'] CPPDEFINES = project['CPPDEFINES']
paths = [ConverToRttEclipsePathFormat(RelativeProjectPath(env, os.path.normpath(i)).replace('\\', '/')) for i in project['CPPPATH']] paths = [ConverToRttEclipsePathFormat(RelativeProjectPath(env, os.path.normpath(i)).replace('\\', '/')) for i in project['CPPPATH']]
compile_include_paths_option = None compile_include_paths_options = []
compile_include_files_option = None compile_include_files_options = []
compile_defs_option = None compile_defs_options = []
linker_scriptfile_option = None linker_scriptfile_option = None
linker_script_option = None linker_script_option = None
linker_nostart_option = None linker_nostart_option = None
linker_libs_option = None linker_libs_option = None
linker_paths_option = None linker_paths_option = None
linker_newlib_nano_option = None linker_newlib_nano_option = None
for tool in tools: for tool in tools:
if tool.get('id').find('c.compile') != 1: if tool.get('id').find('compile') != 1:
options = tool.findall('option') options = tool.findall('option')
# find all compile options # find all compile options
for option in options: for option in options:
if option.get('id').find('c.compiler.include.paths') != -1 or option.get('id').find('c.compiler.option.includepaths') != -1: if option.get('id').find('compiler.include.paths') != -1 or option.get('id').find('compiler.option.includepaths') != -1:
compile_include_paths_option = option compile_include_paths_options += [option]
elif option.get('id').find('c.compiler.include.files') != -1 or option.get('id').find('c.compiler.option.includefiles') != -1 : elif option.get('id').find('compiler.include.files') != -1 or option.get('id').find('compiler.option.includefiles') != -1 :
compile_include_files_option = option compile_include_files_options += [option]
elif option.get('id').find('c.compiler.defs') != -1 or option.get('id').find('c.compiler.option.definedsymbols') != -1: elif option.get('id').find('compiler.defs') != -1 or option.get('id').find('compiler.option.definedsymbols') != -1:
compile_defs_option = option compile_defs_options += [option]
if tool.get('id').find('c.linker') != -1: if tool.get('id').find('linker') != -1:
options = tool.findall('option') options = tool.findall('option')
# find all linker options # find all linker options
for option in options: for option in options:
if option.get('id').find('c.linker.scriptfile') != -1: # the project type and option type must equal
if is_cpp_prj != (option.get('id').find('cpp.linker') != -1):
continue
if option.get('id').find('linker.scriptfile') != -1:
linker_scriptfile_option = option linker_scriptfile_option = option
elif option.get('id').find('c.linker.option.script') != -1: elif option.get('id').find('linker.option.script') != -1:
linker_script_option = option linker_script_option = option
elif option.get('id').find('c.linker.nostart') != -1: elif option.get('id').find('linker.nostart') != -1:
linker_nostart_option = option linker_nostart_option = option
elif option.get('id').find('c.linker.libs') != -1 and env.has_key('LIBS'): elif option.get('id').find('linker.libs') != -1 and env.has_key('LIBS'):
linker_libs_option = option linker_libs_option = option
elif option.get('id').find('c.linker.paths') != -1 and env.has_key('LIBPATH'): elif option.get('id').find('linker.paths') != -1 and env.has_key('LIBPATH'):
linker_paths_option = option linker_paths_option = option
elif option.get('id').find('c.linker.usenewlibnano') != -1: elif option.get('id').find('linker.usenewlibnano') != -1:
linker_newlib_nano_option = option linker_newlib_nano_option = option
# change the inclue path # change the inclue path
if compile_include_paths_option is not None : for option in compile_include_paths_options:
option = compile_include_paths_option
# find all of paths in this project # find all of paths in this project
include_paths = option.findall('listOptionValue') include_paths = option.findall('listOptionValue')
for item in include_paths: for item in include_paths:
@ -196,8 +209,7 @@ def HandleToolOption(tools, env, project, reset):
for item in paths: for item in paths:
SubElement(option, 'listOptionValue', {'builtIn': 'false', 'value': item}) SubElement(option, 'listOptionValue', {'builtIn': 'false', 'value': item})
# change the inclue files (default) or definitions # change the inclue files (default) or definitions
if compile_include_files_option is not None: for option in compile_include_files_options:
option = compile_include_files_option
# add '_REENT_SMALL' to CPPDEFINES when --specs=nano.specs has select # add '_REENT_SMALL' to CPPDEFINES when --specs=nano.specs has select
if linker_newlib_nano_option is not None and linker_newlib_nano_option.get('value') == 'true' and '_REENT_SMALL' not in CPPDEFINES: if linker_newlib_nano_option is not None and linker_newlib_nano_option.get('value') == 'true' and '_REENT_SMALL' not in CPPDEFINES:
CPPDEFINES += ['_REENT_SMALL'] CPPDEFINES += ['_REENT_SMALL']
@ -227,25 +239,25 @@ def HandleToolOption(tools, env, project, reset):
break break
if find_ok is False: if find_ok is False:
SubElement(option, 'listOptionValue', {'builtIn': 'false', 'value': rtt_pre_inc_item}) SubElement(option, 'listOptionValue', {'builtIn': 'false', 'value': rtt_pre_inc_item})
elif compile_defs_option is not None : if len(compile_include_files_options) == 0:
option = compile_defs_option for option in compile_defs_options:
defs = option.findall('listOptionValue') defs = option.findall('listOptionValue')
project_defs = [] project_defs = []
for item in defs: for item in defs:
if reset is True: if reset is True:
# clean all old configuration # clean all old configuration
option.remove(item) option.remove(item)
else:
project_defs += [item.get('value')]
if len(project_defs) > 0:
cproject_defs = set(CPPDEFINES) - set(project_defs)
else: else:
project_defs += [item.get('value')] cproject_defs = CPPDEFINES
if len(project_defs) > 0:
cproject_defs = set(CPPDEFINES) - set(project_defs)
else:
cproject_defs = CPPDEFINES
# print('c.compiler.defs') # print('c.compiler.defs')
cproject_defs = sorted(cproject_defs) cproject_defs = sorted(cproject_defs)
for item in cproject_defs: for item in cproject_defs:
SubElement(option, 'listOptionValue', {'builtIn': 'false', 'value': item}) SubElement(option, 'listOptionValue', {'builtIn': 'false', 'value': item})
# update linker script config # update linker script config
if linker_scriptfile_option is not None : if linker_scriptfile_option is not None :