[bindings] Add LTO builds on Windows+MSVC (#1687)

* Add LTO builds on Windows+MSVC

Gates the MSVC switches behind an `@bazel_skylib:selects` statement.

This is a first experiment from best guesses and studying the MSVC docs.

* Fix misleading inline comment
This commit is contained in:
Nicholas Junge 2023-10-27 13:49:43 +02:00 committed by GitHub
parent 698d1dc8c3
commit b219e18b91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 1 deletions

View File

@ -2,11 +2,21 @@ licenses(["notice"])
package(default_visibility = ["//visibility:public"]) package(default_visibility = ["//visibility:public"])
load("@bazel_skylib//lib:selects.bzl", "selects")
config_setting( config_setting(
name = "msvc_compiler", name = "msvc_compiler",
flag_values = {"@bazel_tools//tools/cpp:compiler": "msvc-cl"}, flag_values = {"@bazel_tools//tools/cpp:compiler": "msvc-cl"},
) )
selects.config_setting_group(
name = "winplusmsvc",
match_all = [
"@platforms//os:windows",
":msvc_compiler",
],
)
cc_library( cc_library(
name = "nanobind", name = "nanobind",
srcs = glob([ srcs = glob([
@ -20,6 +30,7 @@ cc_library(
":msvc_compiler": [ ":msvc_compiler": [
"/EHsc", # exceptions "/EHsc", # exceptions
"/Os", # size optimizations "/Os", # size optimizations
"/GL", # LTO / whole program optimization
], ],
# these should work on both clang and gcc. # these should work on both clang and gcc.
"//conditions:default": [ "//conditions:default": [
@ -33,7 +44,8 @@ cc_library(
"include", "include",
], ],
linkopts = select({ linkopts = select({
"@platforms//os:macos": ["-Wl,@$(location :cmake/darwin-ld-cpython.sym)"], ":winplusmsvc": ["/LTGC"], # Windows + MSVC.
"@platforms//os:macos": ["-Wl,@$(location :cmake/darwin-ld-cpython.sym)"], # Apple.
"//conditions:default": [], "//conditions:default": [],
}), }),
textual_hdrs = glob( textual_hdrs = glob(