From 78b916040fe1a518929a4ff54a3a7af06b9f9a4f Mon Sep 17 00:00:00 2001
From: Erik Strand <erik.strand@cba.mit.edu>
Date: Thu, 16 Apr 2020 11:34:30 -0400
Subject: [PATCH] Ensure everything can be built without vis

I now regret choosing to use a cmake option for this, since I want vis
and no vis executables to co-exist in the same project. For now I just
have two separate build folders, but I think I should overhaul
everything to use a template based strategy soon.
---
 CMakeLists.txt                                       |  4 +++-
 optimization/optimizers/cma_es/CMakeLists.txt        |  9 +++++----
 optimization/optimizers/cma_es/cma_es_log.h          |  2 +-
 optimization/optimizers/cma_es/main.cpp              | 12 +++++++++---
 .../conjugate_gradient_descent/CMakeLists.txt        |  9 +++++----
 .../optimizers/conjugate_gradient_descent/main.cpp   | 12 +++++++++---
 .../optimizers/gradient_descent/CMakeLists.txt       |  9 +++++----
 .../gradient_descent/gradient_descent_log.h          |  2 +-
 optimization/optimizers/gradient_descent/main.cpp    | 12 +++++++++---
 optimization/optimizers/nelder_mead/CMakeLists.txt   |  9 +++++----
 optimization/optimizers/nelder_mead/main.cpp         | 12 +++++++++---
 11 files changed, 61 insertions(+), 31 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0a9a749..5027b37 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,4 +22,6 @@ add_subdirectory(external)
 add_subdirectory(optimization)
 add_subdirectory(test)
 
-make_meta_plot_target()
+if (VISUALIZE)
+    make_meta_plot_target()
+endif()
diff --git a/optimization/optimizers/cma_es/CMakeLists.txt b/optimization/optimizers/cma_es/CMakeLists.txt
index 710da45..1eefff0 100644
--- a/optimization/optimizers/cma_es/CMakeLists.txt
+++ b/optimization/optimizers/cma_es/CMakeLists.txt
@@ -1,8 +1,9 @@
+add_executable(cma_es
+    main.cpp
+)
+target_link_libraries(cma_es optimization_lib cma-es clara)
+
 if (VISUALIZE)
-    add_executable(cma_es
-        main.cpp
-    )
-    target_link_libraries(cma_es optimization_lib cma-es clara)
     make_plot_target(cma_es 2d ARGS -d 2)
     make_plot_target(cma_es 10d ARGS -d 10 -n 10000)
 endif()
