157 lines
3.7 KiB
Python
157 lines
3.7 KiB
Python
workspace(
|
|
name = "qfc",
|
|
)
|
|
|
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
|
|
|
http_archive(
|
|
name = "rules_cc",
|
|
urls = ["https://github.com/bazelbuild/rules_cc/releases/download/0.0.1/rules_cc-0.0.1.tar.gz"],
|
|
sha256 = "4dccbfd22c0def164c8f47458bd50e0c7148f3d92002cdb459c2a96a68498241",
|
|
)
|
|
|
|
http_archive(
|
|
name = "io_tweag_rules_nixpkgs",
|
|
strip_prefix = "rules_nixpkgs-81f61c4b5afcf50665b7073f7fce4c1755b4b9a3",
|
|
urls = ["https://github.com/tweag/rules_nixpkgs/archive/81f61c4b5afcf50665b7073f7fce4c1755b4b9a3.tar.gz"],
|
|
sha256 = "33fd540d0283cf9956d0a5a640acb1430c81539a84069114beaf9640c96d221a",
|
|
)
|
|
|
|
load("@io_tweag_rules_nixpkgs//nixpkgs:repositories.bzl", "rules_nixpkgs_dependencies")
|
|
rules_nixpkgs_dependencies()
|
|
|
|
load("@io_tweag_rules_nixpkgs//nixpkgs:nixpkgs.bzl", "nixpkgs_git_repository", "nixpkgs_package", "nixpkgs_cc_configure")
|
|
|
|
nixpkgs_git_repository(
|
|
name = "nixpkgs",
|
|
revision = "36f0cc6def05dea2b0e9ab0ff4b1dbd9e0d94dda",
|
|
sha256 = "a40fb99f59df730883a45d78f3091e59080eace36b81139bc5bea1c453cbd7a7",
|
|
)
|
|
|
|
nixpkgs_cc_configure(
|
|
name = "local_config_cc",
|
|
repository = "@nixpkgs//:default.nix",
|
|
)
|
|
|
|
nixpkgs_package(
|
|
name = "bluespec",
|
|
repositories = { "nixpkgs": "@nixpkgs//:default.nix" },
|
|
build_file_content = """
|
|
load("@qfc//build/bluespec:rules.bzl", "bluespec_toolchain")
|
|
|
|
sh_binary(
|
|
name = "bsc",
|
|
data = [
|
|
"bin/bsc"
|
|
] + glob(["lib/**", "bin/core/**"]),
|
|
srcs = [
|
|
"@qfc//build/bluespec:bsc.sh",
|
|
],
|
|
deps = [
|
|
"@bazel_tools//tools/bash/runfiles",
|
|
],
|
|
)
|
|
|
|
sh_binary(
|
|
name = "bluetcl",
|
|
data = [
|
|
"bin/bluetcl"
|
|
] + glob(["lib/**", "bin/core/**"]),
|
|
srcs = [
|
|
"@qfc//build/bluespec:bluetcl.sh",
|
|
],
|
|
deps = [
|
|
"@bazel_tools//tools/bash/runfiles",
|
|
],
|
|
)
|
|
|
|
bluespec_toolchain(
|
|
name = "bsc_nixpkgs",
|
|
bsc = ":bsc",
|
|
bluetcl = ":bluetcl",
|
|
verilog_lib = glob(["lib/Verilog/*.v"], [
|
|
"lib/Verilog/BRAM2.v",
|
|
"lib/Verilog/BRAM2Load.v",
|
|
"lib/Verilog/ConstrainedRandom.v",
|
|
"lib/Verilog/Convert*Z.v",
|
|
"lib/Verilog/InoutConnect.v",
|
|
"lib/Verilog/ProbeHook.v",
|
|
"lib/Verilog/RegFileLoad.v",
|
|
"lib/Verilog/ResolveZ.v",
|
|
"lib/Verilog/main.v",
|
|
]),
|
|
)
|
|
|
|
toolchain(
|
|
name = "bsc_nixpkgs_toolchain",
|
|
exec_compatible_with = [
|
|
"@platforms//os:linux",
|
|
],
|
|
toolchain = ":bsc_nixpkgs",
|
|
toolchain_type = "@qfc//build/bluespec:toolchain_type",
|
|
)
|
|
|
|
""",
|
|
)
|
|
|
|
nixpkgs_package(
|
|
name = "yosysflow",
|
|
repositories = { "nixpkgs2": "@nixpkgs//:default.nix" },
|
|
nix_file_content = """
|
|
with import <nixpkgs2> {}; symlinkJoin {
|
|
name = "yosysflow";
|
|
paths = with pkgs; [ yosys nextpnr trellis ];
|
|
}
|
|
""",
|
|
build_file_content = """
|
|
load("@qfc//build:utils.bzl", "external_binary_tool")
|
|
load("@qfc//build/synthesis:rules.bzl", "yosysflow_toolchain")
|
|
|
|
external_binary_tool(
|
|
name = "yosys",
|
|
bin = "bin/yosys",
|
|
deps = glob([
|
|
"bin/yosys-*",
|
|
"share/yosys/**",
|
|
]),
|
|
)
|
|
|
|
external_binary_tool(
|
|
name = "nextpnr_ecp5",
|
|
bin = "bin/nextpnr-ecp5",
|
|
deps = [],
|
|
)
|
|
|
|
external_binary_tool(
|
|
name = "ecppack",
|
|
bin = "bin/ecppack",
|
|
deps = [],
|
|
)
|
|
|
|
yosysflow_toolchain(
|
|
name = "yosysflow_nixpkgs_ecp5",
|
|
yosys = ":yosys",
|
|
nextpnr = ":nextpnr_ecp5",
|
|
packer = ":ecppack",
|
|
)
|
|
|
|
toolchain(
|
|
name = "yosysflow_nixpkgs_ecp5_toolchain",
|
|
exec_compatible_with = [
|
|
"@platforms//os:linux",
|
|
],
|
|
target_compatible_with = [
|
|
"@qfc//build/platforms:ecp5",
|
|
],
|
|
toolchain = ":yosysflow_nixpkgs_ecp5",
|
|
toolchain_type = "@qfc//build/synthesis:toolchain_type",
|
|
)
|
|
|
|
""",
|
|
)
|
|
|
|
register_toolchains(
|
|
"@bluespec//:bsc_nixpkgs_toolchain",
|
|
"@yosysflow//:yosysflow_nixpkgs_ecp5_toolchain",
|
|
)
|