Closed charlesoconor closed 1 year ago
Thanks, this can stay as a reference if someone wants to use/build upon it. I have no intention of supporting other build systems besides the official Go one. I do not use it, don't know what gazelle is, etc. As far as I remember in the past Bazel didn't even recognize build tags and was trying to build all files at once.
@charlesoconor thanks for the detailed explanation. For anyone also needing this, another approach is to create a .patch
file like that:
--- BUILD.bazel 2024-03-05 21:13:20
+++ BUILD.bazel 2024-03-05 21:13:13
@@ -1,5 +1,73 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
+
+cc_library(
+ name = "mupdf",
+ srcs = select({
+ "@io_bazel_rules_go//go/platform:android_386": [
+ "libs/libmupdf_linux_386.a",
+ "libs/libmupdfthird_linux_386.a",
+ ],
+ "@io_bazel_rules_go//go/platform:android_amd64": [
+ "libs/libmupdf_linux_amd64.a",
+ "libs/libmupdfthird_linux_amd64.a",
+ ],
+ "@io_bazel_rules_go//go/platform:android_arm": [
+ "libs/libmupdf_android_arm.a",
+ "libs/libmupdfthird_android_arm.a",
+ ],
+ "@io_bazel_rules_go//go/platform:android_arm64": [
+ "libs/libmupdf_android_arm64.a",
+ "libs/libmupdfthird_android_arm64.a",
+ ],
+ "@io_bazel_rules_go//go/platform:darwin_amd64": [
+ "libs/libmupdf_darwin_amd64.a",
+ "libs/libmupdfthird_darwin_amd64.a",
+ ],
+ "@io_bazel_rules_go//go/platform:darwin_arm64": [
+ "libs/libmupdf_darwin_arm64.a",
+ "libs/libmupdfthird_darwin_arm64.a",
+ ],
+ "@io_bazel_rules_go//go/platform:ios_amd64": [
+ "libs/libmupdf_darwin_amd64.a",
+ "libs/libmupdfthird_darwin_amd64.a",
+ ],
+ "@io_bazel_rules_go//go/platform:ios_arm64": [
+ "libs/libmupdf_darwin_arm64.a",
+ "libs/libmupdfthird_darwin_arm64.a",
+ ],
+ "@io_bazel_rules_go//go/platform:linux_386": [
+ "libs/libmupdf_linux_386.a",
+ "libs/libmupdfthird_linux_386.a",
+ ],
+ "@io_bazel_rules_go//go/platform:linux_amd64": [
+ "libs/libmupdf_linux_amd64.a",
+ "libs/libmupdfthird_linux_amd64.a",
+ ],
+ "@io_bazel_rules_go//go/platform:linux_arm": [
+ "libs/libmupdf_linux_arm.a",
+ "libs/libmupdfthird_linux_arm.a",
+ ],
+ "@io_bazel_rules_go//go/platform:linux_arm64": [
+ "libs/libmupdf_linux_arm64.a",
+ "libs/libmupdfthird_linux_arm64.a",
+ ],
+ "@io_bazel_rules_go//go/platform:windows_386": [
+ "libs/libmupdf_windows_386.a",
+ "libs/libmupdfthird_windows_386.a",
+ ],
+ "@io_bazel_rules_go//go/platform:windows_amd64": [
+ "libs/libmupdf_windows_amd64.a",
+ "libs/libmupdfthird_windows_amd64.a",
+ ],
+ "//conditions:default": [],
+ }),
+ hdrs = glob(
+ ["include/**/*.h"],
+ allow_empty = False,
+ ),
+)
+
go_library(
name = "go-fitz",
srcs = [
@@ -7,53 +75,54 @@
"fitz_cgo.go",
"fitz_content_types.go",
],
+ cdeps = [":mupdf"],
cgo = True,
clinkopts = select({
"@io_bazel_rules_go//go/platform:android_386": [
- "-Llibs -lmupdf_linux_386 -lmupdfthird_linux_386 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_linux_386 -lmupdfthird_linux_386 -lm",
],
"@io_bazel_rules_go//go/platform:android_amd64": [
- "-Llibs -lmupdf_linux_amd64 -lmupdfthird_linux_amd64 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_linux_amd64 -lmupdfthird_linux_amd64 -lm",
],
"@io_bazel_rules_go//go/platform:android_arm": [
- "-Llibs -lmupdf_android_arm -lmupdfthird_android_arm -lm -llog",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_android_arm -lmupdfthird_android_arm -lm -llog",
],
"@io_bazel_rules_go//go/platform:android_arm64": [
- "-Llibs -lmupdf_android_arm64 -lmupdfthird_android_arm64 -lm -llog",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_android_arm64 -lmupdfthird_android_arm64 -lm -llog",
],
"@io_bazel_rules_go//go/platform:darwin_amd64": [
- "-Llibs -lmupdf_darwin_amd64 -lmupdfthird_darwin_amd64 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_darwin_amd64 -lmupdfthird_darwin_amd64 -lm",
],
"@io_bazel_rules_go//go/platform:darwin_arm64": [
- "-Llibs -lmupdf_darwin_arm64 -lmupdfthird_darwin_arm64 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_darwin_arm64 -lmupdfthird_darwin_arm64 -lm",
],
"@io_bazel_rules_go//go/platform:ios_amd64": [
- "-Llibs -lmupdf_darwin_amd64 -lmupdfthird_darwin_amd64 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_darwin_amd64 -lmupdfthird_darwin_amd64 -lm",
],
"@io_bazel_rules_go//go/platform:ios_arm64": [
- "-Llibs -lmupdf_darwin_arm64 -lmupdfthird_darwin_arm64 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_darwin_arm64 -lmupdfthird_darwin_arm64 -lm",
],
"@io_bazel_rules_go//go/platform:linux_386": [
- "-Llibs -lmupdf_linux_386 -lmupdfthird_linux_386 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_linux_386 -lmupdfthird_linux_386 -lm",
],
"@io_bazel_rules_go//go/platform:linux_amd64": [
- "-Llibs -lmupdf_linux_amd64 -lmupdfthird_linux_amd64 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_linux_amd64 -lmupdfthird_linux_amd64 -lm",
],
"@io_bazel_rules_go//go/platform:linux_arm": [
- "-Llibs -lmupdf_linux_arm -lmupdfthird_linux_arm -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_linux_arm -lmupdfthird_linux_arm -lm",
],
"@io_bazel_rules_go//go/platform:linux_arm64": [
- "-Llibs -lmupdf_linux_arm64 -lmupdfthird_linux_arm64 -lm",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_linux_arm64 -lmupdfthird_linux_arm64 -lm",
],
"@io_bazel_rules_go//go/platform:windows_386": [
- "-Llibs -lmupdf_windows_386 -lmupdfthird_windows_386 -lm -lcomdlg32 -lgdi32 -lmsvcr90 -Wl,--allow-multiple-definition",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_windows_386 -lmupdfthird_windows_386 -lm -lcomdlg32 -lgdi32 -lmsvcr90 -Wl,--allow-multiple-definition",
],
"@io_bazel_rules_go//go/platform:windows_amd64": [
- "-Llibs -lmupdf_windows_amd64 -lmupdfthird_windows_amd64 -lm -lcomdlg32 -lgdi32 -Wl,--allow-multiple-definition",
+ "-Lexternal/com_github_gen2brain_go_fitz/libs -lmupdf_windows_amd64 -lmupdfthird_windows_amd64 -lm -lcomdlg32 -lgdi32 -Wl,--allow-multiple-definition",
],
"//conditions:default": [],
}),
- copts = ["-Iinclude"],
+ copts = ["-Iexternal/com_github_gen2brain_go_fitz/include"],
importpath = "github.com/gen2brain/go-fitz",
visibility = ["//visibility:public"],
)
And add this patch to go-fitz on deps.bzl
:
go_repository(
name = "com_github_gen2brain_go_fitz",
importpath = "github.com/gen2brain/go-fitz",
patches = [
"//third_party/com_github_gen2brain_go_fitz:root_BUILD_bazel.patch",
],
sum = "h1:HPhzEVzmOINvCKqQgB/DwMzYh4ArIgy3tMwq1eJTcbg=",
version = "v1.23.7",
)
I was having some trouble pulling this library into bazel and wanted to share what worked for me. Gazelle doesn't seem to pick up the artifact files correctly, so had to modify it to know about them. Only tested this on Linux and mac x86 but would assume it would build correctly for all of the platforms there are artifact files provided.
To get this hooked up into my repo. I used the
new_git_repository
rule and provided theBUILD.bazel
file in this PR to it inbuild_file_content
with some modifications. All of the paths needed in thecopts
andclink
attrs had to be prefixed withexternal/<workspace_name>
. Would like to figure out how to pull the header and artifact paths from Make files but ran into a lot of issues trying to figure it out and have at least a working solution. Would like to fix that if anyone has ideas.I know the repo probably doesn't want to use bazel as its build system but wanted a place to post this where people would find it.
https://github.com/gen2brain/go-fitz/issues/46 https://github.com/gen2brain/go-fitz/issues/31