diff options
Diffstat (limited to 'pkgs/development/compilers/yosys/plugins/symbiflow.nix')
-rw-r--r-- | pkgs/development/compilers/yosys/plugins/symbiflow.nix | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/pkgs/development/compilers/yosys/plugins/symbiflow.nix b/pkgs/development/compilers/yosys/plugins/symbiflow.nix new file mode 100644 index 0000000000000..cecc1bee9219c --- /dev/null +++ b/pkgs/development/compilers/yosys/plugins/symbiflow.nix @@ -0,0 +1,106 @@ +{ fetchFromGitHub +, gtest +, lib +, python3 +, readline +, stdenv +, which +, yosys +, zlib +, yosys-symbiflow +}: let + + src = fetchFromGitHub { + owner = "SymbiFlow"; + repo = "yosys-symbiflow-plugins"; + rev = "35c6c33811a8de7c80dff6a7bcf7aa6ec9b21233"; + hash = "sha256-g5dX9+R+gWt8e7Bhbbg60O9qa+Vi6Ar0M1sHhYlAre8="; + }; + + version = "2022.01.06"; + + # Supported symbiflow plugins. + # + # The following are disabled: + # + # "ql-qlf" builds but fails to load the plugin, so is not currently supported. + # + # "UHDM" doesn't currently build, as the work to package UHDM and surelog has + # not (yet) been undertaken. + plugins = [ + "design_introspection" + "fasm" + "integrateinv" + "params" + "ql-iob" + # "ql-qlf" + "sdc" + "xdc" + # "UHDM" + ]; + + static_gtest = gtest.dev.overrideAttrs (old: { + dontDisableStatic = true; + disableHardening = [ "pie" ]; + cmakeFlags = old.cmakeFlags ++ ["-DBUILD_SHARED_LIBS=OFF"]; + }); + +in lib.genAttrs plugins (plugin: stdenv.mkDerivation (rec { + pname = "yosys-symbiflow-${plugin}-plugin"; + inherit src version plugin; + enableParallelBuilding = true; + + nativeBuildInputs = [ which python3 ]; + buildInputs = [ yosys readline zlib ] ; + + # xdc has an incorrect path to a test which has yet to be patched + doCheck = plugin != "xdc"; + checkInputs = [ static_gtest ]; + + # ql-qlf tries to fetch a yosys script from github + # Run the script in preBuild instead. + patches = lib.optional ( plugin == "ql-qlf" ) ./symbiflow-pmgen.patch; + + preBuild = '' + mkdir -p ql-qlf-plugin/pmgen + '' + + lib.optionalString ( plugin == "ql-qlf" ) '' + python3 ${yosys.src}/passes/pmgen/pmgen.py -o ql-qlf-plugin/pmgen/ql-dsp-pm.h -p ql_dsp ql-qlf-plugin/ql_dsp.pmg + ''; + + # Providing a symlink avoids the need for patching the test makefile + postUnpack = '' + mkdir -p source/third_party/googletest/googletest/build/ + ln -s ${static_gtest}/lib source/third_party/googletest/googletest/build/lib + ''; + + makeFlags = [ + "PLUGIN_LIST=${plugin}" + ]; + + buildFlags = [ + "PLUGINS_DIR=\${out}/share/yosys/plugins/" + "DATA_DIR=\${out}/share/yosys/" + ]; + + checkFlags = [ + "PLUGINS_DIR=\${NIX_BUILD_TOP}/source/${plugin}-plugin" + "DATA_DIR=\${NIX_BUILD_TOP}/source/${plugin}-plugin" + ( "NIX_YOSYS_PLUGIN_DIRS=\${NIX_BUILD_TOP}/source/${plugin}-plugin" + # sdc and xdc plugins use design introspection for their tests + + (lib.optionalString ( plugin == "sdc" || plugin == "xdc" ) + ":${yosys-symbiflow.design_introspection}/share/yosys/plugins/") + ) + ]; + + installFlags = buildFlags; + + meta = with lib; { + description = "Symbiflow ${plugin} plugin for Yosys"; + license = licenses.isc; + platforms = platforms.all; + maintainers = with maintainers; [ ollieB thoughtpolice ]; + }; +})) + + |