Code to build static versions of kitty-tool
This commit is contained in:
parent
9361c62a1c
commit
7eae176b88
38
setup.py
38
setup.py
@ -64,6 +64,7 @@ class Options(argparse.Namespace):
|
|||||||
verbose: int = 0
|
verbose: int = 0
|
||||||
sanitize: bool = False
|
sanitize: bool = False
|
||||||
prefix: str = './linux-package'
|
prefix: str = './linux-package'
|
||||||
|
dir_for_static_binaries: str = ''
|
||||||
incremental: bool = True
|
incremental: bool = True
|
||||||
profile: bool = False
|
profile: bool = False
|
||||||
libdir_name: str = 'lib'
|
libdir_name: str = 'lib'
|
||||||
@ -884,13 +885,17 @@ def update_go_generated_files(args: Options, kitty_exe: str) -> None:
|
|||||||
raise SystemExit(cp.returncode)
|
raise SystemExit(cp.returncode)
|
||||||
|
|
||||||
|
|
||||||
def build_kitty_tool(args: Options, launcher_dir: str, for_freeze: bool = False, build_static: bool = False) -> str:
|
def build_kitty_tool(
|
||||||
|
args: Options, launcher_dir: str, destination_dir: str = '', for_freeze: bool = False,
|
||||||
|
for_platform: Optional[Tuple[str, str]] = None
|
||||||
|
) -> str:
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
go = shutil.which('go')
|
go = shutil.which('go')
|
||||||
if not go:
|
if not go:
|
||||||
raise SystemExit('The go tool was not found on this system. Install Go')
|
raise SystemExit('The go tool was not found on this system. Install Go')
|
||||||
update_go_generated_files(args, os.path.join(launcher_dir, appname))
|
if not for_platform:
|
||||||
|
update_go_generated_files(args, os.path.join(launcher_dir, appname))
|
||||||
cmd = [go, 'build', '-v']
|
cmd = [go, 'build', '-v']
|
||||||
ld_flags = [f"-X 'kitty.VCSRevision={get_vcs_rev_define()}'"]
|
ld_flags = [f"-X 'kitty.VCSRevision={get_vcs_rev_define()}'"]
|
||||||
if for_freeze:
|
if for_freeze:
|
||||||
@ -899,7 +904,9 @@ def build_kitty_tool(args: Options, launcher_dir: str, for_freeze: bool = False,
|
|||||||
ld_flags.append('-s')
|
ld_flags.append('-s')
|
||||||
ld_flags.append('-w')
|
ld_flags.append('-w')
|
||||||
cmd += ['-ldflags', ' '.join(ld_flags)]
|
cmd += ['-ldflags', ' '.join(ld_flags)]
|
||||||
dest = os.path.join(launcher_dir, 'kitty-tool')
|
dest = os.path.join(destination_dir or launcher_dir, 'kitty-tool')
|
||||||
|
if for_platform:
|
||||||
|
dest += f'-{for_platform[0]}-{for_platform[1]}'
|
||||||
src = os.path.abspath('tools/cmd')
|
src = os.path.abspath('tools/cmd')
|
||||||
|
|
||||||
def run_one(dest: str, **env: str) -> None:
|
def run_one(dest: str, **env: str) -> None:
|
||||||
@ -908,13 +915,15 @@ def build_kitty_tool(args: Options, launcher_dir: str, for_freeze: bool = False,
|
|||||||
print(shlex.join(c))
|
print(shlex.join(c))
|
||||||
e = os.environ.copy()
|
e = os.environ.copy()
|
||||||
e.update(env)
|
e.update(env)
|
||||||
if build_static:
|
if for_platform:
|
||||||
e['CGO_ENABLED'] = '0'
|
e['CGO_ENABLED'] = '0'
|
||||||
|
e['GOOS'] = for_platform[0]
|
||||||
|
e['GOARCH'] = for_platform[1]
|
||||||
cp = subprocess.run(c, env=e)
|
cp = subprocess.run(c, env=e)
|
||||||
if cp.returncode != 0:
|
if cp.returncode != 0:
|
||||||
raise SystemExit(cp.returncode)
|
raise SystemExit(cp.returncode)
|
||||||
|
|
||||||
if args.build_universal_binary:
|
if args.build_universal_binary and not for_platform:
|
||||||
outs = []
|
outs = []
|
||||||
for arch in ('amd64', 'arm64'):
|
for arch in ('amd64', 'arm64'):
|
||||||
d = dest + f'-{arch}'
|
d = dest + f'-{arch}'
|
||||||
@ -928,6 +937,17 @@ def build_kitty_tool(args: Options, launcher_dir: str, for_freeze: bool = False,
|
|||||||
return dest
|
return dest
|
||||||
|
|
||||||
|
|
||||||
|
def build_static_binaries(args: Options, launcher_dir: str) -> None:
|
||||||
|
arches = 'amd64', 'arm64'
|
||||||
|
for os_, arches_ in {
|
||||||
|
'darwin': arches, 'linux': arches, 'freebsd': arches, 'netbsd': arches, 'openbsd': arches,
|
||||||
|
'dragonfly': ('amd64',),
|
||||||
|
}.items():
|
||||||
|
for arch in arches_:
|
||||||
|
print('Cross compiling static kitty-tool for:', os_, arch)
|
||||||
|
build_kitty_tool(args, launcher_dir, args.dir_for_static_binaries, for_platform=(os_, arch))
|
||||||
|
|
||||||
|
|
||||||
def build_launcher(args: Options, launcher_dir: str = '.', bundle_type: str = 'source') -> None:
|
def build_launcher(args: Options, launcher_dir: str = '.', bundle_type: str = 'source') -> None:
|
||||||
werror = '' if args.ignore_compiler_warnings else '-pedantic-errors -Werror'
|
werror = '' if args.ignore_compiler_warnings else '-pedantic-errors -Werror'
|
||||||
cflags = f'-Wall {werror} -fpie'.split()
|
cflags = f'-Wall {werror} -fpie'.split()
|
||||||
@ -1503,6 +1523,7 @@ def option_parser() -> argparse.ArgumentParser: # {{{
|
|||||||
'clean',
|
'clean',
|
||||||
'export-ci-bundles',
|
'export-ci-bundles',
|
||||||
'build-dep',
|
'build-dep',
|
||||||
|
'build-static-binaries',
|
||||||
),
|
),
|
||||||
help='Action to perform (default is build)'
|
help='Action to perform (default is build)'
|
||||||
)
|
)
|
||||||
@ -1529,6 +1550,11 @@ def option_parser() -> argparse.ArgumentParser: # {{{
|
|||||||
default=Options.prefix,
|
default=Options.prefix,
|
||||||
help='Where to create the linux package'
|
help='Where to create the linux package'
|
||||||
)
|
)
|
||||||
|
p.add_argument(
|
||||||
|
'--dir-for-static-binaries',
|
||||||
|
default=Options.dir_for_static_binaries,
|
||||||
|
help='Where to create the static kitty-tool binaries'
|
||||||
|
)
|
||||||
p.add_argument(
|
p.add_argument(
|
||||||
'--full',
|
'--full',
|
||||||
dest='incremental',
|
dest='incremental',
|
||||||
@ -1731,6 +1757,8 @@ def main() -> None:
|
|||||||
cmd = [sys.executable, '../bypy', 'export', 'download.calibre-ebook.com:/srv/download/ci/kitty']
|
cmd = [sys.executable, '../bypy', 'export', 'download.calibre-ebook.com:/srv/download/ci/kitty']
|
||||||
subprocess.check_call(cmd + ['linux'])
|
subprocess.check_call(cmd + ['linux'])
|
||||||
subprocess.check_call(cmd + ['macos'])
|
subprocess.check_call(cmd + ['macos'])
|
||||||
|
elif args.action == 'build-static-binaries':
|
||||||
|
build_static_binaries(args, launcher_dir)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
// License: GPLv3 Copyright: 2022, Kovid Goyal, <kovid at kovidgoyal.net>
|
// License: GPLv3 Copyright: 2022, Kovid Goyal, <kovid at kovidgoyal.net>
|
||||||
|
|
||||||
//go:build !darwin
|
//go:build linux
|
||||||
|
|
||||||
package utils
|
package utils
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
// License: GPLv3 Copyright: 2022, Kovid Goyal, <kovid at kovidgoyal.net>
|
// License: GPLv3 Copyright: 2022, Kovid Goyal, <kovid at kovidgoyal.net>
|
||||||
//go:build darwin
|
|
||||||
|
//go:build !linux
|
||||||
|
|
||||||
package utils
|
package utils
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user