Remove OpenMP and No threading backends.

Since c++11, we can depend on C++ threads always being available.
With the recent work on the performance of CXX threading, the
additional complexity of maintaining multiple backends for some
minor performance delta is not worth it

https://github.com/ceres-solver/ceres-solver/issues/886

Change-Id: Idee480b22a498daec9c4366da8589aa58eaf36a1
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
index 4f9d29b..630998f 100644
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -4,7 +4,7 @@
 
 jobs:
   build:
-    name: ${{matrix.os}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.threading_model}}
+    name: ${{matrix.os}}-${{matrix.build_type}}-${{matrix.lib}}
     runs-on: ubuntu-latest
     container: ${{matrix.os}}
     defaults:
@@ -25,10 +25,6 @@
         lib:
           - shared
           - static
-        threading_model:
-          - CXX_THREADS
-          - NO_THREADS
-          - OPENMP
 
     steps:
       - uses: actions/checkout@v2
@@ -55,8 +51,8 @@
         uses: actions/cache@v2
         with:
           path: ${{env.CCACHE_DIR}}
-          key: ${{matrix.os}}-ccache-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.threading_model}}-${{github.run_id}}
-          restore-keys: ${{matrix.os}}-ccache-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.threading_model}}-
+          key: ${{matrix.os}}-ccache-${{matrix.build_type}}-${{matrix.lib}}-${{github.run_id}}
+          restore-keys: ${{matrix.os}}-ccache-${{matrix.build_type}}-${{matrix.lib}}-
 
       - name: Setup Environment
         if: matrix.build_type == 'Release'
@@ -67,7 +63,6 @@
         run: |
           cmake -S . -B build_${{matrix.build_type}} \
                 -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \
-                -DCERES_THREADING_MODEL=${{matrix.threading_model}} \
                 -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
                 -DCMAKE_C_COMPILER_LAUNCHER=$(which ccache) \
                 -DCMAKE_CXX_COMPILER_LAUNCHER=$(which ccache) \
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 01f47b8..c30ae9f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -118,24 +118,9 @@
 
 enable_testing()
 
-include(CeresThreadingModels)
 include(CMakeDependentOption)
 include(PrettyPrintCMakeList)
 
-find_available_ceres_threading_models(CERES_THREADING_MODELS_AVAILABLE)
-pretty_print_cmake_list(PRETTY_CERES_THREADING_MODELS_AVAILABLE
-  ${CERES_THREADING_MODELS_AVAILABLE})
-message("-- Detected available Ceres threading models: "
-  "${PRETTY_CERES_THREADING_MODELS_AVAILABLE}")
-set(CERES_THREADING_MODEL "${CERES_THREADING_MODEL}" CACHE STRING
-  "Ceres threading back-end" FORCE)
-if (NOT CERES_THREADING_MODEL)
-  list(GET CERES_THREADING_MODELS_AVAILABLE 0 DEFAULT_THREADING_MODEL)
-  update_cache_variable(CERES_THREADING_MODEL ${DEFAULT_THREADING_MODEL})
-endif()
-set_property(CACHE CERES_THREADING_MODEL PROPERTY STRINGS
-  ${CERES_THREADING_MODELS_AVAILABLE})
-
 option(MINIGLOG "Use a stripped down version of glog." OFF)
 option(GFLAGS "Enable Google Flags." ON)
 option(SUITESPARSE "Enable SuiteSparse." ON)
@@ -197,8 +182,8 @@
   # Apple claims that the BLAS call dsyrk_ is a private API, and will not allow
   # you to submit to the Apple Store if the symbol is present.
   update_cache_variable(LAPACK OFF)
-  message(STATUS "Building for iOS: SuiteSparse, LAPACK, gflags, "
-    "and OpenMP are not available.")
+  message(STATUS "Building for iOS: SuiteSparse, LAPACK, gflags "
+    "are not available.")
 
   update_cache_variable(BUILD_EXAMPLES OFF)
   message(STATUS "Building for iOS: Will not build examples.")
@@ -489,8 +474,6 @@
   message("-- Disabling custom blas")
 endif (NOT CUSTOM_BLAS)
 
-set_ceres_threading_model("${CERES_THREADING_MODEL}")
-
 if (BUILD_BENCHMARKS)
   # Version 1.3 was first to provide import targets
   find_package(benchmark 1.3 QUIET)
diff --git a/cmake/CeresCompileOptionsToComponents.cmake b/cmake/CeresCompileOptionsToComponents.cmake
index 0baf214..47b0f2a 100644
--- a/cmake/CeresCompileOptionsToComponents.cmake
+++ b/cmake/CeresCompileOptionsToComponents.cmake
@@ -80,10 +80,6 @@
     CERES_NO_ACCELERATE_SPARSE "AccelerateSparse;SparseLinearAlgebraLibrary")
   add_to_output_if_not_found(CURRENT_CERES_COMPILE_OPTIONS ${CERES_COMPONENTS_VAR}
     CERES_RESTRICT_SCHUR_SPECIALIZATION "SchurSpecializations")
-  add_to_output_if_found(CURRENT_CERES_COMPILE_OPTIONS ${CERES_COMPONENTS_VAR}
-    CERES_USE_OPENMP "OpenMP;Multithreading")
-  add_to_output_if_found(CURRENT_CERES_COMPILE_OPTIONS ${CERES_COMPONENTS_VAR}
-    CERES_USE_CXX_THREADS "Multithreading")
   # Remove duplicates of SparseLinearAlgebraLibrary if multiple sparse backends
   # are present.
   list(REMOVE_DUPLICATES ${CERES_COMPONENTS_VAR})
diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in
index bb6cc43..ceb7e26 100644
--- a/cmake/CeresConfig.cmake.in
+++ b/cmake/CeresConfig.cmake.in
@@ -178,10 +178,9 @@
 include(CMakeFindDependencyMacro)
 # Optional dependencies
 @METIS_DEPENDENCY@
-@OpenMP_DEPENDENCY@
 @SuiteSparse_DEPENDENCY@
-@Threads_DEPENDENCY@
 @CUDAToolkit_DEPENDENCY@
+@Threads_DEPENDENCY@
 
 # As imported CMake targets are not re-exported when a dependent target is
 # exported, we must invoke find_package(XXX) here to reload the definition
diff --git a/cmake/CeresThreadingModels.cmake b/cmake/CeresThreadingModels.cmake
deleted file mode 100644
index 571dd7d..0000000
--- a/cmake/CeresThreadingModels.cmake
+++ /dev/null
@@ -1,82 +0,0 @@
-# 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.
-#
-# Author: alexs.mac@gmail.com (Alex Stewart)
-
-# Ordered by expected preference.
-set(CERES_THREADING_MODELS "CXX_THREADS;OPENMP;NO_THREADS")
-
-function(find_available_ceres_threading_models CERES_THREADING_MODELS_AVAILABLE_VAR)
-  set(CERES_THREADING_MODELS_AVAILABLE ${CERES_THREADING_MODELS})
-  # Remove any threading models for which the dependencies are not available.
-  find_package(OpenMP QUIET)
-  if (NOT OPENMP_FOUND)
-    list(REMOVE_ITEM CERES_THREADING_MODELS_AVAILABLE "OPENMP")
-  endif()
-  if (NOT CERES_THREADING_MODELS_AVAILABLE)
-    # At least NO_THREADS should never be removed.  This check is purely
-    # protective against future threading model updates.
-    message(FATAL_ERROR "Ceres bug: Removed all threading models.")
-  endif()
-  set(${CERES_THREADING_MODELS_AVAILABLE_VAR}
-    ${CERES_THREADING_MODELS_AVAILABLE} PARENT_SCOPE)
-endfunction()
-
-macro(set_ceres_threading_model_to_cxx11_threads)
-  list(APPEND CERES_COMPILE_OPTIONS CERES_USE_CXX_THREADS)
-endmacro()
-
-macro(set_ceres_threading_model_to_openmp)
-  find_package(OpenMP REQUIRED)
-  list(APPEND CERES_COMPILE_OPTIONS CERES_USE_OPENMP)
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
-endmacro()
-
-macro(set_ceres_threading_model_to_no_threads)
-  list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
-endmacro()
-
-macro(set_ceres_threading_model CERES_THREADING_MODEL_TO_SET)
-  if ("${CERES_THREADING_MODEL_TO_SET}" STREQUAL "CXX_THREADS")
-    set_ceres_threading_model_to_cxx11_threads()
-  elseif ("${CERES_THREADING_MODEL_TO_SET}" STREQUAL "OPENMP")
-    set_ceres_threading_model_to_openmp()
-  elseif ("${CERES_THREADING_MODEL_TO_SET}" STREQUAL "NO_THREADS")
-    set_ceres_threading_model_to_no_threads()
-  else()
-    include(PrettyPrintCMakeList)
-    find_available_ceres_threading_models(_AVAILABLE_THREADING_MODELS)
-    pretty_print_cmake_list(
-      _AVAILABLE_THREADING_MODELS ${_AVAILABLE_THREADING_MODELS})
-    message(FATAL_ERROR "Unknown threading model specified: "
-      "'${CERES_THREADING_MODEL_TO_SET}'. Available threading models for "
-      "this platform are: ${_AVAILABLE_THREADING_MODELS}")
-  endif()
-  message("-- Using Ceres threading model: ${CERES_THREADING_MODEL_TO_SET}")
-endmacro()
diff --git a/cmake/config.h.in b/cmake/config.h.in
index 4007955..0e7fd3a 100644
--- a/cmake/config.h.in
+++ b/cmake/config.h.in
@@ -70,12 +70,6 @@
 // routines.
 @CERES_NO_CUSTOM_BLAS@
 
-// If defined, Ceres was compiled without multithreading support.
-@CERES_NO_THREADS@
-// If defined Ceres was compiled with OpenMP multithreading.
-@CERES_USE_OPENMP@
-// If defined Ceres was compiled with modern C++ multithreading.
-@CERES_USE_CXX_THREADS@
 // If defined, Ceres was compiled with a version of SuiteSparse/CHOLMOD without
 // the Partition module (requires METIS).
 @CERES_NO_CHOLMOD_PARTITION@
@@ -87,22 +81,6 @@
 // with underscore prefixed versions (e.g. j0() -> _j0()).
 @CERES_MSVC_USE_UNDERSCORE_PREFIXED_BESSEL_FUNCTIONS@
 
-#if defined(CERES_USE_OPENMP)
-#if defined(CERES_USE_CXX_THREADS) || defined(CERES_NO_THREADS)
-#error CERES_USE_OPENMP is mutually exclusive to CERES_USE_CXX_THREADS and CERES_NO_THREADS
-#endif
-#elif defined(CERES_USE_CXX_THREADS)
-#if defined(CERES_USE_OPENMP) || defined(CERES_NO_THREADS)
-#error CERES_USE_CXX_THREADS is mutually exclusive to CERES_USE_OPENMP, CERES_USE_CXX_THREADS and CERES_NO_THREADS
-#endif
-#elif defined(CERES_NO_THREADS)
-#if defined(CERES_USE_OPENMP) || defined(CERES_USE_CXX_THREADS)
-#error CERES_NO_THREADS is mutually exclusive to CERES_USE_OPENMP and CERES_USE_CXX_THREADS
-#endif
-#else
-#  error One of CERES_USE_OPENMP, CERES_USE_CXX_THREADS or CERES_NO_THREADS must be defined.
-#endif
-
 // CERES_NO_SPARSE should be automatically defined by config.h if Ceres was
 // compiled without any sparse back-end.  Verify that it has not subsequently
 // been inconsistently redefined.
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 06c0914..1e6a699 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -32,25 +32,10 @@
 
 # Avoid 'xxx.cc has no symbols' warnings from source files which are 'empty'
 # when their enclosing #ifdefs are disabled.
