From 41396e3b7be08ce008d8550fbf444e9df31b8c65 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 ++--- browser/gui/BUILD | 6 +++-- gfx/BUILD | 10 +++++++-- img/BUILD | 6 +++-- net/BUILD | 4 ++++ os/BUILD | 8 +++++++ third_party/ftxui.BUILD | 1 + third_party/icu.BUILD | 6 ++--- third_party/imgui-sfml.BUILD | 10 +++++++-- third_party/sfml.BUILD | 43 +++++++++++++++++++++++++++++++++++- third_party/spdlog.BUILD | 1 + third_party/unifex.BUILD | 4 +++- third_party/zlib.BUILD | 1 + type/BUILD | 1 + 16 files changed, 103 insertions(+), 17 deletions(-) diff --git a/.bazelrc b/.bazelrc index 9e4c0f91..50a372e0 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 37bc8469..b950b842 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 PATH="/usr/local/opt/icu4c/bin:/usr/local/opt/icu4c/sbin:$PATH"; bazelisk build //... + - run: 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 7a40338d..3cfd52b0 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/browser/gui/BUILD b/browser/gui/BUILD index 067cb14f..2dc48713 100644 --- a/browser/gui/BUILD +++ b/browser/gui/BUILD @@ -28,7 +28,9 @@ cc_binary( "@imgui-sfml", "@sfml//:graphics", "@sfml//:system", - "@sfml//:window", "@spdlog", - ], + ] + select({ + "@platforms//os:macos": ["@sfml//:window_macos"], + "//conditions:default": ["@sfml//:window"], + }), ) diff --git a/gfx/BUILD b/gfx/BUILD index a2d9c3dc..4a97b71a 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"], @@ -98,6 +102,8 @@ cc_binary( ":sfml", "//type:sfml", "@sfml//:graphics", - "@sfml//:window", - ], + ] + select({ + "@platforms//os:macos": ["@sfml//:window_macos"], + "//conditions:default": ["@sfml//:window"], + }), ) diff --git a/img/BUILD b/img/BUILD index bc0ddd0b..f541da3e 100644 --- a/img/BUILD +++ b/img/BUILD @@ -78,6 +78,8 @@ cc_binary( "//gfx:sfml", "//type:sfml", "@sfml//:graphics", - "@sfml//:window", - ], + ] + select({ + "@platforms//os:macos": ["@sfml//:window_macos"], + "//conditions:default": ["@sfml//:window"], + }), ) diff --git a/net/BUILD b/net/BUILD index 655a58ed..a35aa1ed 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 e74e060b..44145274 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 97e4ca81..0730d403 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 fc2f7bb5..b92a57cc 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 eb842441..7f97d255 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"], @@ -23,6 +27,8 @@ cc_library( "@imgui", "@sfml//:graphics", "@sfml//:system", - "@sfml//:window", - ], + ] + select({ + "@platforms//os:macos": ["@sfml//:window_macos"], + "//conditions:default": ["@sfml//:window"], + }), ) diff --git a/third_party/sfml.BUILD b/third_party/sfml.BUILD index 0fc0c8f6..9bd8452c 100644 --- a/third_party/sfml.BUILD +++ b/third_party/sfml.BUILD @@ -1,4 +1,4 @@ -load("@rules_cc//cc:defs.bzl", "cc_library") +load("@rules_cc//cc:defs.bzl", "cc_library", "objc_library") SFML_DEFINES = [ "SFML_STATIC", @@ -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", ], @@ -76,6 +83,10 @@ cc_library( ], }), strip_include_prefix = "include/", + target_compatible_with = select({ + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], + }), visibility = ["//visibility:public"], deps = [":system"] + select({ "@platforms//os:linux": [ @@ -86,6 +97,35 @@ cc_library( }), ) +objc_library( + name = "window_macos", + srcs = glob( + include = [ + "src/SFML/Window/*.cpp", + "src/SFML/Window/*.hpp", + "src/SFML/Window/OSX/*.cpp", + "src/SFML/Window/OSX/*.hpp", + "src/SFML/Window/OSX/*.m", + "src/SFML/Window/OSX/*.mm", + ], + exclude = [ + "src/SFML/Window/EGLCheck.cpp", + "src/SFML/Window/EGLCheck.hpp", + "src/SFML/Window/EglContext.cpp", + "src/SFML/Window/EglContext.hpp", + ], + ), + hdrs = glob(["include/SFML/Window/*"]), + copts = ["-Iexternal/sfml/src/"], + defines = SFML_DEFINES, + target_compatible_with = select({ + "@platforms//os:macos": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + visibility = ["//visibility:public"], + deps = [":system"], +) + cc_library( name = "graphics", srcs = glob( @@ -103,6 +143,7 @@ cc_library( "-lGL", "-lX11", ], + "@platforms//os:macos": [], "@platforms//os:windows": [], }), strip_include_prefix = "include/", diff --git a/third_party/spdlog.BUILD b/third_party/spdlog.BUILD index 2bce3e98..7f75abab 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 72fb7172..9fa5da5d 100644 --- a/third_party/unifex.BUILD +++ b/third_party/unifex.BUILD @@ -5,13 +5,14 @@ genrule( name = "config_header", srcs = ["include/unifex/config.hpp.in"], outs = ["include/unifex/config.hpp"], - cmd = "cat $< | sed -r 's/^#cmakedefine01 (.*)/#define \\1 1/g' - | sed '/^#cmakedefine/d' | sed s/@libunifex_VERSION_MAJOR@/0/g | sed s/@libunifex_VERSION_MINOR@/1/g >$@", + cmd = "cat $< | sed -r 's/^#cmakedefine01 (.*)/#define \\1 1/g' | sed '/^#cmakedefine/d' | sed s/@libunifex_VERSION_MAJOR@/0/g | sed s/@libunifex_VERSION_MINOR@/1/g >$@", ) cc_library( name = "unifex", srcs = glob(["source/*.cpp"]) + select({ "@platforms//os:linux": glob(["source/linux/*"]), + "@platforms//os:macos": [], "@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": [], "@platforms//os:windows": glob(["include/unifex/win32/*.hpp"]), }), includes = ["include/"], diff --git a/third_party/zlib.BUILD b/third_party/zlib.BUILD index 71374ba9..fcdbf1ee 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 6cc4b239..eefaa931 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": [], })