diff --git a/.bazelignore b/.bazelignore new file mode 100644 index 000000000..9daeafb98 --- /dev/null +++ b/.bazelignore @@ -0,0 +1 @@ +test diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 000000000..5288881ad --- /dev/null +++ b/.bazelrc @@ -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 \ No newline at end of file diff --git a/.bazelversion b/.bazelversion new file mode 100644 index 000000000..f9da12e11 --- /dev/null +++ b/.bazelversion @@ -0,0 +1 @@ +6.3.2 \ No newline at end of file diff --git a/.github/workflows/bazel-release-archive.yml b/.github/workflows/bazel-release-archive.yml new file mode 100644 index 000000000..04d6fc7f2 --- /dev/null +++ b/.github/workflows/bazel-release-archive.yml @@ -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 }} diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml new file mode 100644 index 000000000..57151eaac --- /dev/null +++ b/.github/workflows/bazel.yml @@ -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 diff --git a/.gitignore b/.gitignore index 04e67fff0..0a0da5f26 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ cpp.hint # Bazel /bazel-* +/test/bazel-* +/user.bazelrc diff --git a/BUILD.bazel b/BUILD.bazel index e57c1d8b0..aafff391e 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -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", ) diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 000000000..e31290b83 --- /dev/null +++ b/MODULE.bazel @@ -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") diff --git a/README.md b/README.md index c4c136c10..84701447d 100644 --- a/README.md +++ b/README.md @@ -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.
+ 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 diff --git a/WORKSPACE b/WORKSPACE deleted file mode 100644 index 340fe8f5c..000000000 --- a/WORKSPACE +++ /dev/null @@ -1 +0,0 @@ -workspace(name = "com_github_skypjack_entt") diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel new file mode 100644 index 000000000..e69de29bb diff --git a/bazel/BUILD.bazel b/bazel/BUILD.bazel new file mode 100644 index 000000000..e69de29bb diff --git a/bazel/copts.bzl b/bazel/copts.bzl new file mode 100644 index 000000000..83f71ca83 --- /dev/null +++ b/bazel/copts.bzl @@ -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", + ], +}) diff --git a/src/BUILD.bazel b/src/BUILD.bazel new file mode 100644 index 000000000..8bfea09b1 --- /dev/null +++ b/src/BUILD.bazel @@ -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, +) diff --git a/test/.bazelrc b/test/.bazelrc new file mode 100644 index 000000000..8175ae7c2 --- /dev/null +++ b/test/.bazelrc @@ -0,0 +1 @@ +import "%workspace%/../.bazelrc" \ No newline at end of file diff --git a/test/BUILD.bazel b/test/BUILD.bazel new file mode 100644 index 000000000..e69de29bb diff --git a/test/MODULE.bazel b/test/MODULE.bazel new file mode 100644 index 000000000..21a054809 --- /dev/null +++ b/test/MODULE.bazel @@ -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 = "..", +) diff --git a/test/WORKSPACE.bazel b/test/WORKSPACE.bazel new file mode 100644 index 000000000..be0754f66 --- /dev/null +++ b/test/WORKSPACE.bazel @@ -0,0 +1 @@ +# SEE: MODULE.bazel diff --git a/test/entt/common/BUILD.bazel b/test/entt/common/BUILD.bazel new file mode 100644 index 000000000..4cb0a1425 --- /dev/null +++ b/test/entt/common/BUILD.bazel @@ -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"]), +) diff --git a/test/entt/entity/BUILD.bazel b/test/entt/entity/BUILD.bazel new file mode 100644 index 000000000..15e8f98e6 --- /dev/null +++ b/test/entt/entity/BUILD.bazel @@ -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] diff --git a/test/entt/meta/BUILD.bazel b/test/entt/meta/BUILD.bazel new file mode 100644 index 000000000..704865039 --- /dev/null +++ b/test/entt/meta/BUILD.bazel @@ -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]