2019-11-28 16:56:53 -05:00
|
|
|
# Generate toolchain download links from toolchain info makefile
|
2018-08-29 09:30:03 -04:00
|
|
|
from __future__ import print_function
|
2021-01-25 21:49:01 -05:00
|
|
|
|
2019-11-28 16:56:53 -05:00
|
|
|
import os.path
|
2019-06-10 11:29:18 -04:00
|
|
|
from collections import namedtuple
|
2021-01-25 21:49:01 -05:00
|
|
|
|
2020-01-23 22:33:28 -05:00
|
|
|
from .util import copy_if_modified
|
2019-11-28 16:56:53 -05:00
|
|
|
|
|
|
|
BASE_URL = 'https://dl.espressif.com/dl/'
|
2019-06-10 11:29:18 -04:00
|
|
|
|
2021-01-25 21:49:01 -05:00
|
|
|
PlatformInfo = namedtuple('PlatformInfo', [
|
|
|
|
'platform_name',
|
|
|
|
'platform_archive_suffix',
|
|
|
|
'extension',
|
|
|
|
'unpack_cmd',
|
|
|
|
'unpack_code'
|
2019-06-10 11:29:18 -04:00
|
|
|
])
|
2018-08-29 09:30:03 -04:00
|
|
|
|
2018-12-01 03:25:08 -05:00
|
|
|
|
2019-11-28 16:56:53 -05:00
|
|
|
def setup(app):
|
|
|
|
# we don't actually need idf-info, just a convenient event to trigger this on
|
|
|
|
app.connect('idf-info', generate_toolchain_download_links)
|
|
|
|
|
|
|
|
return {'parallel_read_safe': True, 'parallel_write_safe': True, 'version': '0.1'}
|
2018-08-29 09:30:03 -04:00
|
|
|
|
|
|
|
|
2019-11-28 16:56:53 -05:00
|
|
|
def generate_toolchain_download_links(app, project_description):
|
2021-01-25 21:49:01 -05:00
|
|
|
print('Generating toolchain download links')
|
2019-11-28 16:56:53 -05:00
|
|
|
toolchain_tmpdir = '{}/toolchain_inc'.format(app.config.build_dir)
|
2021-01-25 21:49:01 -05:00
|
|
|
toolchain_versions = os.path.join(app.config.idf_path, 'tools/toolchain_versions.mk')
|
2019-11-28 16:56:53 -05:00
|
|
|
gen_toolchain_links(toolchain_versions, toolchain_tmpdir)
|
|
|
|
copy_if_modified(toolchain_tmpdir, '{}/inc'.format(app.config.build_dir))
|
2018-08-29 09:30:03 -04:00
|
|
|
|
2019-11-28 16:56:53 -05:00
|
|
|
|
|
|
|
def gen_toolchain_links(versions_file, out_dir):
|
2018-08-29 09:30:03 -04:00
|
|
|
version_vars = {}
|
|
|
|
with open(versions_file) as f:
|
|
|
|
for line in f:
|
2021-01-25 21:49:01 -05:00
|
|
|
name, var = line.partition('=')[::2]
|
2018-08-29 09:30:03 -04:00
|
|
|
version_vars[name.strip()] = var.strip()
|
|
|
|
|
2021-01-25 21:49:01 -05:00
|
|
|
gcc_version = version_vars['CURRENT_TOOLCHAIN_GCC_VERSION']
|
|
|
|
toolchain_desc = version_vars['CURRENT_TOOLCHAIN_COMMIT_DESC_SHORT']
|
2018-08-29 09:30:03 -04:00
|
|
|
|
|
|
|
unpack_code_linux_macos = """
|
|
|
|
::
|
|
|
|
|
|
|
|
mkdir -p ~/esp
|
|
|
|
cd ~/esp
|
|
|
|
tar -x{}f ~/Downloads/{}
|
|
|
|
"""
|
|
|
|
|
|
|
|
scratch_build_code_linux_macos = """
|
|
|
|
::
|
|
|
|
|
2019-06-10 11:29:18 -04:00
|
|
|
git clone https://github.com/espressif/crosstool-NG.git
|
2018-08-29 09:30:03 -04:00
|
|
|
cd crosstool-NG
|
2019-06-10 11:29:18 -04:00
|
|
|
git checkout {}
|
2019-11-01 10:00:27 -04:00
|
|
|
git submodule update --init
|
|
|
|
./bootstrap && ./configure --enable-local && make
|
2018-08-29 09:30:03 -04:00
|
|
|
"""
|
|
|
|
|
2019-06-10 11:29:18 -04:00
|
|
|
platform_info = [
|
2021-01-25 21:49:01 -05:00
|
|
|
PlatformInfo('linux64', 'linux-amd64', 'tar.gz', 'z', unpack_code_linux_macos),
|
|
|
|
PlatformInfo('linux32', 'linux-i686','tar.gz', 'z', unpack_code_linux_macos),
|
|
|
|
PlatformInfo('osx', 'macos', 'tar.gz', 'z', unpack_code_linux_macos),
|
|
|
|
PlatformInfo('win32', 'win32', 'zip', None, None)
|
2019-06-10 11:29:18 -04:00
|
|
|
]
|
2018-08-29 09:30:03 -04:00
|
|
|
|
2019-11-28 16:56:53 -05:00
|
|
|
try:
|
|
|
|
os.mkdir(out_dir)
|
|
|
|
except OSError:
|
|
|
|
pass
|
|
|
|
|
2021-01-25 21:49:01 -05:00
|
|
|
with open(os.path.join(out_dir, 'download-links.inc'), 'w') as links_file:
|
2018-08-29 09:30:03 -04:00
|
|
|
for p in platform_info:
|
2019-06-10 11:29:18 -04:00
|
|
|
archive_name = 'xtensa-esp32-elf-gcc{}-{}-{}.{}'.format(
|
|
|
|
gcc_version.replace('.', '_'), toolchain_desc, p.platform_archive_suffix, p.extension)
|
2018-12-01 03:25:08 -05:00
|
|
|
|
2018-08-29 09:30:03 -04:00
|
|
|
print('.. |download_link_{}| replace:: {}{}'.format(
|
2019-11-28 16:56:53 -05:00
|
|
|
p.platform_name, BASE_URL, archive_name), file=links_file)
|
2018-08-29 09:30:03 -04:00
|
|
|
|
2019-06-10 11:29:18 -04:00
|
|
|
if p.unpack_code is not None:
|
2021-01-25 21:49:01 -05:00
|
|
|
with open(os.path.join(out_dir, 'unpack-code-%s.inc' % p.platform_name), 'w') as f:
|
2019-06-10 11:29:18 -04:00
|
|
|
print(p.unpack_code.format(p.unpack_cmd, archive_name), file=f)
|
2018-08-29 09:30:03 -04:00
|
|
|
|
2021-01-25 21:49:01 -05:00
|
|
|
with open(os.path.join(out_dir, 'scratch-build-code.inc'), 'w') as code_file:
|
2019-06-10 11:29:18 -04:00
|
|
|
print(scratch_build_code_linux_macos.format(toolchain_desc), file=code_file)
|