11 Commits

Author SHA1 Message Date
Simone cdb61af358 feat(linux): per-config + total wall-clock build timing
Print a timing summary (each config status+seconds and total wall
clock) for both parallel and sequential paths, mirroring the Windows
build output. Helps compare Linux vs Windows and track perf changes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 22:05:14 +02:00
Simone ea71e0d8b2 perf(linux): full make -j per parallel config (no //nconfigs split)
Splitting make -j across configs (jobs // nconfigs) made each parallel
config single-threaded on a 4-vCPU VM, so 3 concurrent serial builds
were as slow as the old sequential path (~7min). Windows (MSBuild)
runs the 3 configs in parallel each using all cores and finishes in
~2min on the same vCPU/RAM. Mirror that: give every parallel config
the full make -j; the scheduler absorbs the mild oversubscription.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 21:26:23 +02:00
Simone c6e74909b4 perf(linux): build configs in parallel (default)
Linux built the 3 configs sequentially (~3x a single config); Windows
already parallelizes. Run them concurrently via ThreadPoolExecutor,
splitting make -j across configs to avoid CPU oversubscription.
Symlink setup serialized with a lock. --no-parallel restores
sequential. Brings Linux wall time close to Windows.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 21:07:02 +02:00
Simone 57133b71ee feat(build): add --dist to redirect output to dist/ instead of plugins/
When --dist is passed (forwarded by build_plugin.py to the per-version
script), built nsis7z.dll files are copied to <repo>/dist/<config>
instead of <repo>/plugins/<config>. Lets CI collect a clean dist/
tree without touching the committed plugins/ dir. Windows
(2601_vs2026) and Linux build paths both supported.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 20:33:37 +02:00
Simone d620989a6c chore: change default 7-zip version from 26.00 to 26.01 2026-05-03 02:34:26 +02:00
Simone 6f37d34920 refactor: rename versions/zstd to versions/zstd-bundle for consistency
Aligns the zstd NSIS wrapper directory with the naming convention used by
all other bundle directories (versions/25.01-bundle, 26.00-bundle, etc.).

Changes:
- git mv versions/zstd -> versions/zstd-bundle (20 project-owned files)
- Fix UI/NSIS/StdAfx.h: use relative include ../../Bundles/Nsis7z/pluginapi.h
  instead of absolute-style 7zip/Bundles/Nsis7z/pluginapi.h (portable across
  both Linux and Windows builds without extra include path)

Build tool updates:
- tools/legacy/build_plugin_zstd_vs2026.py: updated project_dir path
- tools/linux/build_plugin_linux.py:
  * VERSION_LAYOUT zstd: zstd -> zstd-bundle
  * VERSION_EXTRA_FLAGS zstd: -Wno-sign-compare -Wno-cast-function-type
    (fast-lzma2 C vendor code)
  * VERSION_EXTRA_CXXFLAGS zstd: -Wno-unused-parameter (NSIS wrapper)
  * EXTRA_SYS_OBJS: inject MyWindows.o for zstd (LocalFileTimeToFileTime2)
  * Remove 'zip_version != zstd' exception; auto-recreate symlinks for all
    bundle versions including zstd
- tools/linux/setup_bundle_symlinks.py: add VENDOR_DIR mapping so 'zstd'
  points to versions/7-zip-zstd (not versions/zstd which no longer exists)
- tools/linux/overlay/makefile.gcc: add EXTRA_SYS_OBJS ?= variable so
  callers can inject additional objects without modifying the file

Linux build status after this commit:
  python3 build_plugin.py --7zip-version zstd  -> Build completed (all 3 configs)
2026-05-03 02:25:50 +02:00
Simone 8a76f8cc70 fix: auto-recreate bundle symlinks on Linux if missing after clone
After the previous commit removed symlinks from git (they break Windows
clones), a fresh Linux clone or git checkout would leave the bundle
directories without the POSIX symlinks that the GNU make build needs.

Add _ensure_bundle_symlinks() to build_plugin_linux.py: before the first
make invocation for a bundle-based version it checks whether the bundle
root symlink (bundle/C -> ../VER/C) exists and, if not, runs
setup_bundle_symlinks.py automatically so the developer never has to
run the setup script manually.
2026-05-03 02:07:25 +02:00
Simone 56f831017e build: redirect 25.01 builds to bundle directory
- tools/linux/build_plugin_linux.py: point VERSION_LAYOUT['25.01'].bundle_dir
  to versions/25.01-bundle/; update comment (all versions now use bundle dirs).
- tools/legacy/build_plugin_2501_vs2026.py: point project_dir to 25.01-bundle/.
- tools/legacy/build_plugin_2501_vs2022.py: point project_dir to 25.01-bundle/.
2026-05-03 01:38:45 +02:00
Simone 68f5101c64 build: redirect 26.00 builds to bundle directory
- tools/linux/build_plugin_linux.py: point VERSION_LAYOUT['26.00'].bundle_dir
  to versions/26.00-bundle/ (was versions/26.00/); update module docstring.
- tools/legacy/build_plugin_2600_vs2026.py: point project_dir to
  versions/26.00-bundle/ (was versions/26.00/).
- tools/linux/setup_26_01_bundle_symlinks.py: refactor to use bundle_root /
  vendor_root variables and add C/Asm root-level symlink creation, matching
  the new setup_26_00_bundle_symlinks.py convention.
2026-05-03 01:31:30 +02:00
Simone 6a961306c9 build(linux): introduce overlay makefile infrastructure
Replaces the per-version in-tree build files with a shared overlay that
keeps all project-owned build infrastructure outside the vendor source trees,
making it safe to use vendor directories as pristine git submodules.

Changes:
- Add tools/linux/overlay/makefile.gcc: parameterised makefile that drives
  MinGW cross-compilation; VENDOR_7ZIP, DEF_FILE and NSIS_DIR are all
  overridable from the command line so no files are written into the vendor
  tree at build time.
- Add tools/linux/overlay/include/: case-sensitivity shim headers
  (Windows.h, CommCtrl.h, MAPI.h, NTSecAPI.h, Psapi.h, ShlObj.h) that
  redirect to the lowercase MinGW system headers; also adds
  z7_idecl_noexcept_strip.h which resolves the noexcept-specifier mismatch
  in 7-zip 25.01 NSIS UI code.
- Move Nsis7z.def from versions/26.00/…/Bundles/Nsis7z/ to overlay/ (git
  rename; content unchanged).
- Delete versions/26.00/…/Bundles/Nsis7z/makefile.gcc (superseded by the
  overlay).
- Rewrite tools/linux/build_plugin_linux.py to drive the overlay makefile,
  support multiple 7-zip versions (25.01, 26.00, 26.01, zstd) with a
  VERSION_LAYOUT table, and add NSIS_DIR auto-detection for bundle-based
  builds.
- Add _linux_build/ to .gitignore.
2026-05-03 01:19:13 +02:00
Simone d80b025219 feat: add Linux MinGW build path and Windows build-script fixes (v2.2.0) 2026-05-02 19:56:28 +02:00