Mcucpp

Форк
0
/
esp8266.py 
120 строк · 2.7 Кб
1
import os
2
from SCons.Script import *
3
import glob
4

5
def espToolTargets(target, source, env):
6
	src_base = os.path.basename(source[0].abspath)
7
	return ['%s-0x00000.bin' % (src_base), '%s-0x01010.bin' % (src_base)], source
8
	
9
def flashImage(target, source, env):
10
	command = '$ESPTOOL -p $ESPPORT -b $BAUD write_flash 0x00000 "%s" 0x01010 "%s"' % (source[0].abspath, source[1].abspath)
11
	return env.Execute(command)
12

13
def generate(env, **kw):
14

15
	env.PrependENVPath('PATH', os.path.join(env['ESP8266_TOOLCHAIN'], bin))
16
	if env.Detect('xtensa-lx106-elf-gcc'): 
17
		env['TOOL_PREFIX'] = 'xtensa-lx106-elf-'
18
	else:
19
		raise Exception('Unable to find build tools xtensa-lx106-elf')
20

21
	env.Tool('gnu-tools')
22
	if not 'IDF_PATH' in env:
23
		sdkPath = glob.glob(env['ESP8266_RTOS_SDK'] + '/ESP8266*SDK')[0]
24
		print ("SDK path = ", sdkPath)
25
		env['IDF_PATH'] = sdkPath
26
		
27
	if not 'ESPPORT' in env:
28
		env['ESPPORT'] = "COM1"
29
	
30
	if not 'BAUD' in env:
31
		env['BAUD'] = "230400"
32
	
33

34
	hexBuilder = Builder(
35
		action = '$OBJCOPY -O ihex --only-section .isr_vectors --only-section .text --only-section .rodata --only-section .ctors --only-section .dtors --only-section .data --only-section .crc_section $SOURCE $TARGET', 
36
		src_suffix = ".elf",
37
		suffix = ".hex")
38
	
39
	env.Append(BUILDERS = {'Hex': hexBuilder})
40
	
41
	env['CCFLAGS'] = [
42
		#"-Wall",
43
		"-Wextra",
44
		"-Wpointer-arith",
45
		"-Wformat",
46
		"-Wunused",
47
		"-g",
48
		"-O2",
49
		"-Wpointer-arith",
50
		"-Wundef",
51
		#"-Werror",
52
		"-Wl,-EL --longcalls --text-section-literals",
53
		"-fno-inline-functions",
54
		"-nostdlib",
55
		"-mlongcalls",
56
		"-mtext-section-literals",
57
		"-mno-serialize-volatile",
58
	]
59
	
60
	# env.Append(LINKFLAGS=[
61
		# '-nostdlib',
62
		# '-Wl,--no-check-sections',
63
		# '-u', 'call_user_start',
64
		# '-Wl,-static'
65
		# ])
66
	libpath = env.Dir(env['SDK'] + 'components/esp8266/lib').srcnode().abspath
67
	print libpath
68
	env.Append(LIBPATH=[libpath])
69
	
70
	sdkLibs = ['c', 'gcc', 'phy', 'pp', 'net80211', 'lwip',	'wpa', 'main', 'espnow', 'crypto']
71
	
72
	env.Append(LINKFLAGS=[
73
		'"-L'+libpath+'"',
74

75
		'-nostdlib',
76
		'-flto',
77
		'-Wl,--no-check-sections',
78
		'-Wl,--gc-sections',
79
		'-u call_user_start',
80
		'-Wl,-static',
81
		'-Wl,--start-group',
82
		'-lc',
83
		'-lgcc',
84
		'-lcore',
85
		'-lespnow',
86
		'-lhal',
87
		'-lnet80211',
88
		'-lphy',
89
		'-lpp',
90
		'-lsmartconfig',
91
		'-lssc',
92
		'-lwpa',
93
		'-lwps',
94
		
95
		'-llwip',
96
		
97
		'-lcrypto',
98
		'-ldriver',
99
		'-Wl,--end-group',
100
		])
101
	
102
	env['ESPTOOL'] = env.File('#/esptool/esptool.py').srcnode().abspath
103
	
104
	binImageBuilder = Builder(
105
		action = '$ESPTOOL elf2image $SOURCE', 
106
		src_suffix = ".elf",
107
		suffix = ".bin",
108
		emitter = espToolTargets )
109
	
110
	flasherBuilder = Builder(
111
		action = flashImage, 
112
		src_suffix = ".bin" )
113
	
114
	env.Append(BUILDERS = {
115
		'MakeFlashImage': binImageBuilder,
116
		'Flash': flasherBuilder})
117
		
118

119
def exists(env):
120
	return env.Detect('xtensa-lx106-elf-gcc')

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

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

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

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