From d041901a3002b80eafc8a4b2ab955f8f6b23ecda Mon Sep 17 00:00:00 2001
From: Hamish Milne <hamishmilne83@gmail.com>
Date: Sat, 28 Dec 2019 23:13:39 +0000
Subject: [PATCH] Some more CI fixes

---
 CMakeLists.txt                            |  4 +-
 TODO                                      |  3 +-
 src/CMakeLists.txt                        |  8 ++-
 src/common/CMakeLists.txt                 |  1 -
 src/common/serialization/optional.h       | 76 -----------------------
 src/core/hle/service/apt/applet_manager.h |  2 +-
 6 files changed, 11 insertions(+), 83 deletions(-)
 delete mode 100644 src/common/serialization/optional.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
index df8081f05..ac05c91c7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -126,9 +126,9 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
 
 add_library(boost_libs INTERFACE)
 
-find_package(Boost 1.66.0 QUIET)
+find_package(Boost 1.70.0 QUIET EXACT)
 if (NOT Boost_FOUND)
-    message(STATUS "Boost 1.66.0 or newer not found, falling back to externals")
+    message(STATUS "Boost 1.70.0 not found, falling back to externals")
 
     set(BOOST_ROOT "${PROJECT_SOURCE_DIR}/externals/boost")
     set(Boost_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/externals/boost")
diff --git a/TODO b/TODO
index be118365d..45e6ae3b7 100644
--- a/TODO
+++ b/TODO
@@ -3,7 +3,8 @@
 ✔ Memory @done(19-08-13 15:41)
     ☐ Page tables
     ☐ Skip N3DS RAM if unused
-☐ DSP
+✔ DSP @done(19-12-28 16:57)
+    Memory only
 ✔ Service manager @started(19-12-23 00:36) @done(19-12-23 11:38) @lasted(11h2m3s)
     ✔ Fix or ignore inverse map @done(19-12-23 12:46)
 ☐ App loader
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4a4c39f17..c13337efe 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -33,7 +33,6 @@ if (MSVC)
     # /Zc:throwingNew     - Let codegen assume `operator new` (without std::nothrow) will never return null
     add_compile_options(
         /W3
-        /MP
         /Zi
         /Zo
         /permissive-
@@ -42,8 +41,13 @@ if (MSVC)
         /volatile:iso
         /Zc:externConstexpr
         /Zc:inline
-        /Zc:throwingNew
     )
+    if (CMAKE_C_COMPILER_ID MATCHES "MSVC")
+        add_compile_options(
+            /MP
+            /Zc:throwingNew
+        )
+    endif()
 
     # /GS- - No stack buffer overflow checks
     add_compile_options("$<$<CONFIG:Release>:/GS->")
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index ac745d868..39ddffbcc 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -96,7 +96,6 @@ add_library(common STATIC
     serialization/boost_discrete_interval.hpp
     serialization/boost_flat_set.h
     serialization/boost_vector.hpp
-    serialization/optional.h
     string_util.cpp
     string_util.h
     swap.h
diff --git a/src/common/serialization/optional.h b/src/common/serialization/optional.h
deleted file mode 100644
index 4e794058e..000000000
--- a/src/common/serialization/optional.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#pragma once
-
-#include <boost/config.hpp>
-
-#include <boost/archive/detail/basic_iarchive.hpp>
-
-#include <optional>
-#include <boost/move/utility_core.hpp>
-
-#include <boost/serialization/detail/is_default_constructible.hpp>
-#include <boost/serialization/detail/stack_constructor.hpp>
-#include <boost/serialization/force_include.hpp>
-#include <boost/serialization/item_version_type.hpp>
-#include <boost/serialization/level.hpp>
-#include <boost/serialization/nvp.hpp>
-#include <boost/serialization/split_free.hpp>
-#include <boost/serialization/version.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-
-// function specializations must be defined in the appropriate
-// namespace - boost::serialization
-namespace boost {
-namespace serialization {
-
-template <class Archive, class T>
-void save(Archive& ar, const std::optional<T>& t, const unsigned int /*version*/
-) {
-// It is an inherent limitation to the serialization of optional.hpp
-// that the underlying type must be either a pointer or must have a
-// default constructor.  It's possible that this could change sometime
-// in the future, but for now, one will have to work around it.  This can
-// be done by serialization the optional<T> as optional<T *>
-#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
-    BOOST_STATIC_ASSERT(boost::serialization::detail::is_default_constructible<T>::value ||
-                        boost::is_pointer<T>::value);
-#endif
-    const bool tflag = t.has_value();
-    ar << boost::serialization::make_nvp("initialized", tflag);
-    if (tflag) {
-        ar << boost::serialization::make_nvp("value", *t);
-    }
-}
-
-template <class Archive, class T>
-void load(Archive& ar, std::optional<T>& t, const unsigned int version) {
-    bool tflag;
-    ar >> boost::serialization::make_nvp("initialized", tflag);
-    if (!tflag) {
-        t.reset();
-        return;
-    }
-
-    if (0 == version) {
-        boost::serialization::item_version_type item_version(0);
-        boost::archive::library_version_type library_version(ar.get_library_version());
-        if (boost::archive::library_version_type(3) < library_version) {
-            ar >> BOOST_SERIALIZATION_NVP(item_version);
-        }
-    }
-    if (!t.has_value())
-        t = T();
-    ar >> boost::serialization::make_nvp("value", *t);
-}
-
-template <class Archive, class T>
-void serialize(Archive& ar, std::optional<T>& t, const unsigned int version) {
-    boost::serialization::split_free(ar, t, version);
-}
-
-template <class T>
-struct version<std::optional<T>> {
-    BOOST_STATIC_CONSTANT(int, value = 1);
-};
-
-} // namespace serialization
-} // namespace boost
diff --git a/src/core/hle/service/apt/applet_manager.h b/src/core/hle/service/apt/applet_manager.h
index 0f28e57c8..7260fb2d3 100644
--- a/src/core/hle/service/apt/applet_manager.h
+++ b/src/core/hle/service/apt/applet_manager.h
@@ -8,8 +8,8 @@
 #include <memory>
 #include <vector>
 #include <boost/serialization/array.hpp>
-#include <boost/serialization/shared_ptr.hpp>
 #include <boost/serialization/optional.hpp>
+#include <boost/serialization/shared_ptr.hpp>
 #include "core/global.h"
 #include "core/hle/kernel/event.h"
 #include "core/hle/result.h"