You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.5 KiB
58 lines
2.5 KiB
import requests
|
|
import zipfile
|
|
import os.path
|
|
import shutil
|
|
import os
|
|
import os.path
|
|
import sys
|
|
import subprocess
|
|
|
|
if not subprocess.check_output(['git', 'rev-parse', '--show-toplevel'], universal_newlines=True).strip() == os.getcwd():
|
|
print('Please run "{}" from the top directory in the asf4 repo.'.format(sys.argv[0]))
|
|
sys.exit(1)
|
|
|
|
# Change .gitignore if you change these dir names.
|
|
DOWNLOADED_ZIP_DIR = 'downloaded-zip'
|
|
DOWNLOADED_DIR = 'downloaded'
|
|
|
|
for chip in ['samd21', 'samd51']:
|
|
r = None
|
|
os.makedirs(DOWNLOADED_ZIP_DIR, exist_ok=True)
|
|
filename = os.path.join(DOWNLOADED_ZIP_DIR, chip + '.zip')
|
|
if os.path.isfile(filename):
|
|
print('NOTE:', filename, 'already downloaded. Delete it and re-run if you want to re-download')
|
|
else:
|
|
print("Downloading", filename, "...")
|
|
with open('tools/' + chip + '.json', 'r') as project_json:
|
|
headers = {'content-type': 'text/plain'}
|
|
r = requests.post('http://start.atmel.com/api/v1/generate/?format=atzip&compilers=[atmel_studio,make]&file_name_base=My%20Project', headers=headers, data=project_json)
|
|
if not r.ok:
|
|
# Double check that the JSON is minified. If it's not, you'll get a 404.
|
|
print(r.text)
|
|
sys.exit(1)
|
|
with open(filename, 'wb') as out:
|
|
out.write(r.content)
|
|
|
|
# Extract to a temporary location and normalize before replacing the existing location.
|
|
z = zipfile.ZipFile(filename)
|
|
downloaded_chip_dir = os.path.join(DOWNLOADED_DIR, chip)
|
|
# Clean up old zip extraction.
|
|
if os.path.isdir(downloaded_chip_dir):
|
|
shutil.rmtree(downloaded_chip_dir)
|
|
print("Unzipping ...")
|
|
z.extractall(downloaded_chip_dir)
|
|
|
|
# Remove all carriage returns.
|
|
for dirpath, dirnames, filenames in os.walk(downloaded_chip_dir):
|
|
for fn in filenames:
|
|
fn = os.path.join(dirpath, fn)
|
|
subprocess.run(['sed', '-i', 's/\r//g', fn])
|
|
|
|
# Move files to match SAMD51 structure.
|
|
if chip == 'samd21':
|
|
shutil.move(os.path.join(downloaded_chip_dir, 'samd21a/include'), downloaded_chip_dir)
|
|
shutil.move(os.path.join(downloaded_chip_dir, 'samd21a/gcc/gcc'), os.path.join(downloaded_chip_dir, 'gcc'))
|
|
shutil.move(os.path.join(downloaded_chip_dir, 'samd21a/gcc/system_samd21.c'), os.path.join(downloaded_chip_dir, 'gcc'))
|
|
|
|
print("Updating",chip,"from",downloaded_chip_dir)
|
|
subprocess.run(['rsync', '-r', '--delete', downloaded_chip_dir + '/', chip], check=True)
|
|
|