* (fix): artifacts patch
* (fix) vcs waveform: support fsdb rename and flush
* (update) yaml-cpp: move to dependence and bump to 0.9.0
* (remove) third: drop unused type_safe
* (update) slang: bump default tag to v11.0
* (update) yaml-cpp: fetch dependency during init
* (fix) vcs coverage: add runtime save control
* fix: update VCS coverage control flow
* fix: make VCS finish safe for host process
* fix: stabilize VCS coverage export
* fix: support modern Verdi integration for VCS
* example: unify output paths and add per-example test targets
* fix: resolve xspcomm from picker path in mem_direct template
---------
Co-authored-by: Makiras <22570332+Makiras@users.noreply.github.com>
Add a new `atClone()` method to the simulation core and expose it through all language bindings.
This method is intended to be called in a child process after a fork() to re-initialize the state of the Verilated model. This is crucial for supporting robust multi-process simulation environments, such as Python's `multiprocessing`, where forking can lead to an inconsistent state in the simulator's child instances.
Additionally, this commit includes several stability and memory management improvements:
- Fix memory leaks in `DutUnifiedBase` and the C++ wrapper by ensuring allocated resources are properly deallocated.
- Add a null-pointer check in `FlushWaveform` to prevent crashes when a waveform dumper is not present.
- Expose the `atClone` functionality to C++, Go, Java, Lua, Python, and Scala wrappers.
Add support for macOS:
* bugfix(exprtk): Upgrade verison of exprtk to fix compile error in clang.
* refact: Remove `bits/stdc++.h` and move `src/codegen/cpp.cpp::replace_all` to `include/picker.hpp::str_replace_all`
* feat: Use `dlopen` for non-linux platform.
* fix: Add missing headers
* fix(nproc): Fix bug of missing `nproc` in MacOS
* refactor(python): Adapt python template to macOS
* refactor(mem_direct): Adapt mem_direct template to macOS
* refactor(lib_suffix): Add shared library suffix in code generator
* refactor(dut_base.cpp): Use code generator to set library suffix
* add(cpp): Add cpp support for macOS
* add(java): Add java support for macOS
* refactor(nproc): Set $NPROC to support macOS
* fix(parser/sv): Add missing header file `unordered_set`
* fix(python_macos): fix the wrong suffix of module-type library
* refactor(codegen/lib): generator template use absolute path
* fix(mem_direct): fix link error in macOS
* feat: Use LLVM Clang to compile instead of AppleClang
* feat(golang): Add golang support for macOS
* fix(rpath): fix CMAKE_BUILD_RPATH for macOS
* feat(lua): Add lua support for macOS
* fix(scala): Fix wrong use of static method in scala
* feat(scala): Add scala support for macOS
* refactor(cmake): Upgrade cmake version to 3.15
* feat(doc): Add doc about installing picker on macOS
chore(ci,test,build): add CI/tests for GSIM, .sv and Java; xcomm fallback; test preflight
- CI: install default-jdk for Java tests
- Tests: add GSIM export smoke, .sv verilator build, Java export
- test/Makefile: add preflight to auto-clean + rebuild with python+java when missing
- Build: Makefile init falls back to latest master for xcomm when branch missing
- Wire new tests into default test targets
- Run build-and-test and appimage-build on all branches
- Restrict appimage-publish and docker-build-push to master
- Reuse build directory via artifact between jobs to avoid rebuilds
- Fix deps: install swig in CI and AppImage job
- Makefile appimage target reuses existing build/ for install & packing
- Remove standalone AppImage/docker workflows to prevent duplicate runs
- build-and-test: install base toolchain and Kitware CMake
- Build and install SWIG v4.2.1 from source
- Build and install Verilator v5.018 from source
- appimage-build: reuse build/ artifact; minimal deps (appimagetool, linuxdeploy)
- Keep: appimage-build on all branches; publish/docker only on master
- 在 test/Makefile 中让 smoke、sv_build、gsim_smoke 依赖 preflight
- 避免 preflight 执行 clean/rebuild 时其他并发目标找不到构建产物
- preflight 完成后仍保留测试阶段的并行度
Modify the selection logic for `CMD_VERILATOR_ROOT` in `verilator.cmake`.
When using a Verilator distribution that is not installed from a package manager or compiled from source, such as the one provided by [oss-cad-suite](https://github.com/YosysHQ/oss-cad-suite-build), the output of `verilator -V` can be as follows:
```bash
Summary of configuration:
Compiled in defaults if not in environment:
SYSTEMC =
SYSTEMC_ARCH =
SYSTEMC_INCLUDE =
SYSTEMC_LIBDIR =
VERILATOR_ROOT = /yosyshq/share/verilator
SystemC system-wide = 0
Environment:
MAKE =
PERL =
PYTHON3 =
SYSTEMC =
SYSTEMC_ARCH =
SYSTEMC_INCLUDE =
SYSTEMC_LIBDIR =
VERILATOR_BIN =
VERILATOR_ROOT = /opt/oss-cad-suite/share/verilator
```
This output provides two `VERILATOR_ROOT` paths. The one under the `Environment` section is the intended path for this setup.
The previous selection logic would incorrectly choose the first `VERILATOR_ROOT` it found, which was the incorrect one from the `Compiled in defaults` section.
This patch updates the logic to prioritize the `VERILATOR_ROOT` from the `Environment` section. It will only fall back to the `Compiled in defaults` path if the environment one is not available.
picker will find VERILATOR_ROOT by using Verilator 5.026 2024-06-15 rev v5.026
Copyright 2003-2024 by Wilson Snyder. Verilator is free software; you can
redistribute it and/or modify the Verilator internals under the terms of
either the GNU Lesser General Public License Version 3 or the Perl Artistic
License Version 2.0.
See https://verilator.org for documentation
Summary of configuration:
Compiled in defaults if not in environment:
SYSTEMC =
SYSTEMC_ARCH =
SYSTEMC_INCLUDE =
SYSTEMC_LIBDIR =
VERILATOR_ROOT = /opt/verilator5/share/verilator
SystemC system-wide = 0
Environment:
MAKE =
PERL =
SYSTEMC =
SYSTEMC_ARCH =
SYSTEMC_INCLUDE =
SYSTEMC_LIBDIR =
VERILATOR_BIN =
VERILATOR_ROOT = /opt/verilator5/share/verilator
Supported features (compiled-in or forced by environment):
COROUTINES = 1
SYSTEMC = command