Skip to content

Commit 6289596

Browse files
JarnoEttajaakkoh
authored andcommitted
Fixed sw4stm32 exporter
1 parent 5e437fe commit 6289596

File tree

2 files changed

+94
-9
lines changed

2 files changed

+94
-9
lines changed

tools/export/sw4stm32/__init__.py

Lines changed: 81 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
See the License for the specific language governing permissions and
1515
limitations under the License.
1616
"""
17-
from os.path import splitext, basename, join
17+
import os
18+
19+
from os.path import splitext, basename, join, dirname
1820
from random import randint
1921
from tools.utils import mkdir
2022
from tools.export.exporters import Exporter
@@ -79,32 +81,103 @@ def __gen_dir(self, dirname):
7981
def __generate_uid(self):
8082
return "%0.9u" % randint(0, 999999999)
8183

84+
@staticmethod
85+
def filter_dot(str):
86+
"""
87+
This function removes ./ from str.
88+
str must be converted with win_to_unix() before using this function.
89+
"""
90+
if str == None:
91+
return None
92+
if str[:2] == './':
93+
return str[2:]
94+
return str
95+
96+
def build_excludelist(self):
97+
self.source_folders = [self.filter_dot(s) for s in set(dirname(
98+
src) for src in self.resources.c_sources + self.resources.cpp_sources + self.resources.s_sources)]
99+
if '.' in self.source_folders:
100+
self.source_folders.remove('.')
101+
#print source_folders
102+
103+
top_folders = [f for f in set(s.split('/')[0] for s in self.source_folders)]
104+
#print top_folders
105+
106+
for top_folder in top_folders:
107+
#
108+
for root, dirs, files in os.walk(top_folder, topdown=True):
109+
# Paths returned by os.walk() must be split with os.dep
110+
# to accomodate Windows weirdness.
111+
parts = root.split(os.sep)
112+
self.remove_unused('/'.join(parts))
113+
114+
def remove_unused(self, path):
115+
found = False
116+
for used in self.include_path:
117+
if path == used:
118+
found = True
119+
needToAdd = True
120+
if not found:
121+
for dir in self.exclude_dirs:
122+
# Do not exclude subfolders from excluded folder
123+
if path.find(dir+'/') != -1:
124+
needToAdd = False
125+
if needToAdd:
126+
self.exclude_dirs.append(path)
127+
82128
def generate(self):
83129
fp_hardware = "no"
84130
fp_abi = "soft"
85131
core = self.toolchain.target.core
86132
if core == "Cortex-M4F" or core == "Cortex-M7F":
87133
fp_hardware = "fpv4-sp-d16"
88-
fp_abi = "soft-fp"
134+
fp_abi = "softfp"
89135
elif core == "Cortex-M7FD":
90136
fp_hardware = "fpv5-d16"
91-
fp_abi = "soft-fp"
92-
137+
fp_abi = "softfp"
138+
139+
self.resources.win_to_unix()
140+
93141
libraries = []
94142
for lib in self.resources.libraries:
95143
l, _ = splitext(basename(lib))
96144
libraries.append(l[3:])
97145

146+
self.include_path = [self.filter_dot(s) for s in self.resources.inc_dirs]
147+
print 'Include folders: {0}'.format(len(self.include_path))
148+
#for dir in self.include_path:
149+
# print "%s" % dir
150+
151+
self.exclude_dirs = []
152+
self.build_excludelist()
153+
154+
print 'Exclude folders: {0}'.format(len(self.exclude_dirs))
155+
#for dir in self.exclude_dirs:
156+
# print "%s" % dir
157+
158+
self.exclude_dirs = '|'.join(self.exclude_dirs)
159+
160+
self.ld_script = self.filter_dot(self.resources.linker_script)
161+
#print 'Linker script: {0}'.format(self.ld_script)
162+
163+
self.lib_dirs = [self.filter_dot(s) for s in self.resources.lib_dirs]
164+
165+
self.symbols = [s.replace('"', '"') for s in self.toolchain.get_symbols()]
166+
#print "%s" % self.symbols
167+
98168
ctx = {
99169
'name': self.project_name,
100-
'include_paths': self.resources.inc_dirs,
101-
'linker_script': self.resources.linker_script,
102-
'library_paths': self.resources.lib_dirs,
170+
'include_paths': self.include_path,
171+
'exclude_paths': self.exclude_dirs,
172+
'linker_script': self.ld_script,
173+
'library_paths': self.lib_dirs,
103174
'object_files': self.resources.objects,
104175
'libraries': libraries,
105-
'symbols': self.toolchain.get_symbols(),
176+
'symbols': self.symbols,
106177
'board_name': self.BOARDS[self.target.upper()]['name'],
107178
'mcu_name': self.BOARDS[self.target.upper()]['mcuId'],
179+
'c_include_uid': self.__generate_uid(),
180+
'cpp_include_uid': self.__generate_uid(),
108181
'debug_config_uid': self.__generate_uid(),
109182
'debug_tool_compiler_uid': self.__generate_uid(),
110183
'debug_tool_compiler_input_uid': self.__generate_uid(),

tools/export/sw4stm32/cproject_common.tmpl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="fr.ac6.managedbuild.targetPlatform.gnu.cross.{{uid}}" isAbstract="false" osList="all" superClass="fr.ac6.managedbuild.targetPlatform.gnu.cross"/>
2525
<builder buildPath="${workspace_loc:/{{name}}}/Debug" id="fr.ac6.managedbuild.builder.gnu.cross.{{uid}}" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="fr.ac6.managedbuild.builder.gnu.cross"/>
2626
<tool id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.{{debug_tool_compiler_uid}}" name="MCU GCC Compiler" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler">
27-
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.{{uid}}" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false"/>
27+
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.{{uid}}" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" value="fr.ac6.managedbuild.gnu.c.optimization.level.more" useByScannerDiscovery="false"/>
2828
<option id="gnu.c.compiler.option.debugging.level.{{uid}}" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.max" valueType="enumerated"/>
2929
<option id="gnu.c.compiler.option.include.paths.{{uid}}" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
3030
{% for path in include_paths %}
@@ -36,6 +36,9 @@
3636
<listOptionValue builtIn="false" value="{{s}}"/>
3737
{% endfor %}
3838
</option>
39+
<option id="gnu.c.compiler.option.include.files.{{c_include_uid}}" name="Include files (-include)" superClass="gnu.c.compiler.option.include.files" useByScannerDiscovery="false" valueType="includeFiles">
40+
<listOptionValue builtIn="false" value="${ProjDirPath}/mbed_config.h"/>
41+
</option>
3942
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.{{release_tool_compiler_input_uid}}" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c"/>
4043
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.{{uid}}" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s"/>
4144
</tool>
@@ -53,6 +56,9 @@
5356
<listOptionValue builtIn="false" value="{{s}}"/>
5457
{% endfor %}
5558
</option>
59+
<option id="gnu.cpp.compiler.option.include.files.{{cpp_include_uid}}" name="Include files (-include)" superClass="gnu.cpp.compiler.option.include.files" useByScannerDiscovery="false" valueType="includeFiles">
60+
<listOptionValue builtIn="false" value="${ProjDirPath}/mbed_config.h"/>
61+
</option>
5662
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.{{uid}}" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp"/>
5763
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s.{{uid}}" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s"/>
5864
</tool>
@@ -96,6 +102,9 @@
96102
</tool>
97103
</toolChain>
98104
</folderInfo>
105+
<sourceEntries>
106+
<entry excluding="{{exclude_paths}}" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
107+
</sourceEntries>
99108
</configuration>
100109
</storageModule>
101110
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
@@ -193,6 +202,9 @@
193202
</tool>
194203
</toolChain>
195204
</folderInfo>
205+
<sourceEntries>
206+
<entry excluding="{{exclude_paths}}" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
207+
</sourceEntries>
196208
</configuration>
197209
</storageModule>
198210
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>

0 commit comments

Comments
 (0)