mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-07 16:13:23 +08:00
more tools consolidation
This commit is contained in:
parent
4c729e68be
commit
e296187fa1
@ -3933,26 +3933,26 @@
|
|||||||
"assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e",
|
"assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e",
|
||||||
"assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f",
|
"assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f",
|
||||||
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
|
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
|
||||||
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/16/1e/da5d1a1c78606accf3c4439338ad",
|
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/3c/8c/082b6542e5e364534b7d941c9382",
|
||||||
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0",
|
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0",
|
||||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/14/e7/3bdf7ab648128852e274b7bea0c6",
|
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/68/3e/0161f1e73c492f8189d87ca81f25",
|
||||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f3/a9/653c04b445c010dab03ab20cbb66",
|
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c8/46/b7a92dafc732fefdefe65291db51",
|
||||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/d2/7b/5483d27ccb29d9e0c96652242c40",
|
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a5/28/b88ab33d7b3a785057366b70a83f",
|
||||||
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b",
|
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b",
|
||||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a3/06/627d11dcc80f829ea784f20967ba",
|
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e1/d8/e770a482c7ff49b8393a4c9b861c",
|
||||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a5/22/469309e4c387e0e03e3c22a23bca",
|
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/14/58/911b39895f68f3f68718f15e4139",
|
||||||
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/14/74/db5af0a68b77d99668dd19a0dbf0",
|
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a4/3b/ee0681829ed307717733bae23fc4",
|
||||||
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/e4/1c/fbfd48da2029a8fbbf9089a7602c",
|
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/cb/95/512b448ec0448d911033f42ebec2",
|
||||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ab/68/0c3ddedc76ac4b22c5ef8a120fb9",
|
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/55/23/5cd0b9053565ff443054851290b2",
|
||||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a9/8f/87f6795a951c3d659fbeb7e3894b",
|
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d5/72/31eb80eabf7f35bd8805fb37fcd4",
|
||||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/1e/84/dde3f07fc30f810b304dc1326dc7",
|
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/45/06/9c55ae67557837c5dbfb775d547c",
|
||||||
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/89/d9/81113dc9a0989e06e7d11ee83e84",
|
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/22/e8/8e560c68834433a53a3d1217755b",
|
||||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ac/47/05be30983f510cdbe078b594be38",
|
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a2/00/9cda774f393b0e6115adb3f70698",
|
||||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f9/ea/8a9378ce519e466e9c478b07c116",
|
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c5/85/a4ea385bf200f61e2eaf1426fb09",
|
||||||
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/62/5d/2e758624968b13f53c006fcaab5a",
|
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/77/ee/8aa64af1334e71b033f9f61a6e54",
|
||||||
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/58/00/038c9a4d0cf2de4ee5358e0dad24",
|
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/20/7f/2609ccbfcd3e461107b161d1010b",
|
||||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/83/52/9e8381520466236ea823faf5e1ec",
|
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/14/66/99d5e27941acb69f1400bd71f78f",
|
||||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/1e/48/3c42aa5f72286b00c8dc42f801a9",
|
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/7f/0c/d55e96dec8be029a21eabaf5880c",
|
||||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/17/8a/3e4eec6be82a7d51ec68c2cd9134",
|
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/17/8a/3e4eec6be82a7d51ec68c2cd9134",
|
||||||
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/18/27/4063e018845b61a43d3fb975dda9",
|
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/18/27/4063e018845b61a43d3fb975dda9",
|
||||||
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/94/8e/b57d1b16f9a97ae6b75f6aa64d24",
|
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/94/8e/b57d1b16f9a97ae6b75f6aa64d24",
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
namespace ballistica {
|
namespace ballistica {
|
||||||
|
|
||||||
// These are set automatically via script; don't modify them here.
|
// These are set automatically via script; don't modify them here.
|
||||||
const int kAppBuildNumber = 20378;
|
const int kAppBuildNumber = 20379;
|
||||||
const char* kAppVersion = "1.6.4";
|
const char* kAppVersion = "1.6.4";
|
||||||
|
|
||||||
// Our standalone globals.
|
// Our standalone globals.
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
#!/usr/bin/env python3.8
|
|
||||||
# Released under the MIT License. See LICENSE for details.
|
# Released under the MIT License. See LICENSE for details.
|
||||||
#
|
#
|
||||||
"""Functionality related to android builds."""
|
"""Functionality related to android builds."""
|
||||||
@ -45,10 +44,10 @@ def androidaddr(archive_dir: str, arch: str, addr: str) -> None:
|
|||||||
print('ERROR: invalid arch "' + arch + '"; (choices are ' +
|
print('ERROR: invalid arch "' + arch + '"; (choices are ' +
|
||||||
', '.join(archs.keys()) + ')')
|
', '.join(archs.keys()) + ')')
|
||||||
sys.exit(255)
|
sys.exit(255)
|
||||||
sdkutils = 'tools/android_sdk_utils'
|
|
||||||
rootdir = '.'
|
rootdir = '.'
|
||||||
ndkpath = subprocess.check_output([sdkutils,
|
ndkpath = subprocess.check_output(
|
||||||
'get-ndk-path']).decode().strip()
|
['tools/pcommand', 'android_sdk_utils',
|
||||||
|
'get-ndk-path']).decode().strip()
|
||||||
if not os.path.isdir(ndkpath):
|
if not os.path.isdir(ndkpath):
|
||||||
print("ERROR: ndk-path '" + ndkpath + '" does not exist')
|
print("ERROR: ndk-path '" + ndkpath + '" does not exist')
|
||||||
sys.exit(255)
|
sys.exit(255)
|
||||||
|
|||||||
164
tools/batools/androidsdkutils.py
Executable file
164
tools/batools/androidsdkutils.py
Executable file
@ -0,0 +1,164 @@
|
|||||||
|
# Released under the MIT License. See LICENSE for details.
|
||||||
|
#
|
||||||
|
"""Utilities for wrangling Android SDK bits."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
from efro.error import CleanError
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
PROJROOT = Path(__file__).resolve().parents[1]
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_lprop_file(local_properties_path: str) -> str:
|
||||||
|
with open(local_properties_path) as infile:
|
||||||
|
lines = infile.read().splitlines()
|
||||||
|
sdk_dir_lines = [l for l in lines if 'sdk.dir=' in l]
|
||||||
|
if len(sdk_dir_lines) != 1:
|
||||||
|
raise Exception("Couldn't find sdk dir in local.properties")
|
||||||
|
sdk_dir = sdk_dir_lines[0].split('=')[1].strip()
|
||||||
|
if not os.path.isdir(sdk_dir):
|
||||||
|
raise Exception(f'Sdk dir from local.properties not found: {sdk_dir}.')
|
||||||
|
return sdk_dir
|
||||||
|
|
||||||
|
|
||||||
|
def _gen_lprop_file(local_properties_path: str) -> str:
|
||||||
|
|
||||||
|
os.makedirs(os.path.dirname(local_properties_path), exist_ok=True)
|
||||||
|
|
||||||
|
# Ok, we've got no local.properties file; attempt to find
|
||||||
|
# android sdk in standard locations and create a default
|
||||||
|
# one if we can.
|
||||||
|
found = False
|
||||||
|
sdk_dir = None
|
||||||
|
|
||||||
|
# First off, if they have ANDROID_SDK_ROOT set, use that.
|
||||||
|
envvar = os.environ.get('ANDROID_SDK_ROOT')
|
||||||
|
if envvar is not None:
|
||||||
|
if os.path.isdir(envvar):
|
||||||
|
sdk_dir = envvar
|
||||||
|
found = True
|
||||||
|
|
||||||
|
# Otherwise try some standard locations.
|
||||||
|
if not found:
|
||||||
|
home = os.getenv('HOME')
|
||||||
|
assert home is not None
|
||||||
|
test_paths = [home + '/Library/Android/sdk']
|
||||||
|
for sdk_dir in test_paths:
|
||||||
|
if os.path.exists(sdk_dir):
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
print('WOULD CHECK', os.environ.get('ANDROID_SDK_ROOT'))
|
||||||
|
assert sdk_dir is not None
|
||||||
|
if not found:
|
||||||
|
if not os.path.exists(sdk_dir):
|
||||||
|
print(
|
||||||
|
'ERROR: Android sdk not found; install '
|
||||||
|
'the android sdk and try again',
|
||||||
|
file=sys.stderr)
|
||||||
|
sys.exit(255)
|
||||||
|
config = ('\n# This file was automatically generated by ' +
|
||||||
|
os.path.abspath(sys.argv[0]) + '\n'
|
||||||
|
'# Feel free to override these paths if you have your android'
|
||||||
|
' sdk elsewhere\n'
|
||||||
|
'\n'
|
||||||
|
'sdk.dir=' + sdk_dir + '\n')
|
||||||
|
with open(local_properties_path, 'w') as outfile:
|
||||||
|
outfile.write(config)
|
||||||
|
print('Generating local.properties file (found Android SDK at "' +
|
||||||
|
sdk_dir + '")',
|
||||||
|
file=sys.stderr)
|
||||||
|
return sdk_dir
|
||||||
|
|
||||||
|
|
||||||
|
def run(projroot: str, args: List[str]) -> None:
|
||||||
|
"""Main script entry point."""
|
||||||
|
# pylint: disable=too-many-branches
|
||||||
|
# pylint: disable=too-many-locals
|
||||||
|
|
||||||
|
if len(args) != 1:
|
||||||
|
raise CleanError('Expected 1 arg')
|
||||||
|
|
||||||
|
command = args[0]
|
||||||
|
|
||||||
|
valid_args = ['check', 'get-sdk-path', 'get-ndk-path', 'get-adb-path']
|
||||||
|
if command not in valid_args:
|
||||||
|
print('INVALID ARG; expected one of', valid_args, file=sys.stderr)
|
||||||
|
sys.exit(255)
|
||||||
|
|
||||||
|
# In all cases we make sure there's a local.properties in our android
|
||||||
|
# dir that contains valid sdk path. If not, we attempt to create it.
|
||||||
|
local_properties_path = os.path.join(projroot, 'ballisticacore-android',
|
||||||
|
'local.properties')
|
||||||
|
if os.path.isfile(local_properties_path):
|
||||||
|
sdk_dir = _parse_lprop_file(local_properties_path)
|
||||||
|
else:
|
||||||
|
sdk_dir = _gen_lprop_file(local_properties_path)
|
||||||
|
|
||||||
|
# Sanity check; look for a few things in the sdk that we expect to
|
||||||
|
# be there.
|
||||||
|
if not os.path.isfile(sdk_dir + '/platform-tools/adb'):
|
||||||
|
raise Exception('ERROR: android sdk at "' + sdk_dir +
|
||||||
|
'" does not seem valid')
|
||||||
|
|
||||||
|
# Sanity check: if they've got ANDROID_HOME set, make sure it lines up with
|
||||||
|
# what we're pointing at.
|
||||||
|
android_home = os.getenv('ANDROID_HOME')
|
||||||
|
if android_home is not None:
|
||||||
|
if android_home != sdk_dir:
|
||||||
|
print('ERROR: sdk dir mismatch; ANDROID_HOME is "' + android_home +
|
||||||
|
'" but local.properties set to "' + sdk_dir + '"',
|
||||||
|
file=sys.stderr)
|
||||||
|
sys.exit(255)
|
||||||
|
|
||||||
|
if command == 'get-sdk-path':
|
||||||
|
print(sdk_dir)
|
||||||
|
|
||||||
|
# We no longer add the ndk path to local.properties (doing so is obsolete)
|
||||||
|
# but we still want to support returning the ndk path, as some things such
|
||||||
|
# as external python builds still ask for this. So now we just pull it from
|
||||||
|
# the project gradle file where we set it explicitly.
|
||||||
|
if command == 'get-ndk-path':
|
||||||
|
gradlepath = Path(PROJROOT, 'ballisticacore-android/build.gradle')
|
||||||
|
with gradlepath.open() as infile:
|
||||||
|
lines = [
|
||||||
|
l for l in infile.readlines()
|
||||||
|
if l.strip().startswith('ext.ndk_version = ')
|
||||||
|
]
|
||||||
|
if len(lines) != 1:
|
||||||
|
raise RuntimeError(
|
||||||
|
f'Expected exactly one ndk_version line in build.gradle;'
|
||||||
|
f' found {len(lines)}')
|
||||||
|
ver = lines[0].strip().replace("'", '').replace('"', '').split()[-1]
|
||||||
|
path = os.path.join(sdk_dir, 'ndk', ver)
|
||||||
|
if not os.path.isdir(path):
|
||||||
|
raise Exception(f'NDK listed in gradle not found: {path}')
|
||||||
|
print(path)
|
||||||
|
|
||||||
|
if command == 'get-adb-path':
|
||||||
|
import subprocess
|
||||||
|
adbpath = Path(sdk_dir, 'platform-tools/adb')
|
||||||
|
if not os.path.exists(adbpath):
|
||||||
|
raise Exception(f'ADB not found at expected path {adbpath}')
|
||||||
|
|
||||||
|
# Ok, we've got a valid adb path.
|
||||||
|
# Now, for extra credit, let's see if 'which adb' points to the
|
||||||
|
# same one and simply return 'adb' if so. This makes our make
|
||||||
|
# output nice and readable (and hopefully won't cause problems)
|
||||||
|
result = subprocess.run('which adb',
|
||||||
|
shell=True,
|
||||||
|
capture_output=True,
|
||||||
|
check=False)
|
||||||
|
if result.returncode == 0:
|
||||||
|
wpath = result.stdout.decode().strip()
|
||||||
|
if wpath == str(adbpath):
|
||||||
|
print('adb')
|
||||||
|
return
|
||||||
|
print(adbpath)
|
||||||
@ -857,3 +857,9 @@ def genchangelog() -> None:
|
|||||||
"""Gen a pretty html changelog."""
|
"""Gen a pretty html changelog."""
|
||||||
from batools.genchangelog import generate
|
from batools.genchangelog import generate
|
||||||
generate(projroot=str(PROJROOT))
|
generate(projroot=str(PROJROOT))
|
||||||
|
|
||||||
|
|
||||||
|
def android_sdk_utils() -> None:
|
||||||
|
"""Wrangle android sdk stuff."""
|
||||||
|
from batools.androidsdkutils import run
|
||||||
|
run(projroot=str(PROJROOT), args=sys.argv[2:])
|
||||||
|
|||||||
@ -351,7 +351,7 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None:
|
|||||||
# These builds require ANDROID_NDK to be set, so make sure that's
|
# These builds require ANDROID_NDK to be set, so make sure that's
|
||||||
# the case.
|
# the case.
|
||||||
os.environ['ANDROID_NDK'] = subprocess.check_output(
|
os.environ['ANDROID_NDK'] = subprocess.check_output(
|
||||||
[rootdir + '/tools/android_sdk_utils',
|
[f'{rootdir}/tools/pcommand', 'android_sdk_utils',
|
||||||
'get-ndk-path']).decode().strip()
|
'get-ndk-path']).decode().strip()
|
||||||
|
|
||||||
# Ok, let 'er rip
|
# Ok, let 'er rip
|
||||||
|
|||||||
@ -39,7 +39,8 @@ from batools.pcommand import (
|
|||||||
android_archive_unstripped_libs, efro_gradle, stage_assets,
|
android_archive_unstripped_libs, efro_gradle, stage_assets,
|
||||||
update_assets_makefile, update_project, update_cmake_prefab_lib,
|
update_assets_makefile, update_project, update_cmake_prefab_lib,
|
||||||
cmake_prep_dir, gen_binding_code, gen_flat_data_code, wsl_path_to_win,
|
cmake_prep_dir, gen_binding_code, gen_flat_data_code, wsl_path_to_win,
|
||||||
wsl_build_check_win_drive, win_ci_binary_build, genchangelog)
|
wsl_build_check_win_drive, win_ci_binary_build, genchangelog,
|
||||||
|
android_sdk_utils)
|
||||||
# pylint: enable=unused-import
|
# pylint: enable=unused-import
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user