diff --git a/modules/nextpnr/0.9/MODULE.bazel b/modules/nextpnr/0.9/MODULE.bazel new file mode 100644 index 00000000000..3d5e447dd88 --- /dev/null +++ b/modules/nextpnr/0.9/MODULE.bazel @@ -0,0 +1,21 @@ +"""https://github.com/YosysHQ/nextpnr""" + +module( + name = "nextpnr", + version = "0.9", + bazel_compatibility = [">=7.2.1"], +) + +bazel_dep(name = "bazel_skylib", version = "1.8.2") +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "rules_cc", version = "0.2.4") +bazel_dep(name = "rules_python", version = "1.5.1") +bazel_dep(name = "rules_rust", version = "0.67.0") +bazel_dep(name = "eigen", version = "3.4.1") +bazel_dep(name = "prjtrellis", version = "1.4") +bazel_dep(name = "boost.filesystem", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.iostreams", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.program_options", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.system", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.thread", version = "1.88.0.bcr.2") +bazel_dep(name = "pybind11_bazel", version = "3.0.0") diff --git a/modules/nextpnr/0.9/overlay/BUILD.bazel b/modules/nextpnr/0.9/overlay/BUILD.bazel new file mode 100644 index 00000000000..c347add33d2 --- /dev/null +++ b/modules/nextpnr/0.9/overlay/BUILD.bazel @@ -0,0 +1,492 @@ +load("@bazel_skylib//rules:expand_template.bzl", "expand_template") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") + +# Generate version header +expand_template( + name = "gen_version", + out = "common/version.h", + substitutions = { + "@CURRENT_GIT_VERSION@": "nextpnr-bazel-0.9", + }, + template = "common/version.h.in", +) + +# Third-party: json11 +cc_library( + name = "json11", + srcs = ["3rdparty/json11/json11.cpp"], + hdrs = ["3rdparty/json11/json11.hpp"], + includes = ["3rdparty/json11"], +) + +# Third-party: pybind11 (header-only library) +cc_library( + name = "pybind11", + hdrs = glob(["3rdparty/pybind11/include/**/*.h"]), + includes = ["3rdparty/pybind11/include"], + deps = ["@rules_python//python/cc:current_py_cc_headers"], +) + +# Third-party: oourafft (needs namespace headers from kernel) +cc_library( + name = "oourafft", + srcs = [ + "3rdparty/oourafft/fftsg.cc", + "3rdparty/oourafft/fftsg2d.cc", + ], + hdrs = [ + "3rdparty/oourafft/fftsg.h", + "common/kernel/nextpnr_namespaces.h", + ], + includes = [ + "3rdparty/oourafft", + "common/kernel", + ], +) + +# Common: version +cc_library( + name = "nextpnr_version", + hdrs = [":gen_version"], + includes = ["common"], +) + +# Rust stubs (NO_RUST) +cc_library( + name = "nextpnr_rust", + hdrs = ["rust/rust.h"], + defines = ["NO_RUST"], + includes = ["rust"], +) + +# Frontend (header-only, compiled by architecture targets) +cc_library( + name = "nextpnr_frontend", + hdrs = [ + "frontend/frontend_base.h", + "frontend/json_frontend.h", + ], + includes = ["frontend"], + textual_hdrs = [ + "frontend/json_frontend.cc", + ], + deps = [":json11"], +) + +# JSON (header-only, compiled by architecture targets) +cc_library( + name = "nextpnr_json", + hdrs = [ + "json/jsonwrite.h", + ], + includes = ["json"], + textual_hdrs = [ + "json/jsonwrite.cc", + ], +) + +# Route (header-only, compiled by architecture targets) +cc_library( + name = "nextpnr_route", + hdrs = [ + "common/route/router1.h", + "common/route/router2.h", + ], + includes = ["common/route"], + textual_hdrs = [ + "common/route/router1.cc", + "common/route/router2.cc", + ], +) + +# Place (header-only, compiled by architecture targets) +cc_library( + name = "nextpnr_place", + hdrs = [ + "common/place/detail_place_cfg.h", + "common/place/detail_place_core.h", + "common/place/fast_bels.h", + "common/place/parallel_refine.h", + "common/place/place_common.h", + "common/place/placer1.h", + "common/place/placer_heap.h", + "common/place/placer_static.h", + "common/place/static_util.h", + "common/place/timing_opt.h", + ], + includes = ["common/place"], + textual_hdrs = [ + "common/place/detail_place_core.cc", + "common/place/parallel_refine.cc", + "common/place/place_common.cc", + "common/place/placer1.cc", + "common/place/placer_heap.cc", + "common/place/placer_static.cc", + "common/place/timing_opt.cc", + ], +) + +# Kernel headers (to avoid circular dependencies) +cc_library( + name = "nextpnr_kernel_headers", + hdrs = [ + "common/kernel/arch_api.h", + "common/kernel/arch_pybindings_shared.h", + "common/kernel/array2d.h", + "common/kernel/base_arch.h", + "common/kernel/base_clusterinfo.h", + "common/kernel/basectx.h", + "common/kernel/bits.h", + "common/kernel/chain_utils.h", + "common/kernel/command.h", + "common/kernel/constraints.h", + "common/kernel/constraints.impl.h", + "common/kernel/context.h", + "common/kernel/design_utils.h", + "common/kernel/deterministic_rng.h", + "common/kernel/dynamic_bitarray.h", + "common/kernel/embed.h", + "common/kernel/exclusive_state_groups.h", + "common/kernel/exclusive_state_groups.impl.h", + "common/kernel/hashlib.h", + "common/kernel/idstring.h", + "common/kernel/idstringlist.h", + "common/kernel/indexed_store.h", + "common/kernel/log.h", + "common/kernel/nextpnr.h", + "common/kernel/nextpnr_assertions.h", + "common/kernel/nextpnr_base_types.h", + "common/kernel/nextpnr_namespaces.h", + "common/kernel/nextpnr_types.h", + "common/kernel/property.h", + "common/kernel/pybindings.h", + "common/kernel/pycontainers.h", + "common/kernel/pywrappers.h", + "common/kernel/relptr.h", + "common/kernel/scope_lock.h", + "common/kernel/sso_array.h", + "common/kernel/str_ring_buffer.h", + "common/kernel/timing.h", + "common/kernel/util.h", + ], + includes = ["common/kernel"], + deps = [ + ":pybind11", + "@boost.filesystem//:boost.filesystem", + "@boost.iostreams//:boost.iostreams", + "@boost.program_options//:boost.program_options", + "@boost.system//:boost.system", + "@boost.thread//:boost.thread", + "@eigen", + "@rules_python//python/cc:current_py_cc_headers", + ], +) + +# Kernel (core - header-only, compiled by architecture targets) +cc_library( + name = "nextpnr_kernel", + textual_hdrs = [ + "common/kernel/archcheck.cc", + "common/kernel/basectx.cc", + "common/kernel/bits.cc", + "common/kernel/command.cc", + "common/kernel/context.cc", + "common/kernel/design_utils.cc", + "common/kernel/embed.cc", + "common/kernel/handle_error.cc", + "common/kernel/idstring.cc", + "common/kernel/idstringlist.cc", + "common/kernel/log.cc", + "common/kernel/nextpnr.cc", + "common/kernel/nextpnr_assertions.cc", + "common/kernel/nextpnr_namespaces.cc", + "common/kernel/nextpnr_types.cc", + "common/kernel/property.cc", + "common/kernel/pybindings.cc", + "common/kernel/report.cc", + "common/kernel/sdc.cc", + "common/kernel/sdf.cc", + "common/kernel/str_ring_buffer.cc", + "common/kernel/svg.cc", + "common/kernel/timing.cc", + "common/kernel/timing_log.cc", + ], + deps = [ + ":json11", + ":nextpnr_frontend", + ":nextpnr_json", + ":nextpnr_kernel_headers", + ":nextpnr_rust", + ":nextpnr_version", + ], +) + +# Generic architecture - defs +cc_library( + name = "nextpnr-generic-defs", + hdrs = [ + "generic/arch.h", + "generic/archdefs.h", + ], + defines = [ + "ARCHNAME=generic", + "ARCH_GENERIC", + "NEXTPNR_NAMESPACE=nextpnr_generic", + "NO_GUI", + ], + includes = [ + "common/kernel", + "generic", + ], +) + +# Generic architecture - core +cc_library( + name = "nextpnr-generic-core", + srcs = [ + # Generic arch sources + "generic/arch.cc", + "generic/arch_pybindings.cc", + "generic/cells.cc", + "generic/chipdb.cc", + "generic/pack.cc", + "generic/viaduct/example/example.cc", + "generic/viaduct/fabulous/fabulous.cc", + "generic/viaduct/fabulous/fasm.cc", + "generic/viaduct/fabulous/pack.cc", + "generic/viaduct/fabulous/validity_check.cc", + "generic/viaduct_api.cc", + "generic/viaduct_helpers.cc", + # Common kernel sources + "common/kernel/archcheck.cc", + "common/kernel/basectx.cc", + "common/kernel/bits.cc", + "common/kernel/command.cc", + "common/kernel/context.cc", + "common/kernel/design_utils.cc", + "common/kernel/embed.cc", + "common/kernel/handle_error.cc", + "common/kernel/idstring.cc", + "common/kernel/idstringlist.cc", + "common/kernel/log.cc", + "common/kernel/nextpnr.cc", + "common/kernel/nextpnr_assertions.cc", + "common/kernel/nextpnr_namespaces.cc", + "common/kernel/nextpnr_types.cc", + "common/kernel/property.cc", + "common/kernel/pybindings.cc", + "common/kernel/report.cc", + "common/kernel/sdc.cc", + "common/kernel/sdf.cc", + "common/kernel/str_ring_buffer.cc", + "common/kernel/svg.cc", + "common/kernel/timing.cc", + "common/kernel/timing_log.cc", + # Common place sources + "common/place/detail_place_core.cc", + "common/place/parallel_refine.cc", + "common/place/place_common.cc", + "common/place/placer1.cc", + "common/place/placer_heap.cc", + "common/place/placer_static.cc", + "common/place/timing_opt.cc", + # Common route sources + "common/route/router1.cc", + "common/route/router2.cc", + # Frontend sources + "frontend/json_frontend.cc", + # JSON sources + "json/jsonwrite.cc", + # FFT sources + "3rdparty/oourafft/fftsg.cc", + "3rdparty/oourafft/fftsg2d.cc", + ], + hdrs = [ + "generic/arch_pybindings.h", + "generic/cells.h", + "generic/viaduct/example/constids.inc", + "generic/viaduct/fabulous/constids.inc", + "generic/viaduct/fabulous/fab_cfg.h", + "generic/viaduct/fabulous/fab_defs.h", + "generic/viaduct/fabulous/fabric_parsing.h", + "generic/viaduct/fabulous/fasm.h", + "generic/viaduct/fabulous/pack.h", + "generic/viaduct/fabulous/validity_check.h", + "generic/viaduct_api.h", + "generic/viaduct_constids.h", + "generic/viaduct_helpers.h", + ], + deps = [ + ":nextpnr-generic-defs", + ":nextpnr_frontend", + ":nextpnr_json", + ":nextpnr_kernel", + ":nextpnr_kernel_headers", + ":nextpnr_place", + ":nextpnr_route", + ":oourafft", + "@boost.filesystem//:boost.filesystem", + "@boost.iostreams//:boost.iostreams", + "@boost.program_options//:boost.program_options", + "@boost.system//:boost.system", + "@boost.thread//:boost.thread", + "@eigen", + "@rules_python//python/cc:current_py_cc_libs", + ], +) + +# Generic architecture - binary +cc_binary( + name = "nextpnr-generic", + srcs = ["generic/main.cc"], + visibility = ["//visibility:public"], + deps = [ + ":nextpnr-generic-core", + ], +) + +################################################################################ +# ECP5 Architecture +################################################################################ + +# ECP5 architecture - defs +cc_library( + name = "nextpnr-ecp5-defs", + hdrs = [ + "ecp5/arch.h", + "ecp5/archdefs.h", + ], + defines = [ + "ARCHNAME=ecp5", + "ARCH_ECP5", + "NEXTPNR_NAMESPACE=nextpnr_ecp5", + "NO_GUI", + ], + includes = [ + "common/kernel", + "ecp5", + ], +) + +# ECP5 architecture - core +cc_library( + name = "nextpnr-ecp5-core", + srcs = [ + # ECP5 arch sources + "ecp5/arch.cc", + "ecp5/arch_place.cc", + "ecp5/arch_pybindings.cc", + "ecp5/baseconfigs.cc", + "ecp5/bitstream.cc", + "ecp5/cells.cc", + "ecp5/config.cc", + "ecp5/gfx.cc", + "ecp5/globals.cc", + "ecp5/lpf.cc", + "ecp5/pack.cc", + "ecp5/pio.cc", + # Common kernel sources + "common/kernel/archcheck.cc", + "common/kernel/basectx.cc", + "common/kernel/bits.cc", + "common/kernel/command.cc", + "common/kernel/context.cc", + "common/kernel/design_utils.cc", + "common/kernel/embed.cc", + "common/kernel/handle_error.cc", + "common/kernel/idstring.cc", + "common/kernel/idstringlist.cc", + "common/kernel/log.cc", + "common/kernel/nextpnr.cc", + "common/kernel/nextpnr_assertions.cc", + "common/kernel/nextpnr_namespaces.cc", + "common/kernel/nextpnr_types.cc", + "common/kernel/property.cc", + "common/kernel/pybindings.cc", + "common/kernel/report.cc", + "common/kernel/sdc.cc", + "common/kernel/sdf.cc", + "common/kernel/str_ring_buffer.cc", + "common/kernel/svg.cc", + "common/kernel/timing.cc", + "common/kernel/timing_log.cc", + # Common place sources + "common/place/detail_place_core.cc", + "common/place/parallel_refine.cc", + "common/place/place_common.cc", + "common/place/placer1.cc", + "common/place/placer_heap.cc", + "common/place/placer_static.cc", + "common/place/timing_opt.cc", + # Common route sources + "common/route/router1.cc", + "common/route/router2.cc", + # Frontend sources + "frontend/json_frontend.cc", + # JSON sources + "json/jsonwrite.cc", + # FFT sources + "3rdparty/oourafft/fftsg.cc", + "3rdparty/oourafft/fftsg2d.cc", + ], + hdrs = [ + "ecp5/arch_pybindings.h", + "ecp5/bitstream.h", + "ecp5/cells.h", + "ecp5/config.h", + "ecp5/constids.inc", + "ecp5/dcu_bitstream.h", + "ecp5/gfx.h", + "ecp5/globals.h", + "ecp5/iotypes.inc", + "ecp5/pio.h", + ], + deps = [ + ":nextpnr-ecp5-defs", + ":nextpnr_frontend", + ":nextpnr_json", + ":nextpnr_kernel", + ":nextpnr_kernel_headers", + ":nextpnr_place", + ":nextpnr_route", + ":oourafft", + "@boost.filesystem//:boost.filesystem", + "@boost.iostreams//:boost.iostreams", + "@boost.program_options//:boost.program_options", + "@boost.system//:boost.system", + "@boost.thread//:boost.thread", + "@eigen", + "@prjtrellis//:trellis", + "@rules_python//python/cc:current_py_cc_libs", + ], +) + +# ECP5 architecture - binary +cc_binary( + name = "nextpnr-ecp5", + srcs = ["ecp5/main.cc"], + visibility = ["//visibility:public"], + deps = [ + ":nextpnr-ecp5-core", + ], +) + +# Aliases + +alias( + name = "nextpnr", + actual = "nextpnr-generic", + visibility = ["//visibility:public"], +) + +alias( + name = "generic", + actual = "nextpnr-generic", + visibility = ["//visibility:public"], +) + +alias( + name = "ecp5", + actual = "nextpnr-ecp5", + visibility = ["//visibility:public"], +) diff --git a/modules/nextpnr/0.9/overlay/MODULE.bazel b/modules/nextpnr/0.9/overlay/MODULE.bazel new file mode 100644 index 00000000000..3d5e447dd88 --- /dev/null +++ b/modules/nextpnr/0.9/overlay/MODULE.bazel @@ -0,0 +1,21 @@ +"""https://github.com/YosysHQ/nextpnr""" + +module( + name = "nextpnr", + version = "0.9", + bazel_compatibility = [">=7.2.1"], +) + +bazel_dep(name = "bazel_skylib", version = "1.8.2") +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "rules_cc", version = "0.2.4") +bazel_dep(name = "rules_python", version = "1.5.1") +bazel_dep(name = "rules_rust", version = "0.67.0") +bazel_dep(name = "eigen", version = "3.4.1") +bazel_dep(name = "prjtrellis", version = "1.4") +bazel_dep(name = "boost.filesystem", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.iostreams", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.program_options", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.system", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.thread", version = "1.88.0.bcr.2") +bazel_dep(name = "pybind11_bazel", version = "3.0.0") diff --git a/modules/nextpnr/0.9/presubmit.yml b/modules/nextpnr/0.9/presubmit.yml new file mode 100644 index 00000000000..882cf0ee496 --- /dev/null +++ b/modules/nextpnr/0.9/presubmit.yml @@ -0,0 +1,12 @@ +bcr_test_module: + module_path: "" + matrix: + platform: ["ubuntu2004", "ubuntu2004_arm64", "macos_arm64"] + bazel: ["7.x", "8.x"] + tasks: + verify_targets: + name: "Run test module" + platform: ${{ platform }} + bazel: ${{ bazel }} + build_targets: + - "//..." diff --git a/modules/nextpnr/0.9/source.json b/modules/nextpnr/0.9/source.json new file mode 100644 index 00000000000..85f996b0f66 --- /dev/null +++ b/modules/nextpnr/0.9/source.json @@ -0,0 +1,9 @@ +{ + "url": "https://github.com/YosysHQ/nextpnr/archive/refs/tags/nextpnr-0.9.tar.gz", + "strip_prefix": "nextpnr-nextpnr-0.9", + "integrity": "sha256-jOvGUEn/kcQR2WPqIwSxo91CA2953i6z6YNMhC+TRJU=", + "overlay": { + "BUILD.bazel": "sha256-APUKo+FIWq1EUZDawQLnw0yqKHNnQfN0/gtqwozNaos=", + "MODULE.bazel": "sha256-jTrnl2ef5rn5XNEXHchk+Ide7Ep0c3zQY0kI8H85W1Q=" + } +} diff --git a/modules/nextpnr/metadata.json b/modules/nextpnr/metadata.json new file mode 100644 index 00000000000..5c6457cf720 --- /dev/null +++ b/modules/nextpnr/metadata.json @@ -0,0 +1,18 @@ +{ + "homepage": "https://github.com/YosysHQ/nextpnr", + "maintainers": [ + { + "email": "26427366+UebelAndre@users.noreply.github.com", + "github": "UebelAndre", + "github_user_id": 26427366, + "name": "UebelAndre" + } + ], + "repository": [ + "github:YosysHQ/nextpnr" + ], + "versions": [ + "0.9" + ], + "yanked_versions": {} +} diff --git a/modules/prjtrellis-db/1.4/MODULE.bazel b/modules/prjtrellis-db/1.4/MODULE.bazel new file mode 100644 index 00000000000..7a32030436f --- /dev/null +++ b/modules/prjtrellis-db/1.4/MODULE.bazel @@ -0,0 +1,9 @@ +"""https://github.com/YosysHQ/prjtrellis-db""" + +module( + name = "prjtrellis-db", + version = "1.4", + bazel_compatibility = [">=7.2.1"], +) + +bazel_dep(name = "prjtrellis", version = "1.4") diff --git a/modules/prjtrellis-db/1.4/overlay/BUILD.bazel b/modules/prjtrellis-db/1.4/overlay/BUILD.bazel new file mode 100644 index 00000000000..1081ce239de --- /dev/null +++ b/modules/prjtrellis-db/1.4/overlay/BUILD.bazel @@ -0,0 +1,20 @@ +package(default_visibility = ["//visibility:public"]) + +SRCS = glob( + include = ["**/*"], + exclude = [ + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + "REPO", + "**/*.bazel", + ], +) + +exports_files(SRCS) + +filegroup( + name = "prjtrellis-db", + srcs = SRCS, +) diff --git a/modules/prjtrellis-db/1.4/overlay/MODULE.bazel b/modules/prjtrellis-db/1.4/overlay/MODULE.bazel new file mode 100644 index 00000000000..7a32030436f --- /dev/null +++ b/modules/prjtrellis-db/1.4/overlay/MODULE.bazel @@ -0,0 +1,9 @@ +"""https://github.com/YosysHQ/prjtrellis-db""" + +module( + name = "prjtrellis-db", + version = "1.4", + bazel_compatibility = [">=7.2.1"], +) + +bazel_dep(name = "prjtrellis", version = "1.4") diff --git a/modules/prjtrellis-db/1.4/presubmit.yml b/modules/prjtrellis-db/1.4/presubmit.yml new file mode 100644 index 00000000000..882cf0ee496 --- /dev/null +++ b/modules/prjtrellis-db/1.4/presubmit.yml @@ -0,0 +1,12 @@ +bcr_test_module: + module_path: "" + matrix: + platform: ["ubuntu2004", "ubuntu2004_arm64", "macos_arm64"] + bazel: ["7.x", "8.x"] + tasks: + verify_targets: + name: "Run test module" + platform: ${{ platform }} + bazel: ${{ bazel }} + build_targets: + - "//..." diff --git a/modules/prjtrellis-db/1.4/source.json b/modules/prjtrellis-db/1.4/source.json new file mode 100644 index 00000000000..8442c432bda --- /dev/null +++ b/modules/prjtrellis-db/1.4/source.json @@ -0,0 +1,8 @@ +{ + "url": "https://github.com/YosysHQ/prjtrellis/releases/download/1.4/prjtrellis-db-1.4.zip", + "integrity": "sha256-T4qKU0T4XGKPs7o4YkdgWMgLy4/7NgTFzKhP7eEf+fA=", + "overlay": { + "BUILD.bazel": "sha256-JW9uBC1UdaUEWo/7TQKgbfjgTJOI5B7VOx7xO8e5Lfo=", + "MODULE.bazel": "sha256-dhtBEPVpwHxmOUczPdd6Mb0L88b65XndR8DEPeyiAN0=" + } +} diff --git a/modules/prjtrellis-db/README.md b/modules/prjtrellis-db/README.md new file mode 100644 index 00000000000..1723dfbfdd9 --- /dev/null +++ b/modules/prjtrellis-db/README.md @@ -0,0 +1,6 @@ +# prjtrellis-db + +All versions should be paried with a `prjtrellis` release. Meaning `repository` in `metadata.json` +should only ever include `github:YosysHQ/prjtrellis`. + +Versions should be gauranteed by a circular dependency between `prjtrellis-db <--> prjtrellis`. diff --git a/modules/prjtrellis-db/metadata.json b/modules/prjtrellis-db/metadata.json new file mode 100644 index 00000000000..865a56de5c5 --- /dev/null +++ b/modules/prjtrellis-db/metadata.json @@ -0,0 +1,18 @@ +{ + "homepage": "https://github.com/YosysHQ/prjtrellis-db", + "maintainers": [ + { + "email": "26427366+UebelAndre@users.noreply.github.com", + "github": "UebelAndre", + "github_user_id": 26427366, + "name": "UebelAndre" + } + ], + "repository": [ + "github:YosysHQ/prjtrellis" + ], + "versions": [ + "1.4" + ], + "yanked_versions": {} +} diff --git a/modules/prjtrellis/1.4/MODULE.bazel b/modules/prjtrellis/1.4/MODULE.bazel new file mode 100644 index 00000000000..133c28aaf98 --- /dev/null +++ b/modules/prjtrellis/1.4/MODULE.bazel @@ -0,0 +1,23 @@ +"""https://github.com/YosysHQ/prjtrellis""" + +module( + name = "prjtrellis", + version = "1.4", + bazel_compatibility = [">=7.2.1"], +) + +bazel_dep(name = "bazel_skylib", version = "1.8.2") +bazel_dep(name = "boost.config", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.container_hash", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.dll", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.filesystem", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.interprocess", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.optional", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.program_options", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.property_tree", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.range", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.system", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.thread", version = "1.88.0.bcr.2") +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "prjtrellis-db", version = "1.4") +bazel_dep(name = "rules_cc", version = "0.2.4") diff --git a/modules/prjtrellis/1.4/overlay/BUILD.bazel b/modules/prjtrellis/1.4/overlay/BUILD.bazel new file mode 100644 index 00000000000..058eba2049d --- /dev/null +++ b/modules/prjtrellis/1.4/overlay/BUILD.bazel @@ -0,0 +1,156 @@ +load("@bazel_skylib//rules:expand_template.bzl", "expand_template") +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") + +alias( + name = "database", + actual = "@prjtrellis-db", + visibility = ["//visibility:public"], +) + +# Generate version.cpp from version.cpp.in using expand_template +expand_template( + name = "generate_version", + out = "libtrellis/generated/version.cpp", + substitutions = { + "@CURRENT_GIT_VERSION@": "BAZEL", + }, + template = "libtrellis/tools/version.cpp.in", +) + +CXXOPTS = [ + "-std=c++14", + "-Wall", + "-Wextra", +] + +DEFINES = [ + "TRELLIS_RPATH_DATADIR=\\\"share\\\"", + "TRELLIS_PREFIX=\\\"/usr/local\\\"", + "TRELLIS_PROGRAM_PREFIX=\\\"\\\"", +] + +INCLUDES = [ + "libtrellis/include", + "libtrellis/tools", + "libtrellis/generated", +] + +# Main libtrellis library +cc_library( + name = "trellis", + srcs = glob( + [ + "libtrellis/src/*.cpp", + ], + exclude = [ + "libtrellis/src/PyTrellis.cpp", # Python bindings excluded for now + ], + ), + hdrs = glob([ + "libtrellis/include/*.hpp", + "libtrellis/include/*.h", + ]), + cxxopts = CXXOPTS, + includes = [ + "libtrellis/include", + ], + visibility = ["//visibility:public"], + deps = [ + "@boost.dll", + "@boost.filesystem", + "@boost.program_options", + "@boost.property_tree", + "@boost.system", + "@boost.thread", + ], +) + +# ecpbram tool +cc_binary( + name = "ecpbram", + srcs = [ + "libtrellis/tools/ecpbram.cpp", + "libtrellis/tools/version.hpp", + "libtrellis/tools/wasmexcept.hpp", + ":generate_version", + ], + cxxopts = CXXOPTS, + defines = DEFINES, + includes = INCLUDES, + visibility = ["//visibility:public"], + deps = [ + ":trellis", + ], +) + +# ecppack tool +cc_binary( + name = "ecppack", + srcs = [ + "libtrellis/tools/ecppack.cpp", + "libtrellis/tools/version.hpp", + "libtrellis/tools/wasmexcept.hpp", + ":generate_version", + ], + cxxopts = CXXOPTS, + defines = DEFINES, + includes = INCLUDES, + visibility = ["//visibility:public"], + deps = [ + ":trellis", + ], +) + +# ecpunpack tool +cc_binary( + name = "ecpunpack", + srcs = [ + "libtrellis/tools/ecpunpack.cpp", + "libtrellis/tools/version.hpp", + "libtrellis/tools/wasmexcept.hpp", + ":generate_version", + ], + cxxopts = CXXOPTS, + defines = DEFINES, + includes = INCLUDES, + visibility = ["//visibility:public"], + deps = [ + ":trellis", + ], +) + +# ecppll tool +cc_binary( + name = "ecppll", + srcs = [ + "libtrellis/tools/ecppll.cpp", + "libtrellis/tools/version.hpp", + "libtrellis/tools/wasmexcept.hpp", + ":generate_version", + ], + cxxopts = CXXOPTS, + defines = DEFINES, + includes = INCLUDES, + visibility = ["//visibility:public"], + deps = [ + ":trellis", + ], +) + +# ecpmulti tool +cc_binary( + name = "ecpmulti", + srcs = [ + "libtrellis/tools/ecpmulti.cpp", + "libtrellis/tools/version.hpp", + "libtrellis/tools/wasmexcept.hpp", + ":generate_version", + ], + cxxopts = CXXOPTS, + defines = DEFINES, + includes = INCLUDES, + visibility = ["//visibility:public"], + deps = [ + ":trellis", + ], +) diff --git a/modules/prjtrellis/1.4/overlay/MODULE.bazel b/modules/prjtrellis/1.4/overlay/MODULE.bazel new file mode 100644 index 00000000000..133c28aaf98 --- /dev/null +++ b/modules/prjtrellis/1.4/overlay/MODULE.bazel @@ -0,0 +1,23 @@ +"""https://github.com/YosysHQ/prjtrellis""" + +module( + name = "prjtrellis", + version = "1.4", + bazel_compatibility = [">=7.2.1"], +) + +bazel_dep(name = "bazel_skylib", version = "1.8.2") +bazel_dep(name = "boost.config", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.container_hash", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.dll", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.filesystem", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.interprocess", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.optional", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.program_options", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.property_tree", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.range", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.system", version = "1.88.0.bcr.2") +bazel_dep(name = "boost.thread", version = "1.88.0.bcr.2") +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "prjtrellis-db", version = "1.4") +bazel_dep(name = "rules_cc", version = "0.2.4") diff --git a/modules/prjtrellis/1.4/presubmit.yml b/modules/prjtrellis/1.4/presubmit.yml new file mode 100644 index 00000000000..882cf0ee496 --- /dev/null +++ b/modules/prjtrellis/1.4/presubmit.yml @@ -0,0 +1,12 @@ +bcr_test_module: + module_path: "" + matrix: + platform: ["ubuntu2004", "ubuntu2004_arm64", "macos_arm64"] + bazel: ["7.x", "8.x"] + tasks: + verify_targets: + name: "Run test module" + platform: ${{ platform }} + bazel: ${{ bazel }} + build_targets: + - "//..." diff --git a/modules/prjtrellis/1.4/source.json b/modules/prjtrellis/1.4/source.json new file mode 100644 index 00000000000..f3e318eb202 --- /dev/null +++ b/modules/prjtrellis/1.4/source.json @@ -0,0 +1,9 @@ +{ + "url": "https://github.com/YosysHQ/prjtrellis/archive/refs/tags/1.4.tar.gz", + "strip_prefix": "prjtrellis-1.4", + "integrity": "sha256-Rv6dmGdpU+DMzx1jMnVdIXoIYeQg8aEtq/2nTYHMwUc=", + "overlay": { + "BUILD.bazel": "sha256-PR+E6yKtWz4/JxeXVjeKC7eEmRhbU3QZxAyGFp8l0Ow=", + "MODULE.bazel": "sha256-9JqH1obW+W2bZtmOXKPoF5hLBYb4NbovQCnN/oAVxis=" + } +} diff --git a/modules/prjtrellis/README.md b/modules/prjtrellis/README.md new file mode 100644 index 00000000000..00e1e4462ad --- /dev/null +++ b/modules/prjtrellis/README.md @@ -0,0 +1,6 @@ +# prjtrellis + +When adding new versions it's critical to ensure the `prjtrellis_db` module +is also updated to the matching version. + +Versions should be gauranteed by a circular dependency between `prjtrellis-db <--> prjtrellis`. diff --git a/modules/prjtrellis/metadata.json b/modules/prjtrellis/metadata.json new file mode 100644 index 00000000000..9db4da4891f --- /dev/null +++ b/modules/prjtrellis/metadata.json @@ -0,0 +1,18 @@ +{ + "homepage": "https://github.com/YosysHQ/prjtrellis", + "maintainers": [ + { + "email": "26427366+UebelAndre@users.noreply.github.com", + "github": "UebelAndre", + "github_user_id": 26427366, + "name": "UebelAndre" + } + ], + "repository": [ + "github:YosysHQ/prjtrellis" + ], + "versions": [ + "1.4" + ], + "yanked_versions": {} +}