Skip to content

Commit

Permalink
Bazel support: Add utf-8 to Windows build
Browse files Browse the repository at this point in the history
  • Loading branch information
Vertexwahn committed May 15, 2024
1 parent 8e72804 commit d1d8921
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 71 deletions.
2 changes: 1 addition & 1 deletion support/bazel/.bazelversion
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7.0.0
7.1.2
4 changes: 4 additions & 0 deletions support/bazel/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ cc_library(
hdrs = glob([
"include/fmt/*.h",
]),
copts = select({
"@platforms//os:windows": ["-utf-8"],
"//conditions:default": [],
}),
includes = [
"include",
],
Expand Down
71 changes: 2 additions & 69 deletions support/bazel/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ For instance, to use {fmt} add to your `MODULE.bazel` file:
bazel_dep(name = "fmt", version = "10.2.1")
```

### Live at head

For a live-at-head approach, you can copy the contents of this repository and move the Bazel-related build files to the root folder of this project as described above and make use of `local_path_override`, e.g.:

```
Expand All @@ -24,72 +26,3 @@ local_path_override(
path = "../third_party/fmt",
)
```

### WORKSPACE system

The following minimal example shows how to use {fmt} as a dependency within a Bazel project,
that uses the traditional, repository-focused WORKSPACE system.
Note that in the long term Bazel will only support Bzlmod.

The following file structure is assumed:

```
example
├── BUILD.bazel
├── main.cpp
└── WORKSPACE.bazel
```

*main.cpp*:

```c++
#include "fmt/core.h"

int main() {
fmt::print("The answer is {}\n", 42);
}
```

The expected output of this example is `The answer is 42`.

*WORKSPACE.bazel*:

```python
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")

git_repository(
name = "fmt",
branch = "master",
remote = "https://github.com/fmtlib/fmt",
patch_cmds = [
"mv support/bazel/.bazelversion .bazelversion",
"mv support/bazel/BUILD.bazel BUILD.bazel",
"mv support/bazel/WORKSPACE.bazel WORKSPACE.bazel",
],
# Windows-related patch commands are only needed in the case MSYS2 is not installed.
# More details about the installation process of MSYS2 on Windows systems can be found here:
# https://docs.bazel.build/versions/main/install-windows.html#installing-compilers-and-language-runtimes
# Even if MSYS2 is installed the Windows related patch commands can still be used.
patch_cmds_win = [
"Move-Item -Path support/bazel/.bazelversion -Destination .bazelversion",
"Move-Item -Path support/bazel/BUILD.bazel -Destination BUILD.bazel",
"Move-Item -Path support/bazel/WORKSPACE.bazel -Destination WORKSPACE.bazel",
],
)
```

In the *WORKSPACE* file, the {fmt} GitHub repository is fetched. Using the attribute `patch_cmds` the files `BUILD.bazel`, `WORKSPACE.bazel`, and `.bazelversion` are moved to the root of the {fmt} repository. This way the {fmt} repository is recognized as a bazelized workspace.

*BUILD.bazel*:

```python
cc_binary(
name = "Demo",
srcs = ["main.cpp"],
deps = ["@fmt"],
)
```

The *BUILD* file defines a binary named `Demo` that has a dependency to {fmt}.

To execute the binary you can run `bazel run //:Demo`.
3 changes: 2 additions & 1 deletion support/bazel/WORKSPACE.bazel
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
workspace(name = "fmt")
# WORKSPACE marker file needed by Bazel

0 comments on commit d1d8921

Please sign in to comment.