{"id":46742346,"url":"https://github.com/johnjohnlin/libfstpp","last_synced_at":"2026-03-09T17:51:07.993Z","repository":{"id":332979151,"uuid":"1135734896","full_name":"johnjohnlin/libfstpp","owner":"johnjohnlin","description":"A faster reimplementation of Gtkwave FST format Writer API","archived":false,"fork":false,"pushed_at":"2026-02-07T19:13:50.000Z","size":19251,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-08T04:12:23.655Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"yodalee/verilator_snapshot","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/johnjohnlin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-16T14:15:26.000Z","updated_at":"2026-02-03T02:24:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/johnjohnlin/libfstpp","commit_stats":null,"previous_names":["johnjohnlin/libfstpp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/johnjohnlin/libfstpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnjohnlin%2Flibfstpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnjohnlin%2Flibfstpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnjohnlin%2Flibfstpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnjohnlin%2Flibfstpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnjohnlin","download_url":"https://codeload.github.com/johnjohnlin/libfstpp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnjohnlin%2Flibfstpp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30305302,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T17:35:44.120Z","status":"ssl_error","status_checked_at":"2026-03-09T17:35:43.707Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-09T17:51:07.307Z","updated_at":"2026-03-09T17:51:07.969Z","avatar_url":"https://github.com/johnjohnlin.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# \"\"\"\"\" This repo is archived and now hosted by [GtkWave](https://github.com/gtkwave/libfstwriter). \"\"\"\"\"\n# \"\"\"\"\" This repo is archived and now hosted by [GtkWave](https://github.com/gtkwave/libfstwriter). \"\"\"\"\"\n# \"\"\"\"\" This repo is archived and now hosted by [GtkWave](https://github.com/gtkwave/libfstwriter). \"\"\"\"\"\n\n# High-Performance FST Waveform Writer\n\nA C++14 re-implementation of the **Fast Signal Trace (FST)** waveform writer, originally designed for [GtkWave](http://gtkwave.sourceforge.net/).\n\n## 🚀 Overview\n\nThis project provides a highly optimized, standard-compliant C++ implementation of the FST writer API. The core of this project is written in **C++14** to ensure maximum compatibility with EDA tools and environments (which is usually a bit outdated), specifically targeting performance improvements for *Verilator* simulations.\n\nThe unittests are written in C++20.\n\n### Key Features\n- **C++14**: The core of this project is written in clean C++14 to maximize compatibility. Using `vector` and `string` can eliminate most resource management code compared to C.\n- **High Performance**: Optimized for speed to reduce simulation overhead (2x faster than the original `fstapi` when used with Verilator). This is mainly because we process data as binary instead of strings used by the original `fstapi.c`.\n- **Drop-in Compatibility**: Includes an optional C-compatible wrapper `fstapi.cpp`, providing the same writer interface as the original `fstapi.c`.\n- **Robust Testing**: Comprehensive unit tests written in C++20 to ensure correctness. Coverage is also generated and checked (70% line and 70% function coverage).\n- **Bit-true**: The implementation is bit-true to the original `fstapi.c` (tested in unittests).\n\n## Regression Reports (WIP due to permission issue)\nWe generate a detailed regression summary for every push on the `master` branch.\nTo view it:\n1. Go to the **Commit Detail** page (click the **Commit SHA**, usually above the files list).\n2. Look for a comment by `github-actions[bot]`.\n3. Click the link \"Click Here to View Summary\". This takes you to the **Job Summary** page of the Action run, where you can see the pass/fail status and coverage metrics.\n\n## 📂 Project Structure\n\nEvery file of this project is under the `src` directory, which also includes third-party files:\n\n```\nfstcpp/              # 🌟 MAIN: Core C++ implementation\n├── Writer.h       #    - The new C++ API header\n└─── Writer.cpp       #    - The implementation\ngtkwave/             # 📚 ORIGINAL: Original GtkWave files\n├── fstapi.cpp       #    - C-style wrapper for backward compatibility\n├── fstapi.c         #    - REFERENCE: the original GtkWave implementation\n└── fstapi.h         #    - The original GtkWave header file used by both fstapi.cpp and fstapi.c\nintegration_test/    # 🧪 TESTS: Integration tests generated by Verilator\n```\n\n---\n\n## 🛠️ Build \u0026 Testing \u0026 Installation\n\n### Prerequisites\n* C++20 compatible compiler (GCC/Clang)\n* CMake (3.10 or higher)\n* Ninja (optional, recommended for speed)\n\n### Setup for Development (VS Code)\n\nTo configure the project with debug symbols and prepare it for *VS Code*+*clangd*:\n\n```bash\n# Generate build files using Ninja\ncmake -G Ninja -B build/debug -DCMAKE_BUILD_TYPE=Debug src\n```\n\n### Manual Build for Development (No coverage test)\n\nIf you prefer running steps manually, our repository follows a very standard CMake workflow, here is an example:\n\n```bash\ncmake -G Ninja -B build/debug -DCMAKE_BUILD_TYPE=Debug src\ncd build/debug\nninja -j$(nproc)\nctest -j$(nproc)\n```\n\n### Testing and Verification\n\nTo run the full regression suite (build, test, and coverage) just like the CI server:\n\n```bash\n./run_regression.sh --coverage\n```\n\nBy default, it will create `build/regression` directory.\n\n### Installation\n\nThere is no standard installation step now, just copy the files in `src/fstcpp` to your project. If you want to use the C-style wrapper, also copy `src/gtkwave/fstapi.cpp` and `src/gtkwave/fstapi.h` to your project.\n\nThe dependencies are `ZLIB` and `lz4`, which are quite easy to install on most Linux distributions.\n\n---\n\n## 📚 References\n\n* [FST Waveform Specification (Unofficial)](https://blog.timhutt.co.uk/fst_spec/) - A great resource for understanding the FST format internals.\n* [Benchmark](https://github.com/yodalee/verilator_snapshot) - Contains performance benchmarks.\n\n## 📄 License\n\nThe main source code of this repository is licensed under the **MIT License**.\nSee the [LICENSE](LICENSE) file for more details.\n\n### Details\nThe `src` directory of this project contains a mix of original code and redistributed files:\n\n* **MIT**\n  * **`fstcpp/`**: The core of this project.\n  * **`gtkwave/`**: Redistributed from GtkWave.\n  * **`integration_test/`**: `Simple.sv` and `Simple_tb.test.cpp` are part of this project.\n* **Boost Software License**\n  * **`fstcpp/string_view.h`**: Lightweight `string_view` implementation.\n* **Verilator License**\n  * **`integration_test/`**: Generated by Verilator 5.042.\n\n**AI usage notice:** The files in this repository are assisted by *Gemini 3 Pro* with *AntiGravity*.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnjohnlin%2Flibfstpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnjohnlin%2Flibfstpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnjohnlin%2Flibfstpp/lists"}