mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-07 16:13:23 +08:00
making wsl window build conditions more strict
This commit is contained in:
parent
f0b8845dbc
commit
38a3974a3c
32
.efrocachemap
generated
32
.efrocachemap
generated
@ -4046,18 +4046,18 @@
|
|||||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "c6e86f716993e4db6d40b387c1887bf9",
|
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "c6e86f716993e4db6d40b387c1887bf9",
|
||||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "fdb8c01b631d5475740f0101b301ff03",
|
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "fdb8c01b631d5475740f0101b301ff03",
|
||||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "8c58b1dff5c711bf8dfe6bcc0c033e02",
|
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "8c58b1dff5c711bf8dfe6bcc0c033e02",
|
||||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "474a2b87d36dfb930b8dc7dd49d47cb7",
|
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "2a38697e7097b33740af6cd8da8b1ae6",
|
||||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "4bd338604cf6288636422ef3b62e5d44",
|
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "4bd338604cf6288636422ef3b62e5d44",
|
||||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "bb54dbc392300ee78f33bc2800aee546",
|
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "105b144a26c33ee82548ba7f66f8caf7",
|
||||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "316e826a593499760060c1c2c09fe278",
|
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "316e826a593499760060c1c2c09fe278",
|
||||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "1ef496d1816996878652807805722069",
|
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "b28622b94e3193e73347df19619f88fe",
|
||||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "606f7ed5a63fad5acbdba62b8f2e953f",
|
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "606f7ed5a63fad5acbdba62b8f2e953f",
|
||||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "89513725bac32ca45365113f0a52e6fe",
|
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "febd223d98d2a7dd66588024d9726a84",
|
||||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "f98f149307ee2096aa5c82fb666d96b2",
|
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "f98f149307ee2096aa5c82fb666d96b2",
|
||||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "4d4255c3a6ff19e95a3e2a6d5811b3a7",
|
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "c8ff03b720c5c07a46ad33d9b6de3a40",
|
||||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "0dfe7d534e684d0d36b7d87b1f017be9",
|
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "7e3c487f558a48828e574f96df894079",
|
||||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "e4ebfac891518fc9e4dfc806be42d49d",
|
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "6214da7d6186d98512d848c29d4396af",
|
||||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "8daea1d15329b662419b1c5606318377",
|
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "8725657f87d3654febe0d4176711c2cf",
|
||||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "9162b53189b80d4e5938cd142acd2a1a",
|
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "9162b53189b80d4e5938cd142acd2a1a",
|
||||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "2226d0e2d34051d962320c86464f3a2d",
|
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "2226d0e2d34051d962320c86464f3a2d",
|
||||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "9162b53189b80d4e5938cd142acd2a1a",
|
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "9162b53189b80d4e5938cd142acd2a1a",
|
||||||
@ -4074,14 +4074,14 @@
|
|||||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "299b6c4b83966040618b27563b700c2a",
|
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "299b6c4b83966040618b27563b700c2a",
|
||||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "08c2f91d086e6f3fa73ebc299112358a",
|
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "08c2f91d086e6f3fa73ebc299112358a",
|
||||||
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "299b6c4b83966040618b27563b700c2a",
|
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "299b6c4b83966040618b27563b700c2a",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "71f34c5440a6a9163ecd89b7011c111d",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "2507494bbe98a16131895f110448c8ea",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "7f01c7b5a30449344d3d75e984fa1dda",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "61d67e343abf7925dac810e2811b1e10",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "9c2ce406b476d6eb1035222e9a814e42",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "b19937612b1f9db29d7e758af7915b76",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "c130539910a8d495df3f4869723154a9",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "b73edce181aaffd3d2b5c4af87303bde",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "ce70a22b90984b649ea6710591208099",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "cbbd994d39c7297d7779e0a3a1ef0435",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "7cde4323d9f150942c0234b785d92d1b",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "661811a9424219211429d618d8c86d01",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "6013f50d91d6188e02e25c45176e22ee",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "e84c108ccd7a9f7d1f0c840d2cc3c108",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "d644f9fc77040378625e7bdc0cba172b",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "ea607325f919e5b375ee4ac41262fa45",
|
||||||
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
||||||
"src/assets/ba_data/python/babase/_mgen/enums.py": "5548f407d97e380069f6c596c4e36cd7",
|
"src/assets/ba_data/python/babase/_mgen/enums.py": "5548f407d97e380069f6c596c4e36cd7",
|
||||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",
|
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",
|
||||||
|
|||||||
@ -68,6 +68,12 @@
|
|||||||
- The `windows-debug` and `windows-release` Makefile targets should properly run
|
- The `windows-debug` and `windows-release` Makefile targets should properly run
|
||||||
the game again (these build the Windows version of the game from a WSL
|
the game again (these build the Windows version of the game from a WSL
|
||||||
environment).
|
environment).
|
||||||
|
- WSL Windows builds are now more strict about their locations. Currently this
|
||||||
|
means they must exist somewhere under /mnt/c/. It is turning out that a
|
||||||
|
significant number of behavior workarounds (for file permission quirks, etc.)
|
||||||
|
need to happen to keep these builds behaving, so I'd like to enforce as
|
||||||
|
limited a set of conditions as possible to give us the best chance at
|
||||||
|
succeeding there.
|
||||||
- Added a workaround for WSL builds giving permission errors when staging asset
|
- Added a workaround for WSL builds giving permission errors when staging asset
|
||||||
files that already exist. Please holler if you are building with WSL and still
|
files that already exist. Please holler if you are building with WSL and still
|
||||||
running into any sort of errors, as I would love to make that path as reliable
|
running into any sort of errors, as I would love to make that path as reliable
|
||||||
|
|||||||
@ -700,3 +700,24 @@ def docker_build() -> None:
|
|||||||
version_num,
|
version_num,
|
||||||
build_num,
|
build_num,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def wsl_windows_build_path_description() -> str:
|
||||||
|
"""Describe where wsl windows builds need to live."""
|
||||||
|
return 'anywhere under /mnt/c/'
|
||||||
|
|
||||||
|
|
||||||
|
def is_wsl_windows_build_path(path: str) -> bool:
|
||||||
|
"""Return whether a path is used for wsl windows builds.
|
||||||
|
|
||||||
|
Building Windows Visual Studio builds through WSL is currently only
|
||||||
|
supported in specific locations; namely anywhere under /mnt/c/. This
|
||||||
|
is enforced because building on the Linux filesystem errors due to
|
||||||
|
case-sensitivity issues, and also because a number of workarounds
|
||||||
|
need to be employed to deal with filesystem/permission quirks, so
|
||||||
|
we want to keep things as consistent as possible.
|
||||||
|
|
||||||
|
Note that said quirk workarounds WILL be applied if this returns
|
||||||
|
true, so this check should be as specific as possible.
|
||||||
|
"""
|
||||||
|
return path.startswith('/mnt/c/')
|
||||||
|
|||||||
@ -423,6 +423,10 @@ def wsl_build_check_win_drive() -> None:
|
|||||||
import subprocess
|
import subprocess
|
||||||
import textwrap
|
import textwrap
|
||||||
from efro.error import CleanError
|
from efro.error import CleanError
|
||||||
|
from batools.build import (
|
||||||
|
is_wsl_windows_build_path,
|
||||||
|
wsl_windows_build_path_description,
|
||||||
|
)
|
||||||
|
|
||||||
# We use env vars to influence our behavior and thus can't support
|
# We use env vars to influence our behavior and thus can't support
|
||||||
# batch.
|
# batch.
|
||||||
@ -441,10 +445,12 @@ def wsl_build_check_win_drive() -> None:
|
|||||||
if os.environ.get('WSL_BUILD_CHECK_WIN_DRIVE_IGNORE') == '1':
|
if os.environ.get('WSL_BUILD_CHECK_WIN_DRIVE_IGNORE') == '1':
|
||||||
return
|
return
|
||||||
|
|
||||||
|
nativepath = os.getcwd()
|
||||||
|
|
||||||
# Get a windows path to the current dir.
|
# Get a windows path to the current dir.
|
||||||
path = (
|
winpath = (
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
['wslpath', '-w', '-a', os.getcwd()],
|
['wslpath', '-w', '-a', nativepath],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
check=True,
|
check=True,
|
||||||
)
|
)
|
||||||
@ -452,47 +458,68 @@ def wsl_build_check_win_drive() -> None:
|
|||||||
.strip()
|
.strip()
|
||||||
)
|
)
|
||||||
|
|
||||||
# If we're sitting under the linux filesystem, our path will start
|
|
||||||
# with '\\wsl$' or '\\wsl.localhost' or '\\wsl\'; fail in that case
|
|
||||||
# and explain why.
|
|
||||||
if not any(
|
|
||||||
path.startswith(x) for x in ['\\\\wsl$', '\\\\wsl.', '\\\\wsl\\']
|
|
||||||
):
|
|
||||||
return
|
|
||||||
|
|
||||||
def _wrap(txt: str) -> str:
|
def _wrap(txt: str) -> str:
|
||||||
return textwrap.fill(txt, 76)
|
return textwrap.fill(txt, 76)
|
||||||
|
|
||||||
raise CleanError(
|
# If we're sitting under the linux filesystem, our path will start
|
||||||
'\n\n'.join(
|
# with '\\wsl$' or '\\wsl.localhost' or '\\wsl\'; fail in that case
|
||||||
[
|
# and explain why.
|
||||||
_wrap(
|
if any(
|
||||||
'ERROR: This project appears to live'
|
winpath.startswith(x) for x in ['\\\\wsl$', '\\\\wsl.', '\\\\wsl\\']
|
||||||
' on the Linux filesystem.'
|
):
|
||||||
),
|
raise CleanError(
|
||||||
_wrap(
|
'\n\n'.join(
|
||||||
'Visual Studio compiles will error here for reasons related'
|
[
|
||||||
' to Linux filesystem case-sensitivity, and thus are'
|
_wrap(
|
||||||
' disallowed.'
|
'ERROR: This project appears to live'
|
||||||
' Clone the repo to a location that maps to a native'
|
' on the Linux filesystem.'
|
||||||
' Windows drive such as \'/mnt/c/ballistica\''
|
),
|
||||||
' and try again.'
|
_wrap(
|
||||||
),
|
'Visual Studio compiles will error here'
|
||||||
_wrap(
|
' for reasons related'
|
||||||
'Note that WSL2 filesystem performance'
|
' to Linux filesystem case-sensitivity, and thus are'
|
||||||
' is poor when accessing'
|
' disallowed.'
|
||||||
' native Windows drives, so if Visual Studio builds are not'
|
' Clone the repo to a location that maps to a native'
|
||||||
' needed it may be best to keep things here'
|
' Windows drive such as \'/mnt/c/ballistica\''
|
||||||
' on the Linux filesystem.'
|
' and try again.'
|
||||||
' This behavior may differ under WSL1 (untested).'
|
),
|
||||||
),
|
_wrap(
|
||||||
_wrap(
|
'Note that WSL2 filesystem performance'
|
||||||
'Set env-var WSL_BUILD_CHECK_WIN_DRIVE_IGNORE=1 to skip'
|
' is poor when accessing'
|
||||||
' this check.'
|
' native Windows drives,'
|
||||||
),
|
' so if Visual Studio builds are not'
|
||||||
]
|
' needed it may be best to keep things here'
|
||||||
|
' on the Linux filesystem.'
|
||||||
|
' This behavior may differ under WSL1 (untested).'
|
||||||
|
),
|
||||||
|
_wrap(
|
||||||
|
'Set env-var WSL_BUILD_CHECK_WIN_DRIVE_IGNORE=1 to skip'
|
||||||
|
' this check.'
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# We also now require this check to be true. We key off this same
|
||||||
|
# check in other places to introduce various workarounds to deal
|
||||||
|
# with funky permissions issues/etc.
|
||||||
|
#
|
||||||
|
# Note that we could rely on *only* this check, but it might be nice
|
||||||
|
# to leave the above one in as well to better explain the Linux
|
||||||
|
# filesystem situation.
|
||||||
|
if not is_wsl_windows_build_path(nativepath):
|
||||||
|
reqs = wsl_windows_build_path_description()
|
||||||
|
raise CleanError(
|
||||||
|
'\n\n'.join(
|
||||||
|
[
|
||||||
|
_wrap(
|
||||||
|
f'ERROR: This project\'s path ({nativepath})'
|
||||||
|
f' is not valid for WSL Windows builds.'
|
||||||
|
f' Path must be: {reqs}.'
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def wsl_path_to_win() -> None:
|
def wsl_path_to_win() -> None:
|
||||||
|
|||||||
@ -15,6 +15,8 @@ from efro.terminal import Clr
|
|||||||
from efrotools.util import extract_arg, extract_flag
|
from efrotools.util import extract_arg, extract_flag
|
||||||
from efrotools.pyver import PYVER
|
from efrotools.pyver import PYVER
|
||||||
|
|
||||||
|
from batools.build import is_wsl_windows_build_path
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -232,7 +234,7 @@ class AssetStager:
|
|||||||
#
|
#
|
||||||
# As a janky workaround, make everything in our dst dir writable
|
# As a janky workaround, make everything in our dst dir writable
|
||||||
# by us before we do our work.
|
# by us before we do our work.
|
||||||
if self.projroot.startswith('/mnt/c/'):
|
if is_wsl_windows_build_path(self.projroot):
|
||||||
self.wsl_chmod_workaround = True
|
self.wsl_chmod_workaround = True
|
||||||
|
|
||||||
def _parse_android_args(self, args: list[str]) -> None:
|
def _parse_android_args(self, args: list[str]) -> None:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user