mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
Require cmake-clang-v1 1.0.4 for Linux IPO linking.
Floor ensure-toolchain at 1.0.4 (libxml2 + clang.cfg -fuse-ld=lld) and prepend pack lib/ to LD_LIBRARY_PATH when activating the toolchain. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -41,8 +41,8 @@ with host-native `curl` + `tar`/`unzip` when possible — so Microsoft Store
|
||||
Python AppData redirection cannot hide cmake. Offline zips unpack to the same
|
||||
path. A legacy `%LOCALAPPDATA%/psxrecomp/…` cache is migrated automatically.
|
||||
Override with `RETCOMM_TOOLCHAIN_DIR`. Require a floor version via
|
||||
`RETCOMM_TOOLCHAIN_MIN_VERSION` / `ensure-toolchain --min-version` (Windows
|
||||
defaults to `1.0.3` for bundled zlib). Generate/rebuild still need Python 3
|
||||
`RETCOMM_TOOLCHAIN_MIN_VERSION` / `ensure-toolchain --min-version` (defaults to
|
||||
`1.0.4` for Linux LTO deps + Windows zlib). Generate/rebuild still need Python 3
|
||||
for `psxrecomp_cli.py`.
|
||||
|
||||
## Commands
|
||||
|
||||
@@ -588,6 +588,23 @@ static void activate_toolchain_path(void) {
|
||||
if (pref[0])
|
||||
setenv("CMAKE_PREFIX_PATH", pref, 1);
|
||||
}
|
||||
/* Linux packs 1.0.4+: bundled libxml2.so.2 for lld / thin LTO. */
|
||||
{
|
||||
char libdir[1500];
|
||||
if (join_path(libdir, sizeof(libdir), pack_root, "lib") &&
|
||||
path_is_dir(libdir)) {
|
||||
const char* prev = getenv("LD_LIBRARY_PATH");
|
||||
char llp[8192];
|
||||
if (prev && prev[0] && !strstr(prev, libdir))
|
||||
snprintf(llp, sizeof(llp), "%s:%s", libdir, prev);
|
||||
else if (!prev || !prev[0])
|
||||
snprintf(llp, sizeof(llp), "%s", libdir);
|
||||
else
|
||||
llp[0] = '\0';
|
||||
if (llp[0])
|
||||
setenv("LD_LIBRARY_PATH", llp, 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -969,8 +986,9 @@ static int run_cli_posix(char* const argv[],
|
||||
/* ---- Host-native toolchain install (no Store Python AppData redirect) ---- */
|
||||
|
||||
static const char* k_tc_repo = "TechnicallyComputers/retcomm-toolchains";
|
||||
/* Default floor for Windows zlib-in-pack; override with RETCOMM_TOOLCHAIN_MIN_VERSION. */
|
||||
static const char* k_tc_min_version_default = "1.0.3";
|
||||
/* Floor: Linux 1.0.4+ ships libxml2 + clang.cfg (-fuse-ld=lld) for IPO;
|
||||
* Windows 1.0.3+ ships static zlib. Override with RETCOMM_TOOLCHAIN_MIN_VERSION. */
|
||||
static const char* k_tc_min_version_default = "1.0.4";
|
||||
|
||||
static const char* toolchain_zip_asset_name(void) {
|
||||
#if defined(_WIN32)
|
||||
@@ -986,13 +1004,7 @@ static const char* toolchain_min_version(void) {
|
||||
const char* env = getenv("RETCOMM_TOOLCHAIN_MIN_VERSION");
|
||||
if (env && env[0])
|
||||
return env;
|
||||
#if defined(_WIN32)
|
||||
/* Windows packs from 1.0.3 ship static zlib for find_package(ZLIB). */
|
||||
return k_tc_min_version_default;
|
||||
#else
|
||||
(void)k_tc_min_version_default;
|
||||
return "";
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Parse leading dotted integers from a version / tag (optional leading 'v'). */
|
||||
|
||||
+12
-5
@@ -184,10 +184,9 @@ def default_min_version() -> str:
|
||||
env = (os.environ.get("RETCOMM_TOOLCHAIN_MIN_VERSION") or "").strip()
|
||||
if env:
|
||||
return env
|
||||
# Windows packs from 1.0.3 ship static zlib for find_package(ZLIB).
|
||||
if sys_platform_is_windows():
|
||||
return "1.0.3"
|
||||
return ""
|
||||
# 1.0.4+: Linux libxml2 + clang.cfg (-fuse-ld=lld) for IPO; Windows zlib
|
||||
# since 1.0.3. Keep one floor so ensure-toolchain refreshes stale caches.
|
||||
return "1.0.4"
|
||||
|
||||
|
||||
def pack_satisfies_min(root: Path, min_version: str = "") -> bool:
|
||||
@@ -340,6 +339,15 @@ def activate_toolchain_bin(bin_dir: Path, log=None) -> None:
|
||||
os.environ["CMAKE_PREFIX_PATH"] = pack_s
|
||||
elif pack_s not in prev_prefix.split(os.pathsep):
|
||||
os.environ["CMAKE_PREFIX_PATH"] = pack_s + os.pathsep + prev_prefix
|
||||
lib_dir = pack_root / "lib"
|
||||
if lib_dir.is_dir() and not sys_platform_is_windows():
|
||||
lib_s = str(lib_dir)
|
||||
prev_llp = os.environ.get("LD_LIBRARY_PATH", "")
|
||||
parts = prev_llp.split(os.pathsep) if prev_llp else []
|
||||
if lib_s not in parts:
|
||||
os.environ["LD_LIBRARY_PATH"] = lib_s + (
|
||||
os.pathsep + prev_llp if prev_llp else ""
|
||||
)
|
||||
for name, env_key in (
|
||||
("clang", "CC"),
|
||||
("clang++", "CXX"),
|
||||
@@ -352,7 +360,6 @@ def activate_toolchain_bin(bin_dir: Path, log=None) -> None:
|
||||
if log:
|
||||
log(f"Using toolchain: {bin_dir}")
|
||||
|
||||
|
||||
def unpack_zip_to(zip_path: Path, dest: Path) -> Path:
|
||||
"""Extract *zip_path* into *dest* (replaced) and return usable pack root."""
|
||||
if dest.exists():
|
||||
|
||||
Reference in New Issue
Block a user