Remove AutodiffCodegen CMake integration
Change-Id: I403597540df8429378336626b8f748b7821fe6f5
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 236bb50..f11e579 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -771,12 +771,6 @@
"${Ceres_SOURCE_DIR}/cmake/FindGlog.cmake"
DESTINATION ${RELATIVE_CMAKECONFIG_INSTALL_DIR})
-# Install codegen cmake scripts
-install(FILES "${Ceres_SOURCE_DIR}/cmake/codegen_include.inc.in"
- "${Ceres_SOURCE_DIR}/cmake/generate_code_for_functor.cc.in"
- "${Ceres_SOURCE_DIR}/cmake/CeresCodeGeneration.cmake"
- DESTINATION ${RELATIVE_CMAKECONFIG_INSTALL_DIR})
-
if (PROVIDE_UNINSTALL_TARGET)
# Create an uninstall target to remove all installed files.
configure_file("${Ceres_SOURCE_DIR}/cmake/uninstall.cmake.in"
diff --git a/cmake/CeresCodeGeneration.cmake b/cmake/CeresCodeGeneration.cmake
deleted file mode 100644
index f3819ce..0000000
--- a/cmake/CeresCodeGeneration.cmake
+++ /dev/null
@@ -1,153 +0,0 @@
-# Ceres Solver - A fast non-linear least squares minimizer
-# Copyright 2019 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: darius.rueckert@fau.de (Darius Rueckert)
-
-# The directory containing the following files
-# - codegen_include.h.in
-# - generate_code_from_functor.cc.in
-set(CODEGEN_CMAKE_SCRIPT_DIR "${CMAKE_CURRENT_LIST_DIR}")
-
-# Generates C-code implementation of Ceres' CostFunction::Evaluate() API from a
-# templated C++ cost functor derived from ceres::CodegenCostFunction using
-# autodiff. The resulting implementation replaces the direct instantiation of
-# autodiff in client code, typically resulting in improved performance.
-#
-# Parameters:
-#
-# NAME
-# The name of the cost functor. The name must exactly match the C++ type
-# name of the functor. This is also the name of the CMake output target.
-# NAMESPACE [optional]
-# The C++ namespace of the cost functor type. For example, if the full
-# type name is ceres::BundleAdjust, then NAME should be "BundleAdjust"
-# and NAMESPACE should be "ceres".
-# INPUT_FILE
-# The path to the header defining the cost functor <NAME>.
-# OUTPUT_DIRECTORY [default = "generated"]
-# The relative output directory of the generated header file. This is the
-# prefix that has to be added to the #include of the generated files, i.e:
-# #include "<OUTPUT_DIRECTORY>/<GENERATED_FILE.h>"
-
-#
-# Example Usage:
-# ceres_generate_cost_function_implementation_for_functor(
-# NAME SquareFunctor
-# INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/square_functor.h
-# )
-# add_executable(helloworld_codegen helloworld_codegen.cc )
-# target_link_libraries(helloworld_codegen ceres SquareFunctor)
-function(ceres_generate_cost_function_implementation_for_functor)
- # Define and parse arguments
- set(OPTIONAL_ARGS)
- set(ONE_VALUE_ARGS NAME INPUT_FILE OUTPUT_DIRECTORY NAMESPACE)
- set(MULTI_VALUE_ARGS)
- cmake_parse_arguments(
- COST_FUNCTOR "${OPTIONAL_ARGS}" "${ONE_VALUE_ARGS}"
- "${MULTI_VALUE_ARGS}" ${ARGN} )
-
- # Default value of the output directory
- set(OUTPUT_DIRECTORY "generated")
- if(COST_FUNCTOR_OUTPUT_DIRECTORY)
- set(OUTPUT_DIRECTORY "${COST_FUNCTOR_OUTPUT_DIRECTORY}")
- endif()
-
- set(CALLER_CODEGEN_BUILD_DIR "${PROJECT_BINARY_DIR}/codegen")
- set(CALLER_CODEGEN_INCLUDE_DIR "${CALLER_CODEGEN_BUILD_DIR}/include/")
-
- file(MAKE_DIRECTORY
- "${CALLER_CODEGEN_BUILD_DIR}")
- file(MAKE_DIRECTORY
- "${CALLER_CODEGEN_INCLUDE_DIR}/${OUTPUT_DIRECTORY}")
- file(MAKE_DIRECTORY
- "${CALLER_CODEGEN_BUILD_DIR}/src")
-
- # Convert the input file to an absolute path and check if it exists
- get_filename_component(
- COST_FUNCTOR_INPUT_FILE "${COST_FUNCTOR_INPUT_FILE}" REALPATH)
- if(NOT EXISTS "${COST_FUNCTOR_INPUT_FILE}")
- message(FATAL_ERROR
- "Could not find codegen input file ${COST_FUNCTOR_INPUT_FILE}")
- endif()
-
-
- # The full C++ type name of the cost functor. This is used inside the
- # generator to create an object of it.
- set(FULL_CXX_FUNCTOR_TYPE_NAME "${COST_FUNCTOR_NAME}")
- if(COST_FUNCTOR_NAMESPACE)
- set(FULL_CXX_FUNCTOR_TYPE_NAME
- "${COST_FUNCTOR_NAMESPACE}::${FULL_CXX_FUNCTOR_TYPE_NAME}")
- endif()
-
- # 1. Generate a wrapper include file which is included by the user.
- # This is required, because
- # - It must exist during compiliation of the code generator (otherwise
- # the #include will fail)
- # - We don't want to have the users add macros to their code
- string(TOLOWER "${COST_FUNCTOR_NAME}" LOWER_CASE_FUNCTOR_NAME)
- set(INCLUDE_FILE
- "${CALLER_CODEGEN_INCLUDE_DIR}/${OUTPUT_DIRECTORY}/${LOWER_CASE_FUNCTOR_NAME}.h")
- configure_file("${CODEGEN_CMAKE_SCRIPT_DIR}/codegen_include.inc.in" "${INCLUDE_FILE}")
-
- # 2. Generate the source file for the code generator
- set(GENERATOR_SOURCE
- "${CALLER_CODEGEN_BUILD_DIR}/src/${LOWER_CASE_FUNCTOR_NAME}_code_generator.cc")
- set(GENERATED_EVALUATION_IMPL_FILE
- "${CALLER_CODEGEN_INCLUDE_DIR}/${OUTPUT_DIRECTORY}/${LOWER_CASE_FUNCTOR_NAME}_evaluate_impl.inc")
- configure_file(
- "${CODEGEN_CMAKE_SCRIPT_DIR}/generate_code_for_functor.cc.in" "${GENERATOR_SOURCE}")
-
- # 3. Build the executable that generates the autodiff code
- set(GENERATOR_TARGET ${COST_FUNCTOR_NAME}_generator)
- add_executable(${GENERATOR_TARGET} "${GENERATOR_SOURCE}")
- target_link_libraries(${GENERATOR_TARGET} ceres)
- set_target_properties(${GENERATOR_TARGET} PROPERTIES
- RUNTIME_OUTPUT_DIRECTORY "${CALLER_CODEGEN_BUILD_DIR}/bin")
- target_compile_definitions(${GENERATOR_TARGET} PRIVATE -DCERES_CODEGEN)
- target_include_directories(${GENERATOR_TARGET}
- PRIVATE "${CALLER_CODEGEN_INCLUDE_DIR}")
-
- # 4. Execute the program from (3.) using a custom command
- add_custom_command(OUTPUT "${GENERATED_EVALUATION_IMPL_FILE}"
- COMMAND ${GENERATOR_TARGET}
- DEPENDS "${COST_FUNCTOR_INPUT_FILE}"
- VERBATIM
- )
- set(GENERATE_TARGET ${COST_FUNCTOR_NAME}_generate)
- add_custom_target(${GENERATE_TARGET} DEPENDS "${GENERATED_EVALUATION_IMPL_FILE}" VERBATIM)
-
- # 5. Create an output target which can be used by the client. This is required,
- # because custom targets can't have include directories.
- set(OUTPUT_TARGET ${COST_FUNCTOR_NAME})
- add_library(${OUTPUT_TARGET} INTERFACE)
- target_include_directories(
- ${OUTPUT_TARGET} INTERFACE "${CALLER_CODEGEN_INCLUDE_DIR}")
- target_sources(
- ${OUTPUT_TARGET} INTERFACE "${INCLUDE_FILE}" "${GENERATED_EVALUATION_IMPL_FILE}")
- add_dependencies(${OUTPUT_TARGET} ${GENERATE_TARGET})
-endfunction()
diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in
index cb0fd7b..ced7daf 100644
--- a/cmake/CeresConfig.cmake.in
+++ b/cmake/CeresConfig.cmake.in
@@ -166,10 +166,6 @@
include(CMakeFindDependencyMacro)
find_dependency(Threads)
-# Import code generation functions s/t they are available for use in client code
-# if find_package(Ceres) is successful.
-include(CeresCodeGeneration)
-
# Eigen.
# Flag set during configuration and build of Ceres.
set(CERES_EIGEN_VERSION @EIGEN3_VERSION_STRING@)
diff --git a/cmake/codegen_include.inc.in b/cmake/codegen_include.inc.in
deleted file mode 100644
index f52485b..0000000
--- a/cmake/codegen_include.inc.in
+++ /dev/null
@@ -1,10 +0,0 @@
-// This file is generated by Ceres autodiff code generation.
-// http://ceres-solver.org/
-
-#ifdef CERES_CODEGEN
-// Included by generator during generation of autodiff evaluation implementation,
-// by definition the generated implementation does not yet exist to be imported.
-#else
-// Included from client code, import generated implementation.
-#include "@OUTPUT_DIRECTORY@/@LOWER_CASE_FUNCTOR_NAME@_evaluate_impl.inc"
-#endif
diff --git a/cmake/generate_code_for_functor.cc.in b/cmake/generate_code_for_functor.cc.in
deleted file mode 100644
index e259f71..0000000
--- a/cmake/generate_code_for_functor.cc.in
+++ /dev/null
@@ -1,27 +0,0 @@
-// This file is generated by Ceres autodiff code generation."
-// http://ceres-solver.org/
-
-#include <cstdlib>
-#include <fstream>
-#include <iostream>
-#include <string>
-#include <vector>
-
-#include "ceres/codegen/generate_code_for_functor.h"
-#include "@COST_FUNCTOR_INPUT_FILE@"
-
-int main() {
- const std::vector<std::string> lines =
- ceres::GenerateCodeForFunctor<@FULL_CXX_FUNCTOR_TYPE_NAME@>(
- ceres::AutoDiffCodeGenOptions());
- const std::string output_file = "@GENERATED_EVALUATION_IMPL_FILE@";
- std::ofstream stream(output_file);
- if (!stream.is_open()) {
- std::cerr << "Could not open file " << output_file << std::endl;
- return EXIT_FAILURE;
- }
- for (const auto& line : lines) {
- stream << line << std::endl;
- }
- return EXIT_SUCCESS;
-}