From fce8fe2f874be9a2e44c839468a8835e3fd10f00 Mon Sep 17 00:00:00 2001 From: David Zero Date: Sat, 9 Dec 2023 23:12:43 -0500 Subject: [PATCH] ci: Add macos build --- .bazelrc | 4 ++++ .github/workflows/ci.yaml | 9 +++++++++ WORKSPACE | 6 +++--- gfx/BUILD | 4 ++++ net/BUILD | 4 ++++ os/BUILD | 8 ++++++++ third_party/ftxui.BUILD | 1 + third_party/icu.BUILD | 6 ++---- third_party/imgui-sfml.BUILD | 4 ++++ third_party/sfml.BUILD | 22 ++++++++++++++++++++++ third_party/spdlog.BUILD | 1 + third_party/unifex.BUILD | 7 +++++++ third_party/zlib.BUILD | 1 + type/BUILD | 1 + 14 files changed, 71 insertions(+), 7 deletions(-) diff --git a/.bazelrc b/.bazelrc index 9e4c0f91e..50a372e09 100644 --- a/.bazelrc +++ b/.bazelrc @@ -29,6 +29,10 @@ build:linux --features=layering_check build:linux --cxxopt='-std=c++2b' build:linux --cxxopt='-fno-rtti' +build:macos --features=layering_check +build:macos --cxxopt='-std=c++2b' +build:macos --cxxopt='-fno-rtti' + # Force DWARF-4 format for debug symbols for compatibility with valgrind. # See: https://bugs.kde.org/show_bug.cgi?id=452758 build:linux --copt='-gdwarf-4' diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 37bc84698..25160e097 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -166,6 +166,15 @@ jobs: echo "

Example

This is an example page.

