build system: add bzlmod support + tests (#1057)

This commit is contained in:
Ezekiel Warren
2023-09-13 23:48:17 -07:00
committed by GitHub
parent 7ec739b5c7
commit 01453b67fc
21 changed files with 196 additions and 12 deletions

1
.bazelignore Normal file
View File

@@ -0,0 +1 @@
test

17
.bazelrc Normal file
View File

@@ -0,0 +1,17 @@
common --enable_bzlmod
build --enable_platform_specific_config
build --incompatible_use_platforms_repo_for_constraints
build --incompatible_enable_cc_toolchain_resolution
build --enable_runfiles
build --incompatible_strict_action_env
# required for googletest
build:linux --cxxopt=-std=c++17
build:macos --cxxopt=-std=c++17
common:ci --announce_rc
common:ci --verbose_failures
common:ci --keep_going
test:ci --test_output=errors
try-import %workspace%/user.bazelrc

1
.bazelversion Normal file
View File

@@ -0,0 +1 @@
6.3.2

View File

@@ -0,0 +1,20 @@
name: Bazel Release
on:
release:
types: [published]
jobs:
# A release archive is required for bzlmod
# See: https://blog.bazel.build/2023/02/15/github-archive-checksum.html
bazel-release-archive:
runs-on: ubuntu-latest
continue-on-error: true
permissions:
contents: write
steps:
- uses: actions/checkout@v3
- run: git archive $GITHUB_REF -o "entt-${GITHUB_REF:10}.tar.gz"
- run: gh release upload ${GITHUB_REF:10} "entt-${GITHUB_REF:10}.tar.gz"
env:
GH_TOKEN: ${{ github.token }}

18
.github/workflows/bazel.yml vendored Normal file
View File

@@ -0,0 +1,18 @@
name: bazel
on: [push, pull_request]
jobs:
test:
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
continue-on-error: true
steps:
- uses: actions/checkout@v3
- run: bazelisk test --config=ci ...
working-directory: test

2
.gitignore vendored
View File

@@ -11,3 +11,5 @@ cpp.hint
# Bazel
/bazel-*
/test/bazel-*
/user.bazelrc

View File

@@ -1,14 +1,6 @@
_msvc_copts = ["/std:c++17"]
_gcc_copts = ["-std=c++17"]
package(default_visibility = ["//visibility:public"])
cc_library(
alias(
name = "entt",
visibility = ["//visibility:public"],
strip_include_prefix = "src",
hdrs = glob(["src/**/*.h", "src/**/*.hpp"]),
copts = select({
"@bazel_tools//src/conditions:windows": _msvc_copts,
"@bazel_tools//src/conditions:windows_msvc": _msvc_copts,
"//conditions:default": _gcc_copts,
}),
actual = "//src:entt",
)

8
MODULE.bazel Normal file
View File

@@ -0,0 +1,8 @@
module(
name = "entt",
version = "3.12.2",
compatibility_level = 3012,
)
bazel_dep(name = "rules_cc", version = "0.0.8")
bazel_dep(name = "bazel_skylib", version = "1.4.2")

View File

@@ -327,6 +327,18 @@ If you spot errors or have suggestions, any contribution is welcome!
[documentation](https://build2.org/build2-toolchain/doc/build2-toolchain-intro.xhtml#guide-repositories)
for more details.
* [`bzlmod`](https://bazel.build/external/overview#bzlmod), Bazel's external
dependency management system.<br/>
To use the [`entt`](https://registry.bazel.build/modules/entt) module in a
`bazel` project, add the following to your `MODULE.bazel` file:
```starlark
bazel_dep(name = "entt", version = "3.12.2")
```
EnTT will now be available as `@entt` (short for `@entt//:entt`) to be used
in your `cc_*` rule `deps`.
Consider this list a work in progress and help me to make it longer if you like.
## pkg-config

View File

@@ -1 +0,0 @@
workspace(name = "com_github_skypjack_entt")

0
WORKSPACE.bazel Normal file
View File

0
bazel/BUILD.bazel Normal file
View File

13
bazel/copts.bzl Normal file
View File

@@ -0,0 +1,13 @@
load("@bazel_skylib//lib:selects.bzl", "selects")
COPTS = selects.with_or({
("//conditions:default", "@rules_cc//cc/compiler:clang", "@rules_cc//cc/compiler:gcc", "@rules_cc//cc/compiler:mingw-gcc"): [
"-std=c++17",
"-w",
],
("@rules_cc//cc/compiler:msvc-cl", "@rules_cc//cc/compiler:clang-cl"): [
"/std:c++17",
"/permissive-",
"/w",
],
})

11
src/BUILD.bazel Normal file
View File

@@ -0,0 +1,11 @@
load("@bazel_skylib//lib:selects.bzl", "selects")
load("//bazel:copts.bzl", "COPTS")
package(default_visibility = ["//:__subpackages__"])
cc_library(
name = "entt",
includes = ["."],
hdrs = glob(["**/*.h", "**/*.hpp"]),
copts = COPTS,
)

1
test/.bazelrc Normal file
View File

@@ -0,0 +1 @@
import "%workspace%/../.bazelrc"

0
test/BUILD.bazel Normal file
View File

11
test/MODULE.bazel Normal file
View File

@@ -0,0 +1,11 @@
module(name = "entt_test")
bazel_dep(name = "rules_cc", version = "0.0.8")
bazel_dep(name = "bazel_skylib", version = "1.4.2")
bazel_dep(name = "googletest", version = "1.14.0")
bazel_dep(name = "entt")
local_path_override(
module_name = "entt",
path = "..",
)

1
test/WORKSPACE.bazel Normal file
View File

@@ -0,0 +1 @@
# SEE: MODULE.bazel

View File

@@ -0,0 +1,10 @@
load("@rules_cc//cc:defs.bzl", "cc_library")
load("@entt//bazel:copts.bzl", "COPTS")
package(default_visibility = ["//:__subpackages__"])
cc_library(
name = "common",
copts = COPTS,
hdrs = glob(["*.h", "*.hpp"]),
)

View File

@@ -0,0 +1,33 @@
load("@rules_cc//cc:defs.bzl", "cc_test")
load("@entt//bazel:copts.bzl", "COPTS")
# buildifier: keep sorted
_TESTS = [
"component",
"entity",
"group",
"handle",
"helper",
"observer",
"organizer",
"registry",
"runtime_view",
"sigh_mixin",
"snapshot",
"sparse_set",
"storage",
"storage_entity",
"view",
]
[cc_test(
name = test,
srcs = ["{}.cpp".format(test)],
copts = COPTS,
deps = [
"//entt/common",
"@entt",
"@googletest//:gtest",
"@googletest//:gtest_main",
],
) for test in _TESTS]

View File

@@ -0,0 +1,34 @@
load("@rules_cc//cc:defs.bzl", "cc_test")
load("@entt//bazel:copts.bzl", "COPTS")
# buildifier: keep sorted
_TESTS = [
"meta_any",
"meta_base",
"meta_container",
"meta_context",
"meta_conv",
"meta_ctor",
"meta_data",
"meta_dtor",
"meta_func",
"meta_handle",
"meta_pointer",
"meta_prop",
"meta_range",
"meta_template",
"meta_type",
"meta_utility",
]
[cc_test(
name = test,
srcs = ["{}.cpp".format(test)],
copts = COPTS,
deps = [
"//entt/common",
"@entt",
"@googletest//:gtest",
"@googletest//:gtest_main",
],
) for test in _TESTS]