-if (CERES_THREADING_MODEL STREQUAL "CXX_THREADS")
-  set(CERES_PARALLEL_FOR_SRC parallel_for_cxx.cc thread_pool.cc)
-  find_package(Threads REQUIRED)
-  list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES Threads::Threads)
-
-  # Make dependency visible to the parent CMakeLists.txt
-  set(Threads_DEPENDENCY "find_dependency (Threads)" PARENT_SCOPE)
-elseif (CERES_THREADING_MODEL STREQUAL "OPENMP")
-  # OpenMP requires linking to the corresponding library.
-  find_package(OpenMP REQUIRED COMPONENTS CXX)
-
-  set(CERES_PARALLEL_FOR_SRC parallel_for_openmp.cc)
-  list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES OpenMP::OpenMP_CXX)
-
-  # Make dependency visible to the parent CMakeLists.txt
-  set(OpenMP_DEPENDENCY "find_dependency (OpenMP ${OpenMP_CXX_VERSION} COMPONENTS CXX)" PARENT_SCOPE)
-elseif (CERES_THREADING_MODEL STREQUAL "NO_THREADS")
-  set(CERES_PARALLEL_FOR_SRC parallel_for_nothreads.cc)
-endif()
+find_package(Threads REQUIRED)
+list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES Threads::Threads)
+# Make dependency visible to the parent CMakeLists.txt
+set(Threads_DEPENDENCY "find_dependency (Threads)" PARENT_SCOPE)
 
 # Source files that contain public symbols and live in the ceres namespaces.
 # Such symbols are expected to be marked with CERES_EXPORT and the files below
@@ -171,7 +156,6 @@
 # lexicographical order.
 add_library(ceres_internal OBJECT
     ${CERES_INTERNAL_SCHUR_FILES}
-    ${CERES_PARALLEL_FOR_SRC}
     accelerate_sparse.cc
     array_utils.cc
     block_evaluate_preparer.cc
@@ -235,6 +219,7 @@
     linear_solver.cc
     low_rank_inverse_hessian.cc
     minimizer.cc
+    parallel_for_cxx.cc
     parallel_utils.cc
     parameter_block_ordering.cc
     partitioned_matrix_view.cc
@@ -260,6 +245,7 @@
     stringprintf.cc
     subset_preconditioner.cc
     suitesparse.cc
+    thread_pool.cc
     thread_token_provider.cc
     triplet_sparse_matrix.cc
     trust_region_minimizer.cc
diff --git a/internal/ceres/concurrent_queue_test.cc b/internal/ceres/concurrent_queue_test.cc
index b0930fe..08451bd 100644
--- a/internal/ceres/concurrent_queue_test.cc
+++ b/internal/ceres/concurrent_queue_test.cc
@@ -28,15 +28,12 @@
 //
 // Author: vitus@google.com (Michael Vitus)
 
-// This include must come before any #ifndef check on Ceres compile options.
-#include "ceres/internal/config.h"
-
-#ifdef CERES_USE_CXX_THREADS
+#include "ceres/concurrent_queue.h"
 
 #include <chrono>
 #include <thread>
 
-#include "ceres/concurrent_queue.h"
+#include "ceres/internal/config.h"
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
 
@@ -300,5 +297,3 @@
 }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_USE_CXX_THREADS
diff --git a/internal/ceres/context_impl.cc b/internal/ceres/context_impl.cc
index 56c9785..cc01b54 100644
--- a/internal/ceres/context_impl.cc
+++ b/internal/ceres/context_impl.cc
@@ -171,9 +171,9 @@
   TearDown();
 #endif  // CERES_NO_CUDA
 }
+
 void ContextImpl::EnsureMinimumThreads(int num_threads) {
-#ifdef CERES_USE_CXX_THREADS
   thread_pool.Resize(num_threads);
-#endif  // CERES_USE_CXX_THREADS
 }
+
 }  // namespace ceres::internal
diff --git a/internal/ceres/context_impl.h b/internal/ceres/context_impl.h
index d8f294a..a18d638 100644
--- a/internal/ceres/context_impl.h
+++ b/internal/ceres/context_impl.h
@@ -49,9 +49,7 @@
 #include "cusparse.h"
 #endif  // CERES_NO_CUDA
 
-#ifdef CERES_USE_CXX_THREADS
 #include "ceres/thread_pool.h"
