diff --git a/BUILD b/BUILD
index e9468c1..5a2c44a 100644
--- a/BUILD
+++ b/BUILD
@@ -31,197 +31,9 @@
 # These are Bazel rules to build Ceres. It's currently in Alpha state, and does
 # not support parameterization around threading choice or sparse backends.
 
-CERES_SRCS = ["internal/ceres/" + filename for filename in [
-    "array_utils.cc",
-    "blas.cc",
-    "block_evaluate_preparer.cc",
-    "block_jacobian_writer.cc",
-    "block_jacobi_preconditioner.cc",
-    "block_random_access_dense_matrix.cc",
-    "block_random_access_diagonal_matrix.cc",
-    "block_random_access_matrix.cc",
-    "block_random_access_sparse_matrix.cc",
-    "block_sparse_matrix.cc",
-    "block_structure.cc",
-    "c_api.cc",
-    "callbacks.cc",
-    "canonical_views_clustering.cc",
-    "cgnr_solver.cc",
-    "compressed_col_sparse_matrix_utils.cc",
-    "compressed_row_jacobian_writer.cc",
-    "compressed_row_sparse_matrix.cc",
-    "conditioned_cost_function.cc",
-    "conjugate_gradients_solver.cc",
-    "coordinate_descent_minimizer.cc",
-    "corrector.cc",
-    "covariance.cc",
-    "covariance_impl.cc",
-    "dense_normal_cholesky_solver.cc",
-    "dense_qr_solver.cc",
-    "dense_sparse_matrix.cc",
-    "detect_structure.cc",
-    "dogleg_strategy.cc",
-    "dynamic_compressed_row_jacobian_writer.cc",
-    "dynamic_compressed_row_sparse_matrix.cc",
-    "dynamic_sparse_normal_cholesky_solver.cc",
-    "eigensparse.cc",
-    "evaluator.cc",
-    "file.cc",
-    "function_sample.cc",
-    "gradient_checker.cc",
-    "gradient_checking_cost_function.cc",
-    "gradient_problem.cc",
-    "gradient_problem_solver.cc",
-    "is_close.cc",
-    "implicit_schur_complement.cc",
-    "inner_product_computer.cc",
-    "iterative_schur_complement_solver.cc",
-    "lapack.cc",
-    "levenberg_marquardt_strategy.cc",
-    "line_search.cc",
-    "line_search_direction.cc",
-    "line_search_minimizer.cc",
-    "linear_least_squares_problems.cc",
-    "linear_operator.cc",
-    "line_search_preprocessor.cc",
-    "linear_solver.cc",
-    "local_parameterization.cc",
-    "loss_function.cc",
-    "low_rank_inverse_hessian.cc",
-    "minimizer.cc",
-    "normal_prior.cc",
-    "parameter_block_ordering.cc",
-    "partitioned_matrix_view.cc",
-    "polynomial.cc",
-    "preconditioner.cc",
-    "preprocessor.cc",
-    "problem.cc",
-    "problem_impl.cc",
-    "program.cc",
-    "reorder_program.cc",
-    "residual_block.cc",
-    "residual_block_utils.cc",
-    "schur_complement_solver.cc",
-    "schur_eliminator.cc",
-    "schur_jacobi_preconditioner.cc",
-    "schur_templates.cc",
-    "scratch_evaluate_preparer.cc",
-    "single_linkage_clustering.cc",
-    "solver.cc",
-    "solver_utils.cc",
-    "sparse_cholesky.cc",
-    "sparse_matrix.cc",
-    "sparse_normal_cholesky_solver.cc",
-    "split.cc",
-    "stringprintf.cc",
-    "suitesparse.cc",
-    "thread_token_provider.cc",
-    "triplet_sparse_matrix.cc",
-    "trust_region_minimizer.cc",
-    "trust_region_preprocessor.cc",
-    "trust_region_step_evaluator.cc",
-    "trust_region_strategy.cc",
-    "types.cc",
-    "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",
-]]
+load("//:bazel/ceres.bzl", "ceres_library")
 
