Skip to main content

Introduction

SoCMake is a hardware build system built on top of CMake, designed to automate hardware and SoC design workflows including RTL simulation, code generation, FPGA implementation, and synthesis.

Rather than creating a new build system from scratch, SoCMake extends the mature and widely-used CMake ecosystem to meet the specific needs of hardware design.

Key Features

  • Native Support for C++ testbenches:
    • Ideal for C++ and SystemC testbenches, while also supporting Verilog, SystemVerilog, VHDL, or mixed-language testbenches.
  • Cross compilation of target CPU application code:
    • Seamlessly compile target CPU applications for SoC designs, leveraging CMake's cross-compilation capabilities.
  • Familiar CMake Workflow
    • Benefits from CMake's stability, extensive documentation, and familiar build process that most Linux users already know.
  • IP block package management
    • Package IP blocks into self-contained repositories and manage dependencies using the CPM.cmake package manager.

Getting started

Jump to Getting started page to learn how to set-up SoCMake in your project.

Supported Languages and Tools

SoCMake supports all of the major RTL simulators and number of other EDA tools.

It is very simple to add support for new EDA tools through the SoCMake's IP block API and CMake's custom targets.

TypeSupported
LanguagesC, C++, SystemC, ASM, Verilog, SystemVerilog, VHDL, SystemRDL, IPXact
RTL SimulationVerilator, IcarusVerilog, GHDL, Xcelium, VCS, Questasim, Vivado Simulator, cocotb
RTL LintingVerible, vhdl_linter
RTL conversionSV2V
SynthesisYosys, Vivado
PeakRDLregblock, halcpp, html, docusaurus, ipblocksvg, socgen, ldsgen