-#endif  // CERES_USE_CXX_THREADS
 
 namespace ceres::internal {
 
@@ -67,9 +65,7 @@
   // defined by the hardware.  Otherwise this call is a no-op.
   void EnsureMinimumThreads(int num_threads);
 
-#ifdef CERES_USE_CXX_THREADS
   ThreadPool thread_pool;
-#endif  // CERES_USE_CXX_THREADS
 
 #ifndef CERES_NO_CUDA
   // Note on Ceres' use of CUDA Devices on multi-GPU systems:
diff --git a/internal/ceres/covariance_impl.cc b/internal/ceres/covariance_impl.cc
index 9957d1d..5d8b87f 100644
--- a/internal/ceres/covariance_impl.cc
+++ b/internal/ceres/covariance_impl.cc
@@ -65,15 +65,6 @@
 
 CovarianceImpl::CovarianceImpl(const Covariance::Options& options)
     : options_(options), is_computed_(false), is_valid_(false) {
-#ifdef CERES_NO_THREADS
-  if (options_.num_threads > 1) {
-    LOG(WARNING) << "No threading support is compiled into this binary; "
-                 << "only options.num_threads = 1 is supported. Switching "
-                 << "to single threaded mode.";
-    options_.num_threads = 1;
-  }
-#endif
-
   evaluate_options_.num_threads = options_.num_threads;
   evaluate_options_.apply_loss_function = options_.apply_loss_function;
 }
diff --git a/internal/ceres/covariance_test.cc b/internal/ceres/covariance_test.cc
index caea18c..76fcb12 100644
--- a/internal/ceres/covariance_test.cc
+++ b/internal/ceres/covariance_test.cc
@@ -639,8 +639,6 @@
   ComputeAndCompareCovarianceBlocks(options, expected_covariance);
 }
 
-#ifdef CERES_USE_OPENMP
-
 TEST_F(CovarianceTest, ThreadedNormalBehavior) {
   // J
   //
@@ -691,8 +689,6 @@
   ComputeAndCompareCovarianceBlocks(options, expected_covariance);
 }
 
-#endif  // CERES_USE_OPENMP
-
 TEST_F(CovarianceTest, ConstantParameterBlock) {
   problem_.SetParameterBlockConstant(parameters_);
 
@@ -1355,13 +1351,13 @@
   vector<pair<const double*, const double*>> all_covariance_blocks_;
 };
 
-#if !defined(CERES_NO_SUITESPARSE) && defined(CERES_USE_OPENMP)
+#if !defined(CERES_NO_SUITESPARSE)
 
 TEST_F(LargeScaleCovarianceTest, Parallel) {
   ComputeAndCompare(SPARSE_QR, SUITE_SPARSE, 4);
 }
 
-#endif  // !defined(CERES_NO_SUITESPARSE) && defined(CERES_USE_OPENMP)
+#endif  // !defined(CERES_NO_SUITESPARSE)
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/generate_bundle_adjustment_tests.py b/internal/ceres/generate_bundle_adjustment_tests.py
index 6e60270..35865a6 100644
--- a/internal/ceres/generate_bundle_adjustment_tests.py
+++ b/internal/ceres/generate_bundle_adjustment_tests.py
@@ -221,11 +221,6 @@
     preprocessor_conditions_begin.append('#ifndef CERES_NO_CUDA')
     preprocessor_conditions_end.insert(0, '#endif  // CERES_NO_CUDA')
 
-  # Accumulate appropriate #ifdef/#ifndefs for threading conditions.
-  if thread_config == MULTI_THREADED:
-    preprocessor_conditions_begin.append('#ifndef CERES_NO_THREADS')
-    preprocessor_conditions_end.insert(0, '#endif  // CERES_NO_THREADS')
-
   # If there are #ifdefs, put newlines around them.
   if preprocessor_conditions_begin:
     preprocessor_conditions_begin.insert(0, '')
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_cuda_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_cuda_auto_threads_test.cc
index d0181e3..c0020c2 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_cuda_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_cuda_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_CUDA
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_CUDA
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_cuda_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_cuda_user_threads_test.cc
index ecda17c..042848a 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_cuda_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_cuda_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_CUDA
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_CUDA
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_eigen_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_eigen_auto_threads_test.cc
index a355e85..3c32212 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_eigen_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_eigen_auto_threads_test.cc
@@ -38,8 +38,6 @@
 #include "ceres/internal/config.h"
 #include "bundle_adjustment_test_util.h"
 
