Difficult-Rocket/libs/utils/nuitka.py

81 lines
2.6 KiB
Python
Raw Normal View History

2023-05-14 02:08:31 +08:00
# -------------------------------
# Difficult Rocket
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
# All rights reserved
# -------------------------------
# 用于使用 nuitka 构建 DR
import platform
import traceback
from pathlib import Path
from typing import List
2023-05-28 01:03:46 +08:00
from Difficult_Rocket.api.types import Options, Version
2023-05-14 02:08:31 +08:00
class Status(Options):
name = 'Nuitka Build Status'
output_path: Path = Path("./build/nuitka")
src_file: Path = Path('DR.py')
# 以下为 nuitka 的参数
2023-05-27 00:55:27 +08:00
use_lto: bool = False # --lto=yes (no is faster)
use_clang: bool = True # --clang
use_msvc: bool = True # --msvc=latest
use_mingw: bool = False # --mingw64
standalone: bool = True # --standalone
2023-05-14 02:08:31 +08:00
company_name: str = 'tool-shenjack-workshop'
product_name: str = 'Difficult-Rocket'
product_version: Version
file_version: Version
icon_path: Path = Path('textures/icon.png')
def init(self, **kwargs) -> None:
# 非 windows 平台不使用 msvc
if platform.system() != 'Windows':
self.use_msvc = False
2023-05-27 00:55:27 +08:00
self.use_mingw = False
else:
self.use_mingw = self.use_mingw and not self.use_msvc
# Windows 平台下使用 msvc 时不使用 mingw
2023-05-14 02:08:31 +08:00
def load_file(self) -> bool:
try:
from Difficult_Rocket import DR_runtime
self.product_version = DR_runtime.DR_version
self.file_version = DR_runtime.Build_version
return True
except ImportError:
traceback.print_exc()
return False
def gen_subprocess_cmd(self) -> List[str]:
2023-05-27 00:50:14 +08:00
cmd_list = ['python', '-m', 'nuitka']
2023-05-14 02:08:31 +08:00
# macos 和 非 macos icon 参数不同
2023-05-27 00:50:14 +08:00
icon_cmd = ""
2023-05-14 02:08:31 +08:00
if platform.system() == 'Darwin':
icon_cmd = f"--macos-app-icon={self.icon_path.absolute()}"
elif platform.system() == 'Windows':
icon_cmd = f"--windows-icon-from-ico={self.icon_path.absolute()}"
2023-05-27 00:50:14 +08:00
if self.use_lto:
cmd_list.append('--lto=yes')
2023-05-14 02:08:31 +08:00
else:
2023-05-27 00:50:14 +08:00
cmd_list.append('--lto=no')
if self.use_clang:
cmd_list.append('--clang')
if self.use_msvc:
cmd_list.append('--msvc=latest')
if self.standalone:
cmd_list.append('--standalone')
2023-05-27 00:55:27 +08:00
cmd_list.append(f"--company-name={self.company_name}")
cmd_list.append(f"--product-name={self.product_name}")
cmd_list.append(f"--product-version={self.product_version}")
cmd_list.append(f"--file-version={self.file_version}")
2023-05-27 00:50:14 +08:00
cmd_list += icon_cmd
return cmd_list