" >example.html ./bazelisk run browser:tui file://$(pwd)/example.html + macos: + runs-on: macos-13 + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + # This build relies on an ICU pre-installed via homebrew. + - run: export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"; export PATH="/usr/local/opt/icu4c/bin:/usr/local/opt/icu4c/sbin:$PATH"; bazelisk build //... + - run: export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"; export PATH="/usr/local/opt/icu4c/bin:/usr/local/opt/icu4c/sbin:$PATH"; bazelisk test //... + windows-msvc: runs-on: windows-2022 timeout-minutes: 40 diff --git a/WORKSPACE b/WORKSPACE index 7a40338de..3cfd52b00 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -60,7 +60,7 @@ http_archive( http_archive( name = "bazel_clang_tidy", # Hack to have every .h-header treated as C++. - patch_cmds = ["""sed -i '47i \\ args.add("-xc++")' clang_tidy/clang_tidy.bzl"""], + patch_cmds = ["""sed -i'' -e '47i\\\n args.add("-xc++")' clang_tidy/clang_tidy.bzl"""], sha256 = "e2721c47f4215ac36ad1da55ebdb968a094125dbc397aa7733f067001600b2ee", strip_prefix = "bazel_clang_tidy-133d89a6069ce253a92d32a93fdb7db9ef100e9d", url = "https://github.com/erenon/bazel_clang_tidy/archive/133d89a6069ce253a92d32a93fdb7db9ef100e9d.tar.gz", @@ -82,7 +82,7 @@ http_archive( # boringssl//:ssl cheats and pulls in private includes from boringssl//:crypto. http_archive( name = "boringssl", # OpenSSL + ISC - patch_cmds = ["""sed -i '33i package(features=["-layering_check"])' BUILD"""], + patch_cmds = ["""sed -i'' -e '33i\\\npackage(features=["-layering_check"])' BUILD"""], sha256 = "6369980cd79b3847a17a8e078dce37688671911a6fadb1c84e27fb505d827511", strip_prefix = "boringssl-22b3ea0c113b544e4334377541cabe8d8038d0c7", url = "https://github.com/google/boringssl/archive/22b3ea0c113b544e4334377541cabe8d8038d0c7.tar.gz", @@ -187,7 +187,7 @@ http_archive( # in MSVC debug builds with "cannot seek string_view iterator after end". # See: https://github.com/SFML/SFML/issues/2113 patch_cmds = [ - "sed -i 's/if (begin + trailingBytes < end)/if (trailingBytes < std::distance(begin, end))/' include/SFML/System/Utf.inl", + "sed -i'' -e 's/if (begin + trailingBytes < end)/if (trailingBytes < std::distance(begin, end))/' include/SFML/System/Utf.inl", ], sha256 = "6124b5fe3d96e7f681f587e2d5b456cd0ec460393dfe46691f1933d6bde0640b", strip_prefix = "SFML-2.5.1", diff --git a/gfx/BUILD b/gfx/BUILD index a2d9c3dc4..3c43051c0 100644 --- a/gfx/BUILD +++ b/gfx/BUILD @@ -65,6 +65,10 @@ cc_library( # sfml leaks this into our code. "-Wno-implicit-fallthrough", ], + "@platforms//os:macos": [ + # sfml leaks this into our code. + "-Wno-implicit-fallthrough", + ], "//conditions:default": [], }), visibility = ["//visibility:public"], diff --git a/net/BUILD b/net/BUILD index 655a58edf..a35aa1edc 100644 --- a/net/BUILD +++ b/net/BUILD @@ -7,6 +7,10 @@ NET_COPTS = HASTUR_COPTS + select({ "-Wno-shadow", "-Wno-unknown-pragmas", ], + "@platforms//os:macos": [ + "-Wno-shadow", + "-Wno-unknown-pragmas", + ], "//conditions:default": [], }) diff --git a/os/BUILD b/os/BUILD index e74e060ba..441452745 100644 --- a/os/BUILD +++ b/os/BUILD @@ -8,11 +8,13 @@ cc_library( OS_DEPS = select({ "@platforms//os:linux": [], + "@platforms//os:macos": [], "@platforms//os:windows": [":windows_setup"], }) OS_LOCAL_DEFINES = select({ "@platforms//os:linux": [], + "@platforms//os:macos": [], "@platforms//os:windows": ["WIN32_LEAN_AND_MEAN"], }) @@ -20,12 +22,14 @@ cc_library( name = "memory", srcs = select({ "@platforms//os:linux": ["memory_linux.cpp"], + "@platforms//os:macos": ["memory_linux.cpp"], "@platforms//os:windows": ["memory_windows.cpp"], }), hdrs = ["memory.h"], copts = HASTUR_COPTS, linkopts = select({ "@platforms//os:linux": [], + "@platforms//os:macos": [], "@platforms//os:windows": [ "-DEFAULTLIB:Kernel32", ], @@ -50,12 +54,14 @@ cc_library( name = "system_info", srcs = select({ "@platforms//os:linux": ["system_info_linux.cpp"], + "@platforms//os:macos": ["system_info_linux.cpp"], "@platforms//os:windows": ["system_info_windows.cpp"], }), hdrs = ["system_info.h"], copts = HASTUR_COPTS, linkopts = select({ "@platforms//os:linux": [], + "@platforms//os:macos": [], "@platforms//os:windows": [ "-DEFAULTLIB:Shcore", "-DEFAULTLIB:User32", @@ -82,12 +88,14 @@ cc_library( name = "xdg", srcs = select({ "@platforms//os:linux": ["xdg_linux.cpp"], + "@platforms//os:macos": ["xdg_linux.cpp"], "@platforms//os:windows": ["xdg_windows.cpp"], }), hdrs = ["xdg.h"], copts = HASTUR_COPTS, linkopts = select({ "@platforms//os:linux": [], + "@platforms//os:macos": [], "@platforms//os:windows": [ "-DEFAULTLIB:Shell32", "-DEFAULTLIB:Kernel32", diff --git a/third_party/ftxui.BUILD b/third_party/ftxui.BUILD index 97e4ca815..0730d403e 100644 --- a/third_party/ftxui.BUILD +++ b/third_party/ftxui.BUILD @@ -15,6 +15,7 @@ cc_library( includes = ["include/"], local_defines = select({ "@platforms//os:linux": [], + "@platforms//os:macos": [], "@platforms//os:windows": [ "_UNICODE", "UNICODE", diff --git a/third_party/icu.BUILD b/third_party/icu.BUILD index 3531e7f35..9b9ee600f 100644 --- a/third_party/icu.BUILD +++ b/third_party/icu.BUILD @@ -65,10 +65,8 @@ cc_library( }), linkstatic = True, local_defines = ["U_TOOLUTIL_IMPLEMENTATION"] + select({ - "@platforms//os:windows": [], - "//conditions:default": [ - "U_ELF", - ], + "@platforms//os:linux": ["U_ELF"], + "//conditions:default": [], }), strip_include_prefix = "source/tools/toolutil", visibility = ["//visibility:private"], diff --git a/third_party/imgui-sfml.BUILD b/third_party/imgui-sfml.BUILD index eb8424416..5348879c5 100644 --- a/third_party/imgui-sfml.BUILD +++ b/third_party/imgui-sfml.BUILD @@ -4,6 +4,9 @@ IMGUI_SFML_COPTS = select({ "@platforms//os:linux": [ "-Wno-switch", ], + "@platforms//os:macos": [ + "-Wno-switch", + ], "//conditions:default": [], }) @@ -16,6 +19,7 @@ cc_library( includes = ["."], linkopts = select({ "@platforms//os:linux": ["-lGL"], + "@platforms//os:macos": ["-lGL"], "@platforms//os:windows": ["-DEFAULTLIB:opengl32"], }), visibility = ["//visibility:public"], diff --git a/third_party/sfml.BUILD b/third_party/sfml.BUILD index 0fc0c8f67..f42437282 100644 --- a/third_party/sfml.BUILD +++ b/third_party/sfml.BUILD @@ -13,6 +13,10 @@ cc_library( "src/SFML/System/Unix/**/*.cpp", "src/SFML/System/Unix/**/*.hpp", ]), + "@platforms//os:macos": glob([ + "src/SFML/System/Unix/**/*.cpp", + "src/SFML/System/Unix/**/*.hpp", + ]), "@platforms//os:windows": glob([ "src/SFML/System/Win32/**/*.cpp", "src/SFML/System/Win32/**/*.hpp", @@ -28,6 +32,9 @@ cc_library( "@platforms//os:linux": [ "-pthread", ], + "@platforms//os:macos": [ + "-pthread", + ], "@platforms//os:windows": [ "-DEFAULTLIB:winmm", ], @@ -54,6 +61,10 @@ cc_library( "src/SFML/Window/Unix/*.cpp", "src/SFML/Window/Unix/*.hpp", ]), + "@platforms//os:macos": glob([ + "src/SFML/Window/Unix/*.cpp", + "src/SFML/Window/Unix/*.hpp", + ]), "@platforms//os:windows": glob([ "src/SFML/Window/Win32/*.cpp", "src/SFML/Window/Win32/*.hpp", @@ -67,6 +78,10 @@ cc_library( "-lGL", "-lX11", ], + "@platforms//os:macos": [ + "-lGL", + "-lX11", + ], "@platforms//os:windows": [ "-DEFAULTLIB:advapi32", "-DEFAULTLIB:gdi32", @@ -82,6 +97,9 @@ cc_library( "@udev-zero", "@xrandr", ], + "@platforms//os:macos": [ + "@xrandr", + ], "@platforms//os:windows": [], }), ) @@ -103,6 +121,10 @@ cc_library( "-lGL", "-lX11", ], + "@platforms//os:macos": [ + "-lGL", + "-lX11", + ], "@platforms//os:windows": [], }), strip_include_prefix = "include/", diff --git a/third_party/spdlog.BUILD b/third_party/spdlog.BUILD index 2bce3e98f..7f75abab3 100644 --- a/third_party/spdlog.BUILD +++ b/third_party/spdlog.BUILD @@ -15,6 +15,7 @@ cc_library( includes = ["include/"], linkopts = select({ "@platforms//os:linux": ["-lpthread"], + "@platforms//os:macos": ["-lpthread"], "@platforms//os:windows": [], }), strip_include_prefix = "include", diff --git a/third_party/unifex.BUILD b/third_party/unifex.BUILD index 72fb71728..4891a85c2 100644 --- a/third_party/unifex.BUILD +++ b/third_party/unifex.BUILD @@ -12,6 +12,7 @@ cc_library( name = "unifex", srcs = glob(["source/*.cpp"]) + select({ "@platforms//os:linux": glob(["source/linux/*"]), + "@platforms//os:macos": glob(["source/linux/*"]), "@platforms//os:windows": glob([ "include/unifex/win32/detail/*.hpp", "source/win32/*", @@ -22,6 +23,7 @@ cc_library( "include/unifex/detail/*.hpp", ]) + [":config_header"] + select({ "@platforms//os:linux": glob(["include/unifex/linux/*.hpp"]), + "@platforms//os:macos": glob(["include/unifex/linux/*.hpp"]), "@platforms//os:windows": glob(["include/unifex/win32/*.hpp"]), }), includes = ["include/"], @@ -35,6 +37,11 @@ cc_library( name = src[:-4], size = "small", srcs = [src], + target_compatible_with = select({ + "@platforms//os:linux": [], + "@platforms//os:windows": [], + "//conditions:default": ["@platforms//:incompatible"], + }), deps = [":unifex"], ) for src in glob(["examples/*.cpp"])] diff --git a/third_party/zlib.BUILD b/third_party/zlib.BUILD index 71374ba90..fcdbf1ee5 100644 --- a/third_party/zlib.BUILD +++ b/third_party/zlib.BUILD @@ -11,6 +11,7 @@ cc_library( includes = ["."], local_defines = select({ "@platforms//os:linux": ["Z_HAVE_UNISTD_H"], + "@platforms//os:macos": ["Z_HAVE_UNISTD_H"], "@platforms//os:windows": [], }), visibility = ["//visibility:public"], diff --git a/type/BUILD b/type/BUILD index 6cc4b239f..eefaa9317 100644 --- a/type/BUILD +++ b/type/BUILD @@ -30,6 +30,7 @@ cc_test( SFML_TYPE_COPTS = HASTUR_COPTS + select({ # SFML leaks this into our code. "@platforms//os:linux": ["-Wno-implicit-fallthrough"], + "@platforms//os:macos": ["-Wno-implicit-fallthrough"], "//conditions:default": [], })