Support disabling Schur specializations in Bazel build
Change-Id: If72bcd9f19ba4b44482b267e45fb2355b1a93ff0
diff --git a/BUILD b/BUILD
index 5a2c44a..7ae9d21 100644
--- a/BUILD
+++ b/BUILD
@@ -33,7 +33,8 @@
load("//:bazel/ceres.bzl", "ceres_library")
-ceres_library(name = "ceres")
+ceres_library(name = "ceres",
+ restrict_schur_specializations=False)
cc_library(
name = "test_util",
diff --git a/bazel/ceres.bzl b/bazel/ceres.bzl
index 88dface..833c937 100644
--- a/bazel/ceres.bzl
+++ b/bazel/ceres.bzl
@@ -122,54 +122,12 @@
"visibility_based_preconditioner.cc",
"visibility.cc",
"wall_time.cc",
- "generated/schur_eliminator_d_d_d.cc",
- "generated/schur_eliminator_2_2_2.cc",
- "generated/schur_eliminator_2_2_3.cc",
- "generated/schur_eliminator_2_2_4.cc",
- "generated/schur_eliminator_2_2_d.cc",
- "generated/schur_eliminator_2_3_3.cc",
- "generated/schur_eliminator_2_3_4.cc",
- "generated/schur_eliminator_2_3_6.cc",
- "generated/schur_eliminator_2_3_9.cc",
- "generated/schur_eliminator_2_3_d.cc",
- "generated/schur_eliminator_2_4_3.cc",
- "generated/schur_eliminator_2_4_4.cc",
- "generated/schur_eliminator_2_4_6.cc",
- "generated/schur_eliminator_2_4_8.cc",
- "generated/schur_eliminator_2_4_9.cc",
- "generated/schur_eliminator_2_4_d.cc",
- "generated/schur_eliminator_2_d_d.cc",
- "generated/schur_eliminator_4_4_2.cc",
- "generated/schur_eliminator_4_4_3.cc",
- "generated/schur_eliminator_4_4_4.cc",
- "generated/schur_eliminator_4_4_d.cc",
- "generated/partitioned_matrix_view_d_d_d.cc",
- "generated/partitioned_matrix_view_2_2_2.cc",
- "generated/partitioned_matrix_view_2_2_3.cc",
- "generated/partitioned_matrix_view_2_2_4.cc",
- "generated/partitioned_matrix_view_2_2_d.cc",
- "generated/partitioned_matrix_view_2_3_3.cc",
- "generated/partitioned_matrix_view_2_3_4.cc",
- "generated/partitioned_matrix_view_2_3_6.cc",
- "generated/partitioned_matrix_view_2_3_9.cc",
- "generated/partitioned_matrix_view_2_3_d.cc",
- "generated/partitioned_matrix_view_2_4_3.cc",
- "generated/partitioned_matrix_view_2_4_4.cc",
- "generated/partitioned_matrix_view_2_4_6.cc",
- "generated/partitioned_matrix_view_2_4_8.cc",
- "generated/partitioned_matrix_view_2_4_9.cc",
- "generated/partitioned_matrix_view_2_4_d.cc",
- "generated/partitioned_matrix_view_2_d_d.cc",
- "generated/partitioned_matrix_view_4_4_2.cc",
- "generated/partitioned_matrix_view_4_4_3.cc",
- "generated/partitioned_matrix_view_4_4_4.cc",
- "generated/partitioned_matrix_view_4_4_d.cc",
]]
# TODO(rodrigoq): add support to configure Ceres into various permutations,
# like SuiteSparse or not, threading or not, glog or not, and so on.
# See https://github.com/ceres-solver/ceres-solver/issues/335.
-def ceres_library(name):
+def ceres_library(name, restrict_schur_specializations=False):
# The path to internal/ depends on whether Ceres is the main workspace or
# an external repository.
if native.repository_name() != '@':
@@ -177,11 +135,23 @@
else:
internal = 'internal'
+ # The fixed-size Schur eliminator template instantiations incur a large
+ # binary size penalty, and are slow to compile, so support disabling them.
+ schur_eliminator_copts = []
+ if restrict_schur_specializations:
+ schur_eliminator_copts.append("-DCERES_RESTRICT_SCHUR_SPECIALIZATION")
+ schur_sources = [
+ "internal/ceres/generated/schur_eliminator_d_d_d.cc",
+ "internal/ceres/generated/partitioned_matrix_view_d_d_d.cc",
+ ]
+ else:
+ schur_sources = native.glob(["internal/ceres/generated/*.cc"])
+
native.cc_library(
name = name,
# Internal sources, options, and dependencies.
- srcs = CERES_SRCS + native.glob([
+ srcs = CERES_SRCS + schur_sources + native.glob([
"include/ceres/internal/*.h",
]) + native.glob([
"internal/ceres/*.h",
@@ -202,7 +172,7 @@
copts = [
"-I" + internal,
"-Wno-sign-compare",
- ],
+ ] + schur_eliminator_copts,
# These include directories and defines are propagated to other targets
# depending on Ceres.