Скрипт сборки

This commit is contained in:
Sergey Shchelkanov 2024-09-10 18:36:24 +03:00
parent 537deb8860
commit c22c12c82c
5 changed files with 78 additions and 6 deletions

View File

@ -75,3 +75,25 @@ optional arguments:
Программа принимает образы программы в формате hex и записывает данные в память МК через контроллер SPIFI, путем записи команд и настроек в регистры блока. Тип памяти и способ записи выбирается по адресу байт в hex файле, поэтому требуется правильное расположение секций, заданное в ld скрипте. Программа принимает образы программы в формате hex и записывает данные в память МК через контроллер SPIFI, путем записи команд и настроек в регистры блока. Тип памяти и способ записи выбирается по адресу байт в hex файле, поэтому требуется правильное расположение секций, заданное в ld скрипте.
Скрипт работает через OpenOCD, подключаясь через tcl сервер к уже запущенному openocd, подключенному к МК. Скрипт может запустить openocd самостоятельно. Скрипт работает через OpenOCD, подключаясь через tcl сервер к уже запущенному openocd, подключенному к МК. Скрипт может запустить openocd самостоятельно.
## Сборка в исполняемый файл
Для сборки в исполняемый файл и подготовки релиза используется модуль PyInstaller.
Для его установки выполните команду:
```
pip install -U pyinstaller
```
Затем соберите программу с использованием файла с настройками mik32_upload.spec:
```
pyinstaller mik32_upload.spec
```
В папке `./dist` будет создана папка `mik32_upload`, содержащая исполняемый файл `mik32_upload`
и папка со служебными файлами `_internal`, а также архив с названием `mik32-uploader-{версия}.zip`
или `mik32-uploader-{версия}.tar.gz`.
Для указания версии программы следует изменить значение переменной `applicaton_version` в файле
`_version.py`. При редактировании файла следует сохранять форматирование!

1
_version.py Normal file
View File

@ -0,0 +1 @@
applicaton_version = 'v0.2.1'

View File

@ -9,6 +9,7 @@ from typing import List, Dict, NamedTuple, Union
from hex_parser import FirmwareFile, MemorySection, MemoryType, Segment from hex_parser import FirmwareFile, MemorySection, MemoryType, Segment
from tclrpc import OpenOcdTclRpc, TclException from tclrpc import OpenOcdTclRpc, TclException
from mik32_gpio import MIK32_Version, gpio_init, gpio_deinit from mik32_gpio import MIK32_Version, gpio_init, gpio_deinit
from _version import applicaton_version
import mik32_eeprom import mik32_eeprom
import mik32_spifi import mik32_spifi
import mik32_ram import mik32_ram
@ -17,6 +18,7 @@ from parsers import *
import logging import logging
import sys import sys
program_name = f'mik32-uploader-{applicaton_version}'
# class bcolors(Enum): # class bcolors(Enum):
# OK = '\033[92m' # OK = '\033[92m'
@ -426,6 +428,7 @@ if __name__ == '__main__':
namespace = parser.parse_args() namespace = parser.parse_args()
print("mik32-uploader v0.2.0") print("mik32-uploader v0.2.0")
print(program_name)
if namespace.filepath: if namespace.filepath:
upload_file( upload_file(

View File

@ -1,5 +1,16 @@
# -*- mode: python ; coding: utf-8 -*- # -*- mode: python ; coding: utf-8 -*-
import os
import shutil
import zipfile
import tarfile
program_name = 'mik32_upload'
with open('_version.py', 'r') as f:
applicaton_version_line = f.read().strip()
applicaton_version_line = applicaton_version_line[len(
'applicaton_version = '):].strip('\'')
a = Analysis( a = Analysis(
['mik32_upload.py'], ['mik32_upload.py'],
@ -12,22 +23,20 @@ a = Analysis(
runtime_hooks=[], runtime_hooks=[],
excludes=[], excludes=[],
noarchive=False, noarchive=False,
optimize=0,
) )
pyz = PYZ(a.pure) pyz = PYZ(a.pure)
exe = EXE( exe = EXE(
pyz, pyz,
a.scripts, a.scripts,
a.binaries,
a.datas,
[], [],
name='mik32_upload', exclude_binaries=True,
name=program_name,
debug=False, debug=False,
bootloader_ignore_signals=False, bootloader_ignore_signals=False,
strip=False, strip=False,
upx=True, upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True, console=True,
disable_windowed_traceback=False, disable_windowed_traceback=False,
argv_emulation=False, argv_emulation=False,
@ -35,3 +44,41 @@ exe = EXE(
codesign_identity=None, codesign_identity=None,
entitlements_file=None, entitlements_file=None,
) )
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='mik32_upload',
)
def zip_directory(directory_path, zip_path):
with zipfile.ZipFile(zip_path, 'w') as zipf:
for root, dirs, files in os.walk(directory_path):
for file in files:
zipf.write(os.path.join(root, file),
os.path.relpath(os.path.join(root, file),
os.path.join(directory_path, '..')))
def tar_gz_directory(directory_path, tar_gz_path):
with tarfile.open(tar_gz_path, "w:gz") as tar:
for root, dirs, files in os.walk(directory_path):
for file in files:
tar.add(os.path.join(root, file),
os.path.relpath(os.path.join(root, file),
os.path.join(directory_path, '..')))
shutil.copytree('./openocd-scripts/',
f'./dist/{program_name}/openocd-scripts/')
if os.name == 'nt':
zip_directory(f'./dist/{program_name}/',
f'./dist/mik32-uploader-{applicaton_version_line}.zip')
else:
tar_gz_directory(f'./dist/{program_name}/',
f'./dist/mik32-uploader-{applicaton_version_line}.tar.gz')

View File

@ -1 +0,0 @@
pyinstaller mik32_upload.spec