-#ifndef CERES_NO_THREADS
-
 namespace ceres::internal {
 
 TEST_F(BundleAdjustmentTest,
@@ -59,5 +57,3 @@
 }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_NO_THREADS
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_eigen_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_eigen_user_threads_test.cc
index f005c31..9335b82 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_eigen_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_eigen_user_threads_test.cc
@@ -38,8 +38,6 @@
 #include "ceres/internal/config.h"
 #include "bundle_adjustment_test_util.h"
 
-#ifndef CERES_NO_THREADS
-
 namespace ceres::internal {
 
 TEST_F(BundleAdjustmentTest,
@@ -59,5 +57,3 @@
 }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_NO_THREADS
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_lapack_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_lapack_auto_threads_test.cc
index 4e727db..1acda32 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_lapack_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_lapack_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_LAPACK
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_LAPACK
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_lapack_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_lapack_user_threads_test.cc
index e19734a..0d39dcd 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_lapack_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_denseschur_lapack_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_LAPACK
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_LAPACK
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.cc
index 93b58eb..acb5c16 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_ACCELERATE_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_ACCELERATE_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clustjacobi_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clustjacobi_user_threads_test.cc
index 053e9b2..42570c4 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clustjacobi_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clustjacobi_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_ACCELERATE_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_ACCELERATE_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clusttri_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clusttri_auto_threads_test.cc
index 723246a..f67030a 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clusttri_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clusttri_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_ACCELERATE_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_ACCELERATE_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clusttri_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clusttri_user_threads_test.cc
index 93f5353..a638cfe 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clusttri_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_acceleratesparse_clusttri_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_ACCELERATE_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_ACCELERATE_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clustjacobi_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clustjacobi_auto_threads_test.cc
index 1e9dbf0..5adb25a 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clustjacobi_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clustjacobi_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifdef CERES_USE_EIGEN_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_USE_EIGEN_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clustjacobi_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clustjacobi_user_threads_test.cc
index 0daf519..d531c34 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clustjacobi_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clustjacobi_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifdef CERES_USE_EIGEN_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_USE_EIGEN_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clusttri_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clusttri_auto_threads_test.cc
index 1ee1286..c82924c 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clusttri_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clusttri_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifdef CERES_USE_EIGEN_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_USE_EIGEN_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clusttri_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clusttri_user_threads_test.cc
index 6e08b22..f7de34f 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clusttri_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_eigensparse_clusttri_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifdef CERES_USE_EIGEN_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_USE_EIGEN_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_threads_test.cc
index e0aad44..4666424 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_auto_threads_test.cc
@@ -38,8 +38,6 @@
 #include "ceres/internal/config.h"
 #include "bundle_adjustment_test_util.h"
 
-#ifndef CERES_NO_THREADS
-
 namespace ceres::internal {
 
 TEST_F(BundleAdjustmentTest,
@@ -59,5 +57,3 @@
 }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_NO_THREADS
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_threads_test.cc
index c68f6f0..09d5bd0 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_jacobi_user_threads_test.cc
@@ -38,8 +38,6 @@
 #include "ceres/internal/config.h"
 #include "bundle_adjustment_test_util.h"
 
-#ifndef CERES_NO_THREADS
-
 namespace ceres::internal {
 
 TEST_F(BundleAdjustmentTest,
@@ -59,5 +57,3 @@
 }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_NO_THREADS
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_threads_test.cc
index 6d97eba..beaa92a 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_auto_threads_test.cc
@@ -38,8 +38,6 @@
 #include "ceres/internal/config.h"
 #include "bundle_adjustment_test_util.h"
 
-#ifndef CERES_NO_THREADS
-
 namespace ceres::internal {
 
 TEST_F(BundleAdjustmentTest,
@@ -59,5 +57,3 @@
 }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_NO_THREADS
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_threads_test.cc
index 71220f7..762f881 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_schurjacobi_user_threads_test.cc
@@ -38,8 +38,6 @@
 #include "ceres/internal/config.h"
 #include "bundle_adjustment_test_util.h"
 
-#ifndef CERES_NO_THREADS
-
 namespace ceres::internal {
 
 TEST_F(BundleAdjustmentTest,
@@ -59,5 +57,3 @@
 }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_NO_THREADS
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_threads_test.cc
index 874168d..e31446a 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_SUITESPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_SUITESPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_threads_test.cc
index ae07667..d26cc33 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clustjacobi_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_SUITESPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_SUITESPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_threads_test.cc
index aee5e5a..35df772 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_SUITESPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_SUITESPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_threads_test.cc
index 9bc2d3f..e71b4e5 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_iterschur_suitesparse_clusttri_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_SUITESPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_SUITESPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_acceleratesparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_acceleratesparse_auto_threads_test.cc
index 79769b4..38731ec 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_acceleratesparse_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_acceleratesparse_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_ACCELERATE_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_ACCELERATE_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_acceleratesparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_acceleratesparse_user_threads_test.cc
index 6131f1d..27e32d1 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_acceleratesparse_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_acceleratesparse_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_ACCELERATE_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_ACCELERATE_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_threads_test.cc
index 46e5dac..6b93727 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifdef CERES_USE_EIGEN_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_USE_EIGEN_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_threads_test.cc
index 68f3be7..a92ccfb 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_eigensparse_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifdef CERES_USE_EIGEN_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_USE_EIGEN_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_threads_test.cc
index ef11005..f8aa16f 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_SUITESPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_SUITESPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_threads_test.cc
index 862142a..09ac24e 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparsecholesky_suitesparse_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_SUITESPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_SUITESPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_acceleratesparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_acceleratesparse_auto_threads_test.cc
index 595fc15..b6b53ce 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_acceleratesparse_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_acceleratesparse_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_ACCELERATE_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_ACCELERATE_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_acceleratesparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_acceleratesparse_user_threads_test.cc
index c1302f7..da4c9df 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_acceleratesparse_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_acceleratesparse_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_ACCELERATE_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_ACCELERATE_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_threads_test.cc
index 137725b..7a8bd90 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifdef CERES_USE_EIGEN_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_USE_EIGEN_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_threads_test.cc
index 14dcabf..35c73ca 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_eigensparse_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifdef CERES_USE_EIGEN_SPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_USE_EIGEN_SPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_threads_test.cc
index cf015b8..2cdb888 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_auto_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_SUITESPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_SUITESPARSE
diff --git a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_threads_test.cc b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_threads_test.cc
index b13915e..04f3633 100644
--- a/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_threads_test.cc
+++ b/internal/ceres/generated_bundle_adjustment_tests/ba_sparseschur_suitesparse_user_threads_test.cc
@@ -39,7 +39,6 @@
 #include "bundle_adjustment_test_util.h"
 
 #ifndef CERES_NO_SUITESPARSE
-#ifndef CERES_NO_THREADS
 
 namespace ceres::internal {
 
@@ -61,5 +60,4 @@
 
 }  // namespace ceres::internal
 
-#endif  // CERES_NO_THREADS
 #endif  // CERES_NO_SUITESPARSE
diff --git a/internal/ceres/parallel_for.h b/internal/ceres/parallel_for.h
index fe5d242..d91a195 100644
--- a/internal/ceres/parallel_for.h
+++ b/internal/ceres/parallel_for.h
@@ -338,21 +338,7 @@
 }  // namespace ceres::internal
 
 // Backend-specific implementations of ParallelInvoke
-#include "ceres/parallel_for_cxx.h"
-#include "ceres/parallel_for_openmp.h"
-#ifdef CERES_NO_THREADS
-namespace ceres::internal {
-template <typename F>
-void ParallelInvoke(ContextImpl* context,
-                    int start,
-                    int end,
-                    int num_threads,
-                    const F& function) {
-  ParallelFor(context, start, end, 1, function);
-}
-}  // namespace ceres::internal
-#endif
-
 #include "ceres/internal/disable_warnings.h"
+#include "ceres/parallel_for_cxx.h"
 
 #endif  // CERES_INTERNAL_PARALLEL_FOR_H_
diff --git a/internal/ceres/parallel_for_cxx.cc b/internal/ceres/parallel_for_cxx.cc
index 13cabf9..cdf9966 100644
--- a/internal/ceres/parallel_for_cxx.cc
+++ b/internal/ceres/parallel_for_cxx.cc
@@ -28,17 +28,13 @@
 //
 // Author: vitus@google.com (Michael Vitus)
 
-// This include must come before any #ifndef check on Ceres compile options.
-#include "ceres/internal/config.h"
-
-#ifdef CERES_USE_CXX_THREADS
-
 #include <atomic>
 #include <cmath>
 #include <condition_variable>
 #include <memory>
 #include <mutex>
 
+#include "ceres/internal/config.h"
 #include "ceres/parallel_for.h"
 #include "glog/logging.h"
 
@@ -79,5 +75,3 @@
 int MaxNumThreadsAvailable() { return ThreadPool::MaxNumThreadsAvailable(); }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_USE_CXX_THREADS
diff --git a/internal/ceres/parallel_for_cxx.h b/internal/ceres/parallel_for_cxx.h
index b745a64..0731609 100644
--- a/internal/ceres/parallel_for_cxx.h
+++ b/internal/ceres/parallel_for_cxx.h
@@ -29,21 +29,16 @@
 // Authors: vitus@google.com (Michael Vitus),
 //          dmitriy.korchemkin@gmail.com (Dmitriy Korchemkin)
 
-// This include must come before any #ifndef check on Ceres compile options.
 #ifndef CERES_INTERNAL_PARALLEL_FOR_CXX_H_
 #define CERES_INTERNAL_PARALLEL_FOR_CXX_H_
 
-// This include must come before any #ifndef check on Ceres compile options.
-#include "ceres/internal/config.h"
-
-#ifdef CERES_USE_CXX_THREADS
-
 #include <atomic>
 #include <cmath>
 #include <condition_variable>
 #include <memory>
 #include <mutex>
 
+#include "ceres/internal/config.h"
 #include "glog/logging.h"
 
 namespace ceres::internal {
@@ -243,6 +238,7 @@
   // Wait until all tasks have finished.
   shared_state->block_until_finished.Block();
 }
+
 }  // namespace ceres::internal
-#endif
-#endif
+
+#endif  // CERES_INTERNAL_PARALLEL_FOR_CXX_H_
diff --git a/internal/ceres/parallel_for_nothreads.cc b/internal/ceres/parallel_for_nothreads.cc
deleted file mode 100644
index 8d3611d..0000000
--- a/internal/ceres/parallel_for_nothreads.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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.
-//
-// Author: alexs.mac@gmail.com (Alex Stewart)
-
-// This include must come before any #ifndef check on Ceres compile options.
-#include "ceres/internal/config.h"
-
-#ifdef CERES_NO_THREADS
-
-#include "ceres/parallel_for.h"
-#include "glog/logging.h"
-
-namespace ceres {
-namespace internal {
-
-int MaxNumThreadsAvailable() { return 1; }
-
-}  // namespace internal
-}  // namespace ceres
-
-#endif  // CERES_NO_THREADS
diff --git a/internal/ceres/parallel_for_openmp.cc b/internal/ceres/parallel_for_openmp.cc
deleted file mode 100644
index 02690f3..0000000
--- a/internal/ceres/parallel_for_openmp.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-// 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.
-//
-// Author: vitus@google.com (Michael Vitus)
-
-// This include must come before any #ifndef check on Ceres compile options.
-#include "ceres/internal/config.h"
-
-#if defined(CERES_USE_OPENMP)
-
-#include "ceres/parallel_for.h"
-#include "glog/logging.h"
-#include "omp.h"
-
-namespace ceres {
-namespace internal {
-
-int MaxNumThreadsAvailable() { return omp_get_max_threads(); }
-
-}  // namespace internal
-}  // namespace ceres
-
-#endif  // defined(CERES_USE_OPENMP)
diff --git a/internal/ceres/parallel_for_openmp.h b/internal/ceres/parallel_for_openmp.h
deleted file mode 100644
index 94254c4..0000000
--- a/internal/ceres/parallel_for_openmp.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// 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.
-//
-// Authors: vitus@google.com (Michael Vitus),
-//          dmitriy.korchemkin@gmail.com (Dmitriy Korchemkin)
-
-// This include must come before any #ifndef check on Ceres compile options.
-#ifndef CERES_INTERNAL_PARALLEL_FOR_OPENMP_H_
-#define CERES_INTERNAL_PARALLEL_FOR_OPENMP_H_
-
-#include "ceres/internal/config.h"
-
-#if defined(CERES_USE_OPENMP)
-
-#include "ceres/parallel_for.h"
-#include "ceres/scoped_thread_token.h"
-#include "ceres/thread_token_provider.h"
-#include "glog/logging.h"
-#include "omp.h"
-
-namespace ceres::internal {
-
-template <typename F>
-void ParallelInvoke(ContextImpl* context,
-                    int start,
-                    int end,
-                    int num_threads,
-                    const F& function) {
-  using namespace parallel_for_details;
-  ThreadTokenProvider token_provider(num_threads);
-#pragma omp parallel num_threads(num_threads)
-  {
-    const ScopedThreadToken scoped_thread_token(&token_provider);
-    const int thread_id = scoped_thread_token.token();
-#pragma omp for schedule(guided)
-    for (int i = start; i < end; ++i) {
-      Invoke<F>(thread_id, i, function);
-    }
-  }
-}
-
-}  // namespace ceres::internal
-
-#endif
-#endif
diff --git a/internal/ceres/parallel_for_test.cc b/internal/ceres/parallel_for_test.cc
index 54ca636..6974ab9 100644
--- a/internal/ceres/parallel_for_test.cc
+++ b/internal/ceres/parallel_for_test.cc
@@ -28,11 +28,6 @@
 //
 // Author: vitus@google.com (Michael Vitus)
 
-// This include must come before any #ifndef check on Ceres compile options.
-// clang-format off
-#include "ceres/internal/config.h"
-// clang-format on
-
 #include "ceres/parallel_for.h"
 
 #include <cmath>
@@ -44,6 +39,7 @@
 #include <vector>
 
 #include "ceres/context_impl.h"
+#include "ceres/internal/config.h"
 #include "glog/logging.h"
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
@@ -133,8 +129,6 @@
   }
 }
 
-// This test is only valid when multithreading support is enabled.
-#ifndef CERES_NO_THREADS
 TEST(ParallelForWithThreadId, UniqueThreadIds) {
   // Ensure the hardware supports more than 1 thread to ensure the test will
   // pass.
@@ -166,7 +160,6 @@
 
   EXPECT_THAT(x, UnorderedElementsAreArray({0, 1}));
 }
-#endif  // CERES_NO_THREADS
 
 // Helper function for partition tests
 bool BruteForcePartition(
diff --git a/internal/ceres/parallel_utils_test.cc b/internal/ceres/parallel_utils_test.cc
index fd2d792..1facb3e 100644
--- a/internal/ceres/parallel_utils_test.cc
+++ b/internal/ceres/parallel_utils_test.cc
@@ -28,13 +28,9 @@
 //
 // Author: wjr@google.com (William Rucklidge)
 
-// This include must come before any #ifndef check on Ceres compile options.
-// clang-format off
-#include "ceres/internal/config.h"
-// clang-format on
-
 #include "ceres/parallel_utils.h"
 
+#include "ceres/internal/config.h"
 #include "glog/logging.h"
 #include "gtest/gtest.h"
 
diff --git a/internal/ceres/problem_impl.cc b/internal/ceres/problem_impl.cc
index 3264166..4440526 100644
--- a/internal/ceres/problem_impl.cc
+++ b/internal/ceres/problem_impl.cc
@@ -672,17 +672,7 @@
   // the Evaluator decides the storage for the Jacobian based on the
   // type of linear solver being used.
   evaluator_options.linear_solver_type = SPARSE_NORMAL_CHOLESKY;
-#ifdef CERES_NO_THREADS
-  if (evaluate_options.num_threads > 1) {
-    LOG(WARNING)
-        << "No threading support is compiled into this binary; "
-        << "only evaluate_options.num_threads = 1 is supported. Switching "
-        << "to single threaded mode.";
-  }
-  evaluator_options.num_threads = 1;
-#else
   evaluator_options.num_threads = evaluate_options.num_threads;
-#endif  // CERES_NO_THREADS
 
   // The main thread also does work so we only need to launch num_threads - 1.
   context_impl_->EnsureMinimumThreads(evaluator_options.num_threads - 1);
diff --git a/internal/ceres/program_evaluator.h b/internal/ceres/program_evaluator.h
index 1176bb8..251a177 100644
--- a/internal/ceres/program_evaluator.h
+++ b/internal/ceres/program_evaluator.h
@@ -119,15 +119,6 @@
         jacobian_writer_(options, program),
         evaluate_preparers_(std::move(
             jacobian_writer_.CreateEvaluatePreparers(options.num_threads))) {
-#ifdef CERES_NO_THREADS
-    if (options_.num_threads > 1) {
-      LOG(WARNING) << "No threading support is compiled into this binary; "
-                   << "only options.num_threads = 1 is supported. Switching "
-                   << "to single threaded mode.";
-      options_.num_threads = 1;
-    }
-#endif  // CERES_NO_THREADS
-
     BuildResidualLayout(*program, &residual_layout_);
     evaluate_scratch_ = std::move(CreateEvaluatorScratch(
         *program, static_cast<unsigned>(options.num_threads)));
diff --git a/internal/ceres/solver_utils.cc b/internal/ceres/solver_utils.cc
index 4c4a354..de1c38b 100644
--- a/internal/ceres/solver_utils.cc
+++ b/internal/ceres/solver_utils.cc
@@ -78,12 +78,6 @@
   "-no_schur_specializations"
 #endif
 
-#ifdef CERES_USE_OPENMP
-  "-openmp"
-#else
-  "-no_openmp"
-#endif
-
 #ifdef CERES_NO_CUSTOM_BLAS
   "-no_custom_blas"
 #endif
diff --git a/internal/ceres/thread_pool.cc b/internal/ceres/thread_pool.cc
index 1fd1a4c..16b86e1 100644
--- a/internal/ceres/thread_pool.cc
+++ b/internal/ceres/thread_pool.cc
@@ -28,15 +28,12 @@
 //
 // Author: vitus@google.com (Michael Vitus)
 
-// This include must come before any #ifndef check on Ceres compile options.
-#include "ceres/internal/config.h"
-
-#ifdef CERES_USE_CXX_THREADS
+#include "ceres/thread_pool.h"
 
 #include <cmath>
 #include <limits>
 
-#include "ceres/thread_pool.h"
+#include "ceres/internal/config.h"
 
 namespace ceres::internal {
 namespace {
@@ -105,5 +102,3 @@
 void ThreadPool::Stop() { task_queue_.StopWaiters(); }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_USE_CXX_THREADS
diff --git a/internal/ceres/thread_pool_test.cc b/internal/ceres/thread_pool_test.cc
index e64011d..63b05d0 100644
--- a/internal/ceres/thread_pool_test.cc
+++ b/internal/ceres/thread_pool_test.cc
@@ -28,17 +28,14 @@
 //
 // Author: vitus@google.com (Michael Vitus)
 
-// This include must come before any #ifndef check on Ceres compile options.
-#include "ceres/internal/config.h"
-
-#ifdef CERES_USE_CXX_THREADS
+#include "ceres/thread_pool.h"
 
 #include <chrono>
 #include <condition_variable>
 #include <mutex>
 #include <thread>
 
-#include "ceres/thread_pool.h"
+#include "ceres/internal/config.h"
 #include "glog/logging.h"
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
@@ -193,5 +190,3 @@
 }
 
 }  // namespace ceres::internal
-
-#endif  // CERES_USE_CXX_THREADS
diff --git a/internal/ceres/thread_token_provider.cc b/internal/ceres/thread_token_provider.cc
index e48964c..c9bb3fc 100644
--- a/internal/ceres/thread_token_provider.cc
+++ b/internal/ceres/thread_token_provider.cc
@@ -30,42 +30,20 @@
 
 #include "ceres/thread_token_provider.h"
 
-#ifdef CERES_USE_OPENMP
-#include <omp.h>
-#endif
-
 namespace ceres::internal {
 
 ThreadTokenProvider::ThreadTokenProvider(int num_threads) {
-  (void)num_threads;
-#ifdef CERES_USE_CXX_THREADS
   for (int i = 0; i < num_threads; i++) {
     pool_.Push(i);
   }
-#endif
 }
 
 int ThreadTokenProvider::Acquire() {
-#ifdef CERES_USE_OPENMP
-  return omp_get_thread_num();
-#endif
-
-#ifdef CERES_NO_THREADS
-  return 0;
-#endif
-
-#ifdef CERES_USE_CXX_THREADS
   int thread_id;
   CHECK(pool_.Wait(&thread_id));
   return thread_id;
-#endif
 }
 
-void ThreadTokenProvider::Release(int thread_id) {
-  (void)thread_id;
-#ifdef CERES_USE_CXX_THREADS
-  pool_.Push(thread_id);
-#endif
-}
+void ThreadTokenProvider::Release(int thread_id) { pool_.Push(thread_id); }
 
 }  // namespace ceres::internal
diff --git a/internal/ceres/thread_token_provider.h b/internal/ceres/thread_token_provider.h
index d8640df..b14df0e 100644
--- a/internal/ceres/thread_token_provider.h
+++ b/internal/ceres/thread_token_provider.h
@@ -31,13 +31,10 @@
 #ifndef CERES_INTERNAL_THREAD_TOKEN_PROVIDER_H_
 #define CERES_INTERNAL_THREAD_TOKEN_PROVIDER_H_
 
+#include "ceres/concurrent_queue.h"
 #include "ceres/internal/config.h"
 #include "ceres/internal/export.h"
 
-#ifdef CERES_USE_CXX_THREADS
-#include "ceres/concurrent_queue.h"
-#endif
-
 namespace ceres::internal {
 
 // Helper for C++ thread number identification that is similar to
@@ -47,12 +44,6 @@
 // 0 to num_threads - 1 that can be acquired to identify the thread in a thread
 // pool.
 //
-// If CERES_NO_THREADS is defined, Acquire() always returns 0 and Release()
-// takes no action.
-//
-// If CERES_USE_OPENMP, omp_get_thread_num() is used to Acquire() with no action
-// in Release()
-//
 //
 // Example usage pseudocode:
 //
@@ -77,15 +68,12 @@
   void Release(int thread_id);
 
  private:
-#ifdef CERES_USE_CXX_THREADS
   // This queue initially holds a sequence from 0..num_threads-1. Every
   // Acquire() call the first number is removed from here. When the token is not
   // needed anymore it shall be given back with corresponding Release()
   // call. This concurrent queue is more expensive than TBB's version, so you
   // should not acquire the thread ID on every for loop iteration.
   ConcurrentQueue<int> pool_;
-#endif
-
   ThreadTokenProvider(ThreadTokenProvider&) = delete;
   ThreadTokenProvider& operator=(ThreadTokenProvider&) = delete;
 };
diff --git a/internal/ceres/wall_time.cc b/internal/ceres/wall_time.cc
index c36092a..f57da31 100644
--- a/internal/ceres/wall_time.cc
+++ b/internal/ceres/wall_time.cc
@@ -30,13 +30,9 @@
 
 #include "ceres/wall_time.h"
 
-#include "ceres/internal/config.h"
-
-#ifdef CERES_USE_OPENMP
-#include <omp.h>
-#else
 #include <ctime>
-#endif
+
+#include "ceres/internal/config.h"
 
 #ifdef _WIN32
 #include <windows.h>
@@ -47,9 +43,6 @@
 namespace ceres::internal {
 
 double WallTimeInSeconds() {
-#ifdef CERES_USE_OPENMP
-  return omp_get_wtime();
-#else
 #ifdef _WIN32
   LARGE_INTEGER count;
   LARGE_INTEGER frequency;
@@ -62,7 +55,6 @@
   gettimeofday(&time_val, nullptr);
   return (time_val.tv_sec + time_val.tv_usec * 1e-6);
 #endif
-#endif
 }
 
 EventLogger::EventLogger(const std::string& logger_name) {