-# TODO(keir): This should get converted into a Skylark function that can
-# 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.
-cc_library(
-    name = "ceres",
-
-    # Internal sources, options, and dependencies.
-    srcs = CERES_SRCS + glob([
-        "include/ceres/internal/*.h",
-    ]) + glob([
-        "internal/ceres/*.h",
-    ]),
-
-    # These headers are made available to other targets.
-    hdrs =
-        glob(["include/ceres/*.h"]) + glob([
-            "include/ceres/internal/*.h",
-        ]) +
-
-        # This is an empty config, since the Bazel-based build does not
-        # generate a config.h from config.h.in. This is fine, since Bazel
-        # properly handles propagating -D defines to dependent targets.
-        glob([
-            "config/ceres/internal/config.h",
-        ]),
-    copts = [
-        "-Iinternal",
-        "-Wno-sign-compare",
-    ],
-
-    # These include directories and defines are propagated to other targets
-    # depending on Ceres.
-    # TODO(keir): These defines are placeholders for now to facilitate getting
-    # started with a Bazel build. However, these should become configurable as
-    # part of a Skylark Ceres target macro.
-    defines = [
-        "CERES_NO_SUITESPARSE",
-        "CERES_NO_CXSPARSE",
-        "CERES_NO_THREADS",
-        "CERES_NO_LAPACK",
-        "CERES_STD_UNORDERED_MAP",
-    ],
-    includes = [
-        "config",
-        "include",
-    ],
-    visibility = ["//visibility:public"],
-    deps = [
-        "@com_github_eigen_eigen//:eigen",
-        "@com_github_google_glog//:glog",
-    ],
-)
+ceres_library(name = "ceres")
 
 cc_library(
     name = "test_util",
diff --git a/bazel/ceres.bzl b/bazel/ceres.bzl
new file mode 100644
index 0000000..88dface
--- /dev/null
+++ b/bazel/ceres.bzl
@@ -0,0 +1,228 @@
+# Ceres Solver - A fast non-linear least squares minimizer
+# Copyright 2018 Google Inc. All rights reserved.
+# http://ceres-solver.org/
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# * Neither the name of Google Inc. nor the names of its contributors may be
+#   used to endorse or promote products derived from this software without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# Support for building Ceres Solver with a specific configuration.
+
+CERES_SRCS = ["internal/ceres/" + filename for filename in [
+    "array_utils.cc",
+    "blas.cc",
+    "block_evaluate_preparer.cc",
+    "block_jacobian_writer.cc",
+    "block_jacobi_preconditioner.cc",
+    "block_random_access_dense_matrix.cc",
+    "block_random_access_diagonal_matrix.cc",
+    "block_random_access_matrix.cc",
+    "block_random_access_sparse_matrix.cc",
+    "block_sparse_matrix.cc",
+    "block_structure.cc",
+    "c_api.cc",
+    "callbacks.cc",
+    "canonical_views_clustering.cc",
+    "cgnr_solver.cc",
+    "compressed_col_sparse_matrix_utils.cc",
+    "compressed_row_jacobian_writer.cc",
+    "compressed_row_sparse_matrix.cc",
+    "conditioned_cost_function.cc",
+    "conjugate_gradients_solver.cc",
+    "coordinate_descent_minimizer.cc",
+    "corrector.cc",
+    "covariance.cc",
+    "covariance_impl.cc",
+    "dense_normal_cholesky_solver.cc",
+    "dense_qr_solver.cc",
+    "dense_sparse_matrix.cc",
+    "detect_structure.cc",
+    "dogleg_strategy.cc",
+    "dynamic_compressed_row_jacobian_writer.cc",
+    "dynamic_compressed_row_sparse_matrix.cc",
+    "dynamic_sparse_normal_cholesky_solver.cc",
+    "eigensparse.cc",
+    "evaluator.cc",
+    "file.cc",
+    "function_sample.cc",
+    "gradient_checker.cc",
+    "gradient_checking_cost_function.cc",
+    "gradient_problem.cc",
+    "gradient_problem_solver.cc",
+    "is_close.cc",
+    "implicit_schur_complement.cc",
+    "inner_product_computer.cc",
+    "iterative_schur_complement_solver.cc",
+    "lapack.cc",
+    "levenberg_marquardt_strategy.cc",
+    "line_search.cc",
+    "line_search_direction.cc",
+    "line_search_minimizer.cc",
+    "linear_least_squares_problems.cc",
+    "linear_operator.cc",
+    "line_search_preprocessor.cc",
+    "linear_solver.cc",
+    "local_parameterization.cc",
+    "loss_function.cc",
+    "low_rank_inverse_hessian.cc",
+    "minimizer.cc",
+    "normal_prior.cc",
+    "parameter_block_ordering.cc",
+    "partitioned_matrix_view.cc",
+    "polynomial.cc",
+    "preconditioner.cc",
+    "preprocessor.cc",
+    "problem.cc",
+    "problem_impl.cc",
+    "program.cc",
+    "reorder_program.cc",
+    "residual_block.cc",
+    "residual_block_utils.cc",
+    "schur_complement_solver.cc",
+    "schur_eliminator.cc",
+    "schur_jacobi_preconditioner.cc",
+    "schur_templates.cc",
+    "scratch_evaluate_preparer.cc",
+    "single_linkage_clustering.cc",
+    "solver.cc",
+    "solver_utils.cc",
+    "sparse_cholesky.cc",
+    "sparse_matrix.cc",
+    "sparse_normal_cholesky_solver.cc",
+    "split.cc",
+    "stringprintf.cc",
+    "suitesparse.cc",
+    "thread_token_provider.cc",
+    "triplet_sparse_matrix.cc",
+    "trust_region_minimizer.cc",
+    "trust_region_preprocessor.cc",
+    "trust_region_step_evaluator.cc",
+    "trust_region_strategy.cc",
+    "types.cc",
+    "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):
+    # The path to internal/ depends on whether Ceres is the main workspace or
+    # an external repository.
+    if native.repository_name() != '@':
+        internal = 'external/%s/internal' % native.repository_name().lstrip('@')
+    else:
+        internal = 'internal'
+
+    native.cc_library(
+        name = name,
+
+        # Internal sources, options, and dependencies.
+        srcs = CERES_SRCS + native.glob([
+            "include/ceres/internal/*.h",
+        ]) + native.glob([
+            "internal/ceres/*.h",
+        ]),
+
+        # These headers are made available to other targets.
+        hdrs =
+            native.glob(["include/ceres/*.h"]) + native.glob([
+                "include/ceres/internal/*.h",
+            ]) +
+
+            # This is an empty config, since the Bazel-based build does not
+            # generate a config.h from config.h.in. This is fine, since Bazel
+            # properly handles propagating -D defines to dependent targets.
+            native.glob([
+                "config/ceres/internal/config.h",
+            ]),
+        copts = [
+            "-I" + internal,
+            "-Wno-sign-compare",
+        ],
+
+        # These include directories and defines are propagated to other targets
+        # depending on Ceres.
+        # TODO(keir): These defines are placeholders for now to facilitate getting
+        # started with a Bazel build. However, these should become configurable as
+        # part of a Skylark Ceres target macro.
+        defines = [
+            "CERES_NO_SUITESPARSE",
+            "CERES_NO_CXSPARSE",
+            "CERES_NO_THREADS",
+            "CERES_NO_LAPACK",
+            "CERES_STD_UNORDERED_MAP",
+        ],
+        includes = [
+            "config",
+            "include",
+        ],
+        visibility = ["//visibility:public"],
+        deps = [
+            "@com_github_eigen_eigen//:eigen",
+            "@com_github_google_glog//:glog",
+        ],
+    )
