Mcucpp

Форк
0
/
gnu-tools.py 
116 строк · 2.9 Кб
1
import os
2
from SCons.Script import *
3

4

5
def setup_gnu_tools(env, prefix):
6

7
	for tool in ['gcc', 'g++', 'gnulink', 'ar', 'gas']:
8
		env.Tool(tool)
9
		
10
	env['CC'] = prefix+'gcc'
11
	env['CXX'] = prefix+'g++'
12
	env['AR'] = prefix+'ar'
13
	env['AS'] = prefix+'as'
14
	env['LINK'] = prefix+'gcc'
15
	env['OBJCOPY'] = prefix+'objcopy'
16
	env['OBJDUMP'] = prefix+'objdump'
17
	env['NM'] = prefix+"nm"
18
	env['RANLIB'] = prefix+"ranlib"
19
	env['SIZE'] = prefix+"size"
20
	env['PROGSUFFIX'] = '.elf'
21
	env['GDB'] = prefix + 'gdb'
22
	
23
	env['CFLAGS'] = ["-std=gnu11", "-Wredundant-decls","-Wnested-externs"]
24
	
25
	env['CCFLAGS'] = [
26
		"-g",
27
		"-funsigned-char",
28
		"-funsigned-bitfields",
29
		"-fshort-enums",
30
		"-ffunction-sections",
31
		"-fdata-sections",
32
		"-Wall",
33
		"-Wformat",
34
		"-Wextra",
35
		"-Wpointer-arith",
36
		"-Wunused",
37
		"-nostdlib"
38
	]
39
		
40
	env['CXXFLAGS'] = [
41
		"-fno-exceptions",
42
		"-fno-threadsafe-statics",
43
		"-fno-rtti",
44
		"-fuse-cxa-atexit",
45
		"-Woverloaded-virtual",
46
		"-std=c++17"
47
		#"-std=c++03"
48
	]
49
	
50
	env['ASFLAGS'] = [
51
		"-gdwarf-2",
52
		"-xassembler-with-cpp",
53
	]
54
	
55
	linkerscript = ""
56
	startFiles = ""
57
	env.Append(CPPDEFINES = {})
58
	
59
	if 'DEVICE' in env:
60
		device = env['DEVICE']
61
		
62
		if 'defines' in device:
63
			env.Append(CPPDEFINES = device['defines'])
64
		
65
		if 'clock' in device:
66
			env.Append(CPPDEFINES = {'F_CPU' : device['clock'] })
67
		if 'linkerScript' in device and device['linkerScript'] is not None:
68
			formattedLinkerScript = device['linkerScript'] % env
69
			linkerscript = env.File(formattedLinkerScript).srcnode().abspath
70
			linkerscript = '-T%s' % linkerscript
71
		
72
		if 'includes' in device and device['includes'] is not None:
73
			formattedIncludes = [os.path.abspath( include % env) for include in device['includes']]
74
			env.Append(CPPPATH = formattedIncludes)
75
		
76
		if 'startup' in device and device['startup'] is not None:
77
			startFiles = '-nostartfiles'
78
	
79
	env['LINKFLAGS'] = [
80
		"-Wl,--gc-sections",
81
		"-Wl,-Map=${TARGET.base}.map",
82
		linkerscript,
83
		startFiles
84
	]
85
	
86
	binBuilder = Builder(
87
		action = '$OBJCOPY -O binary --only-section $SECTION_NAME $SOURCE $TARGET', 
88
		src_suffix = ".elf",
89
		suffix = ".bin")
90
	
91
	disasmBuilder = Builder(
92
		action = '$OBJDUMP -h -S $SOURCE > $TARGET', 
93
		src_suffix = ".elf",
94
		suffix = ".lss")
95
	
96
	env.Append(BUILDERS = {
97
		'Disassembly': disasmBuilder,
98
		'DumpSection': binBuilder})
99
	
100
	prettyPrefix = prefix
101
	if prettyPrefix.endswith('-'):
102
		prettyPrefix = prettyPrefix[:-1]
103
	
104
	env['CCCOMSTR'] = "Compiling C (%s): $TARGET" % prettyPrefix
105
	env['CXXCOMSTR'] = "Compiling C++ (%s): $TARGET" % prettyPrefix
106
	env['ASCOMSTR'] = "Assembling (%s): $TARGET" % prettyPrefix
107
	env['ASPPCOMSTR'] = "Assembling (%s): $TARGET" % prettyPrefix
108
	env['LINKCOMSTR'] = "Linking (%s): $TARGET" % prettyPrefix
109

110
def generate(env, **kw):
111
	prefix = env['TOOL_PREFIX']
112
	setup_gnu_tools(env, prefix)
113

114
def exists(env):
115
	prefix = env['TOOL_PREFIX']
116
	return env.Detect('%s-gcc' % prefix)

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.