Browse Source

Merge pull request #3383 from armink/fix_eclipse

Fix eclipse
Bernard Xiong 5 years ago
parent
commit
10d480eec0

File diff suppressed because it is too large
+ 47 - 1
bsp/stm32/stm32f103-dofly-M3S/.cproject


File diff suppressed because it is too large
+ 46 - 1
bsp/stm32/stm32f103-yf-ufun/.cproject


File diff suppressed because it is too large
+ 46 - 1
bsp/stm32/stm32f401-st-nucleo/.cproject


File diff suppressed because it is too large
+ 46 - 1
bsp/stm32/stm32f405-smdz-breadfruit/.cproject


File diff suppressed because it is too large
+ 47 - 1
bsp/stm32/stm32f407-atk-explorer/.cproject


File diff suppressed because it is too large
+ 46 - 1
bsp/stm32/stm32f411-st-nucleo/.cproject


File diff suppressed because it is too large
+ 47 - 1
bsp/stm32/stm32f429-atk-apollo/.cproject


File diff suppressed because it is too large
+ 47 - 1
bsp/stm32/stm32f429-fire-challenger/.cproject


File diff suppressed because it is too large
+ 47 - 1
bsp/stm32/stm32f767-atk-apollo/.cproject


File diff suppressed because it is too large
+ 47 - 1
bsp/stm32/stm32l475-atk-pandora/.cproject


+ 52 - 40
tools/eclipse.py

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

Some files were not shown because too many files changed in this diff