diff --git a/optimization/optimizers/cma_es/cma_es_log.h b/optimization/optimizers/cma_es/cma_es_log.h
index 613186a..00aff53 100644
--- a/optimization/optimizers/cma_es/cma_es_log.h
+++ b/optimization/optimizers/cma_es/cma_es_log.h
@@ -27,7 +27,7 @@ struct CmaEsState {
 struct CmaEsLog {
     inline void reserve(uint32_t n) VIS_ONLY_METHOD;
     template <typename Objective>
-    inline void initialize(Objective const&);
+    inline void initialize(Objective const&) VIS_ONLY_METHOD;
     inline void push_back(
         double const* const* points,
         double const* values,
diff --git a/optimization/optimizers/cma_es/main.cpp b/optimization/optimizers/cma_es/main.cpp
index 44a837d..e79cb58 100644
--- a/optimization/optimizers/cma_es/main.cpp
+++ b/optimization/optimizers/cma_es/main.cpp
@@ -1,14 +1,18 @@
 #include "clara.hpp"
 #include "cma_es.h"
-#include "cma_es_vis.h"
 #include "objectives/paraboloid.h"
 #include "objectives/rosenbrock.h"
-#include "utils/eigen_json.h"
 #include <iostream>
+
+#ifdef VISUALIZE
+#include "cma_es_vis.h"
+#include "utils/eigen_json.h"
 #include <fstream>
 
-using namespace optimization;
 using json = nlohmann::json;
+#endif
+
+using namespace optimization;
 
 //--------------------------------------------------------------------------------------------------
 int main(int const argc, char const** argv) {
@@ -66,6 +70,7 @@ int main(int const argc, char const** argv) {
     std::cout << "n generations: " << optimizer.n_iterations() << '\n';
     std::cout << "final point: " << minimum << '\n';
 
+    #ifdef VISUALIZE
     if (!log_file_path.empty()) {
         json data = optimizer;
         std::ofstream log_file(log_file_path);
@@ -77,6 +82,7 @@ int main(int const argc, char const** argv) {
         std::ofstream vis_file(vis_file_path);
         vis_file << data.dump(4) << '\n';
     }
+    #endif
 
     return 0;
 }
diff --git a/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt b/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt
index 273708d..d03a805 100644
--- a/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt
+++ b/optimization/optimizers/conjugate_gradient_descent/CMakeLists.txt
@@ -1,8 +1,9 @@
+add_executable(conjugate_gradient_descent
+    main.cpp
+)
+target_link_libraries(conjugate_gradient_descent optimization_lib clara)
+
 if (VISUALIZE)
-    add_executable(conjugate_gradient_descent
-        main.cpp
-    )
-    target_link_libraries(conjugate_gradient_descent optimization_lib clara)
     make_plot_target(conjugate_gradient_descent 2d ARGS -d 2)
     make_plot_target(conjugate_gradient_descent 10d ARGS -d 10)
 endif()
diff --git a/optimization/optimizers/conjugate_gradient_descent/main.cpp b/optimization/optimizers/conjugate_gradient_descent/main.cpp
index 6ef1544..ce156ba 100644
--- a/optimization/optimizers/conjugate_gradient_descent/main.cpp
+++ b/optimization/optimizers/conjugate_gradient_descent/main.cpp
@@ -1,14 +1,18 @@
 #include "clara.hpp"
 #include "conjugate_gradient_descent.h"
-#include "conjugate_gradient_descent_vis.h"
 #include "objectives/paraboloid.h"
 #include "objectives/rosenbrock.h"
-#include "utils/eigen_json.h"
 #include <iostream>
+
+#ifdef VISUALIZE
+#include "conjugate_gradient_descent_vis.h"
+#include "utils/eigen_json.h"
 #include <fstream>
 
-using namespace optimization;
 using json = nlohmann::json;
+#endif
+
+using namespace optimization;
 
 //--------------------------------------------------------------------------------------------------
 int main(int const argc, char const** argv) {
@@ -56,6 +60,7 @@ int main(int const argc, char const** argv) {
     std::cout << "n evaluations: " << optimizer.n_evaluations() << '\n';
     std::cout << "final point: " << minimum << '\n';
 
+    #ifdef VISUALIZE
     if (!log_file_path.empty()) {
         json data = optimizer;
         std::ofstream log_file(log_file_path);
@@ -67,6 +72,7 @@ int main(int const argc, char const** argv) {
         std::ofstream vis_file(vis_file_path);
         vis_file << data.dump(4) << '\n';
     }
+    #endif
 
     return 0;
 }
diff --git a/optimization/optimizers/gradient_descent/CMakeLists.txt b/optimization/optimizers/gradient_descent/CMakeLists.txt
index c2c7703..a1f0d4b 100644
--- a/optimization/optimizers/gradient_descent/CMakeLists.txt
+++ b/optimization/optimizers/gradient_descent/CMakeLists.txt
@@ -1,8 +1,9 @@
+add_executable(gradient_descent
+    main.cpp
+)
+target_link_libraries(gradient_descent optimization_lib clara)
+
 if (VISUALIZE)
-    add_executable(gradient_descent
-        main.cpp
-    )
-    target_link_libraries(gradient_descent optimization_lib clara)
     make_plot_target(gradient_descent 2d ARGS -d 2 -l 0.0015)
     make_plot_target(gradient_descent 10d ARGS -d 10 -l 0.0005 -n 10000)
 endif()
diff --git a/optimization/optimizers/gradient_descent/gradient_descent_log.h b/optimization/optimizers/gradient_descent/gradient_descent_log.h
index 1d2a8a2..7011c07 100644
--- a/optimization/optimizers/gradient_descent/gradient_descent_log.h
+++ b/optimization/optimizers/gradient_descent/gradient_descent_log.h
@@ -20,7 +20,7 @@ template <int32_t N>
 struct GradientDescentLog {
     void reserve(uint32_t n) VIS_ONLY_METHOD;
     template <typename Objective>
-    void initialize(Objective const&);
+    void initialize(Objective const&) VIS_ONLY_METHOD;
     void push_back(
         VectorNs<N> const& point,
         Scalar value,
diff --git a/optimization/optimizers/gradient_descent/main.cpp b/optimization/optimizers/gradient_descent/main.cpp
index 8545769..47820b6 100644
--- a/optimization/optimizers/gradient_descent/main.cpp
+++ b/optimization/optimizers/gradient_descent/main.cpp
@@ -1,14 +1,18 @@
 #include "clara.hpp"
 #include "gradient_descent.h"
-#include "gradient_descent_vis.h"
 #include "objectives/paraboloid.h"
 #include "objectives/rosenbrock.h"
-#include "utils/eigen_json.h"
 #include <iostream>
+
+#ifdef VISUALIZE
+#include "gradient_descent_vis.h"
+#include "utils/eigen_json.h"
 #include <fstream>
 
-using namespace optimization;
 using json = nlohmann::json;
+#endif
+
+using namespace optimization;
 
 //--------------------------------------------------------------------------------------------------
 int main(int const argc, char const** argv) {
@@ -53,6 +57,7 @@ int main(int const argc, char const** argv) {
     std::cout << "n evaluations: " << n_steps << '\n';
     std::cout << "final point: " << minimum << '\n';
 
+    #ifdef VISUALIZE
     if (!log_file_path.empty()) {
         json data = optimizer;
         std::ofstream log_file(log_file_path);
@@ -64,6 +69,7 @@ int main(int const argc, char const** argv) {
         std::ofstream vis_file(vis_file_path);
         vis_file << data.dump(4) << '\n';
     }
+    #endif
 
     return 0;
 }
diff --git a/optimization/optimizers/nelder_mead/CMakeLists.txt b/optimization/optimizers/nelder_mead/CMakeLists.txt
index cd984f8..dd74919 100644
--- a/optimization/optimizers/nelder_mead/CMakeLists.txt
+++ b/optimization/optimizers/nelder_mead/CMakeLists.txt
@@ -1,8 +1,9 @@
+add_executable(nelder_mead
+    main.cpp
+)
+target_link_libraries(nelder_mead optimization_lib clara)
+
 if (VISUALIZE)
-    add_executable(nelder_mead
-        main.cpp
-    )
-    target_link_libraries(nelder_mead optimization_lib clara)
     make_plot_target(nelder_mead 2d ARGS -d 2)
     make_plot_target(nelder_mead 10d ARGS -d 10 -n 10000)
 endif()
diff --git a/optimization/optimizers/nelder_mead/main.cpp b/optimization/optimizers/nelder_mead/main.cpp
index e752226..b2819e2 100644
--- a/optimization/optimizers/nelder_mead/main.cpp
+++ b/optimization/optimizers/nelder_mead/main.cpp
@@ -1,14 +1,18 @@
 #include "clara.hpp"
 #include "nelder_mead.h"
-#include "nelder_mead_vis.h"
 #include "objectives/paraboloid.h"
 #include "objectives/rosenbrock.h"
-#include "utils/eigen_json.h"
 #include <iostream>
+
+#ifdef VISUALIZE
+#include "nelder_mead_vis.h"
+#include "utils/eigen_json.h"
 #include <fstream>
 
-using namespace optimization;
 using json = nlohmann::json;
+#endif
+
+using namespace optimization;
 
 //--------------------------------------------------------------------------------------------------
 int main(int const argc, char const** argv) {
@@ -49,6 +53,7 @@ int main(int const argc, char const** argv) {
     std::cout << "n evaluations: " << optimizer.n_evaluations() << '\n';
     std::cout << "final point: " << minimum << '\n';
 
+    #ifdef VISUALIZE
     if (!log_file_path.empty()) {
         json data = optimizer;
         std::ofstream log_file(log_file_path);
@@ -60,6 +65,7 @@ int main(int const argc, char const** argv) {
         std::ofstream vis_file(vis_file_path);
         vis_file << data.dump(4) << '\n';
     }
+    #endif
 
     return 0;
 }
-- 
GitLab