diff --git a/README.md b/README.md index c6bd245..84d164a 100644 --- a/README.md +++ b/README.md @@ -75,3 +75,25 @@ optional arguments: Программа принимает образы программы в формате hex и записывает данные в память МК через контроллер SPIFI, путем записи команд и настроек в регистры блока. Тип памяти и способ записи выбирается по адресу байт в hex файле, поэтому требуется правильное расположение секций, заданное в ld скрипте. Скрипт работает через 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`. При редактировании файла следует сохранять форматирование! diff --git a/_version.py b/_version.py new file mode 100644 index 0000000..5c0ccce --- /dev/null +++ b/_version.py @@ -0,0 +1 @@ +applicaton_version = 'v0.2.1' diff --git a/mik32_upload.py b/mik32_upload.py index ca05bff..bac6c02 100644 --- a/mik32_upload.py +++ b/mik32_upload.py @@ -9,6 +9,7 @@ from typing import List, Dict, NamedTuple, Union from hex_parser import FirmwareFile, MemorySection, MemoryType, Segment from tclrpc import OpenOcdTclRpc, TclException from mik32_gpio import MIK32_Version, gpio_init, gpio_deinit +from _version import applicaton_version import mik32_eeprom import mik32_spifi import mik32_ram @@ -17,6 +18,7 @@ from parsers import * import logging import sys +program_name = f'mik32-uploader-{applicaton_version}' # class bcolors(Enum): # OK = '\033[92m' @@ -426,6 +428,7 @@ if __name__ == '__main__': namespace = parser.parse_args() print("mik32-uploader v0.2.0") + print(program_name) if namespace.filepath: upload_file( diff --git a/mik32_upload.spec b/mik32_upload.spec index f88166e..f1c9136 100644 --- a/mik32_upload.spec +++ b/mik32_upload.spec @@ -1,5 +1,16 @@ # -*- 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( ['mik32_upload.py'], @@ -12,22 +23,20 @@ a = Analysis( runtime_hooks=[], excludes=[], noarchive=False, + optimize=0, ) pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, - a.binaries, - a.datas, [], - name='mik32_upload', + exclude_binaries=True, + name=program_name, debug=False, bootloader_ignore_signals=False, strip=False, upx=True, - upx_exclude=[], - runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, @@ -35,3 +44,41 @@ exe = EXE( codesign_identity=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') diff --git a/mik32_upload_build.bat b/mik32_upload_build.bat deleted file mode 100644 index b1f9159..0000000 --- a/mik32_upload_build.bat +++ /dev/null @@ -1 +0,0 @@ -pyinstaller mik32_upload.spec \ No newline at end of file