mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 09:01:40 +01:00 
			
		
		
		
	Adds support of POSIX libs like regex.h closes https://github.com/espressif/esp-idf/issues/2407 closes https://github.com/espressif/esp-idf/issues/4257 ref https://github.com/espressif/esp-idf/issues/271 Also there are some changes in the toolchain's changelog
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python
 | 
						|
# -*- coding: utf-8 -*-
 | 
						|
#
 | 
						|
# This script generates toolchain download links and toolchain unpacking
 | 
						|
# code snippets based on information found in $IDF_PATH/tools/toolchain_versions.mk
 | 
						|
#
 | 
						|
 | 
						|
from __future__ import print_function
 | 
						|
 | 
						|
import sys
 | 
						|
import os
 | 
						|
from collections import namedtuple
 | 
						|
 | 
						|
PlatformInfo = namedtuple("PlatformInfo", [
 | 
						|
    "platform_name",
 | 
						|
    "platform_archive_suffix",
 | 
						|
    "extension",
 | 
						|
    "unpack_cmd",
 | 
						|
    "unpack_code"
 | 
						|
])
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    if len(sys.argv) != 4:
 | 
						|
        print("Usage: gen-toolchain-links.py <versions file> <base download URL> <output directory>")
 | 
						|
        sys.exit(1)
 | 
						|
 | 
						|
    out_dir = sys.argv[3]
 | 
						|
    if not os.path.exists(out_dir):
 | 
						|
        print("Creating directory %s" % out_dir)
 | 
						|
        os.mkdir(out_dir)
 | 
						|
 | 
						|
    base_url = sys.argv[2]
 | 
						|
 | 
						|
    versions_file = sys.argv[1]
 | 
						|
    version_vars = {}
 | 
						|
    with open(versions_file) as f:
 | 
						|
        for line in f:
 | 
						|
            name, var = line.partition("=")[::2]
 | 
						|
            version_vars[name.strip()] = var.strip()
 | 
						|
 | 
						|
    gcc_version = version_vars["CURRENT_TOOLCHAIN_GCC_VERSION"]
 | 
						|
    toolchain_desc = version_vars["CURRENT_TOOLCHAIN_COMMIT_DESC_SHORT"]
 | 
						|
 | 
						|
    unpack_code_linux_macos = """
 | 
						|
::
 | 
						|
 | 
						|
    mkdir -p ~/esp
 | 
						|
    cd ~/esp
 | 
						|
    tar -x{}f ~/Downloads/{}
 | 
						|
"""
 | 
						|
 | 
						|
    scratch_build_code_linux_macos = """
 | 
						|
::
 | 
						|
 | 
						|
    git clone https://github.com/espressif/crosstool-NG.git
 | 
						|
    cd crosstool-NG
 | 
						|
    git checkout {}
 | 
						|
    git submodule update --init
 | 
						|
    ./bootstrap && ./configure --enable-local && make
 | 
						|
"""
 | 
						|
 | 
						|
    platform_info = [
 | 
						|
        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)
 | 
						|
    ]
 | 
						|
 | 
						|
    with open(os.path.join(out_dir, 'download-links.inc'), "w") as links_file:
 | 
						|
        for p in platform_info:
 | 
						|
            archive_name = 'xtensa-esp32-elf-gcc{}-{}-{}.{}'.format(
 | 
						|
                gcc_version.replace('.', '_'), toolchain_desc, p.platform_archive_suffix, p.extension)
 | 
						|
 | 
						|
            print('.. |download_link_{}| replace:: {}{}'.format(
 | 
						|
                p.platform_name, base_url, archive_name), file=links_file)
 | 
						|
 | 
						|
            if p.unpack_code is not None:
 | 
						|
                with open(os.path.join(out_dir, 'unpack-code-%s.inc' % p.platform_name), "w") as f:
 | 
						|
                    print(p.unpack_code.format(p.unpack_cmd, archive_name), file=f)
 | 
						|
 | 
						|
    with open(os.path.join(out_dir, 'scratch-build-code.inc'), "w") as code_file:
 | 
						|
        print(scratch_build_code_linux_macos.format(toolchain_desc), file=code_file)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |