build: support building with subprojects
Enable everything to build outside of an OE-SDK by leveraging
subproject wrap files. Needed to update C++ to C++20 as well
in order to allow phosphor-logging to compile.
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I43f5fcd53ef3ac024d7b5ce50fd035903d08bab0
diff --git a/.gitignore b/.gitignore
index 378eac2..6da54be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
-build
+build*/
+subprojects/*
+!subprojects/*.wrap
diff --git a/meson.build b/meson.build
index 29939ed..e182f46 100644
--- a/meson.build
+++ b/meson.build
@@ -1,10 +1,11 @@
project('phosphor-bmc-code-mgmt', 'cpp',
default_options: [
'buildtype=debugoptimized',
- 'cpp_std=c++17',
+ 'cpp_std=c++20',
'warning_level=3',
'werror=true'
],
+ meson_version: '>= 0.57.0',
license: 'Apache-2.0',
version: '1.0')
@@ -19,6 +20,8 @@
language: 'cpp',
)
+cpp = meson.get_compiler('cpp')
+
conf = configuration_data()
# DBus information
@@ -96,10 +99,52 @@
configure_file(output: 'config.h', configuration: conf)
+sdbusplus_dep = dependency('sdbusplus', required: false)
+sdbusplus_proj = dependency('', required: false)
+if not sdbusplus_dep.found() or sdbusplus_dep.type_name() == 'internal'
+ sdbusplus_proj = subproject('sdbusplus')
+endif
+if not sdbusplus_dep.found()
+ sdbusplus_dep = sdbusplus_proj.get_variable('sdbusplus_dep')
+endif
+
+if sdbusplus_proj.found()
+ sdbusplusplus_prog = sdbusplus_proj.get_variable('sdbusplusplus_prog')
+ sdbuspp_gen_meson_prog = sdbusplus_proj.get_variable(
+ 'sdbuspp_gen_meson_prog')
+else
+ sdbusplusplus_prog = find_program('sdbus++', native: true)
+ sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson', native: true)
+endif
+
+cereal_dep = dependency('cereal', required: false)
+has_cereal = cpp.has_header_symbol(
+ 'cereal/cereal.hpp',
+ 'cereal::specialize',
+ dependencies: cereal_dep,
+ required: false)
+if not has_cereal
+ cereal_opts = import('cmake').subproject_options()
+ cereal_opts.add_cmake_defines({'BUILD_TESTS': 'OFF'})
+ cereal_proj = import('cmake').subproject(
+ 'cereal',
+ options: cereal_opts,
+ required: false)
+ assert(cereal_proj.found(), 'cereal is required')
+ cereal_dep = cereal_proj.dependency('cereal')
+endif
+
deps = [
- dependency('phosphor-dbus-interfaces'),
- dependency('phosphor-logging'),
- dependency('sdbusplus')
+ dependency(
+ 'phosphor-dbus-interfaces',
+ fallback: ['phosphor-dbus-interfaces', 'phosphor_dbus_interfaces_dep'],
+ ),
+ dependency(
+ 'phosphor-logging',
+ fallback: ['phosphor-logging', 'phosphor_logging_dep'],
+ ),
+ sdbusplus_dep,
+ cereal_dep,
]
ssl = dependency('openssl')
@@ -119,7 +164,6 @@
'xyz.openbmc_project.Software.Version.service.in'
]
-sdbuspp = find_program('sdbus++')
subdir('xyz/openbmc_project/Software/Image')
image_updater_sources = files(
diff --git a/subprojects/cereal.wrap b/subprojects/cereal.wrap
new file mode 100644
index 0000000..a4cb7ec
--- /dev/null
+++ b/subprojects/cereal.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+url = https://github.com/USCiLab/cereal.git
+revision = HEAD
+# need at least for C++20 fixes 3e4d1b84cab4891368d2179a61a7ba06a5693e7f
diff --git a/subprojects/phosphor-dbus-interfaces.wrap b/subprojects/phosphor-dbus-interfaces.wrap
new file mode 100644
index 0000000..935a8b2
--- /dev/null
+++ b/subprojects/phosphor-dbus-interfaces.wrap
@@ -0,0 +1,3 @@
+[wrap-git]
+url = https://github.com/openbmc/phosphor-dbus-interfaces.git
+revision = HEAD
diff --git a/subprojects/phosphor-logging.wrap b/subprojects/phosphor-logging.wrap
new file mode 100644
index 0000000..a039fcf
--- /dev/null
+++ b/subprojects/phosphor-logging.wrap
@@ -0,0 +1,3 @@
+[wrap-git]
+url = https://github.com/openbmc/phosphor-logging.git
+revision = HEAD
diff --git a/subprojects/sdbusplus.wrap b/subprojects/sdbusplus.wrap
new file mode 100644
index 0000000..d470130
--- /dev/null
+++ b/subprojects/sdbusplus.wrap
@@ -0,0 +1,3 @@
+[wrap-git]
+url = https://github.com/openbmc/sdbusplus.git
+revision = HEAD
diff --git a/xyz/openbmc_project/Software/Image/meson.build b/xyz/openbmc_project/Software/Image/meson.build
index 293efa0..4ae382f 100644
--- a/xyz/openbmc_project/Software/Image/meson.build
+++ b/xyz/openbmc_project/Software/Image/meson.build
@@ -2,7 +2,7 @@
'error.hpp',
capture: true,
command: [
- sdbuspp,
+ sdbusplusplus_prog,
'-r', meson.source_root(),
'error',
'exception-header',
@@ -18,7 +18,7 @@
'error.cpp',
capture: true,
command: [
- sdbuspp,
+ sdbusplusplus_prog,
'-r', meson.source_root(),
'error',
'exception-cpp',