build: add support for building with meson
Follow the OpenBMC herd and support a more modern, more comprehensible,
more performant build framework.
To build using meson:
meson build
ninja -C build
ninja -C build install
Maintained support for:
Configurable dbus parameters:
INPUT_HISTORY_BUSNAME_ROOT= -> -Dinput-history-busname-root=
INPUT_HISTORY_SENSOR_ROOT = -> -Dinput-history-sensor-root=
UCD90160 support:
UCD90160_DEF_YAML_FILE= -> -Ducd90160-yaml=
--enable-turn-off-ucd90160-access = -> -Ducd90160-access=
Added -Dtests to match de-facto OpenBMC meson usage conventions.
Dropped UCD90160_DEF_OUTPUT_DIR. Much like the destination of
intermediate artifacts like object files are not configurable, the
location of the generated UCD definition file should not be configurable
either.
Dropped support for --enable-oe-sdk rpath munging. This was a
workaround for broken oe sdks that don't figure out the correct rpath
when running make check or ninja test.
Tested by building with both meson and autotools and then compared build
artifacts from each build system:
generated source code is the same
generated binaries have the same symbols
Ran existing unit tests (which passed) using ninja test.
Change-Id: Iac80ba1fe5c2d01abe0e0a95e0bec03b8b828ef5
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..a9e7fb4
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,63 @@
+project(
+ 'witherspoon-pfault-analysis',
+ 'cpp',
+ default_options: [
+ 'warning_level=3',
+ 'werror=true',
+ 'cpp_std=c++17'
+ ],
+ license: 'Apache-2.0',
+ version: '1.0',
+)
+
+build_tests = get_option('tests')
+
+cppfs = meson.get_compiler('cpp').find_library('stdc++fs')
+gmock = dependency('gmock', disabler: true, required: build_tests)
+gtest = dependency('gtest', main: true, disabler: true, required: build_tests)
+openpower_dbus_interfaces = dependency('openpower-dbus-interfaces')
+phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
+phosphor_logging = dependency('phosphor-logging')
+prog_python = import('python').find_installation('python')
+sdbusplus = dependency('sdbusplus')
+sdbuspp = find_program('sdbus++')
+sdeventplus = dependency('sdeventplus')
+
+conf = configuration_data()
+conf.set_quoted(
+ 'INPUT_HISTORY_BUSNAME_ROOT', get_option('input-history-busname-root'))
+conf.set_quoted(
+ 'INPUT_HISTORY_SENSOR_ROOT', get_option('input-history-sensor-root'))
+conf.set10(
+ 'UCD90160_DEVICE_ACCESS', get_option('ucd90160-access'))
+
+configure_file(output: 'config.h', configuration: conf)
+
+# Ensure the generated header here winds up in the correct path in the build
+# tree such that it actually get used and doesn't get found in the sysroot
+# somewhere. Meson doesn't allow path elements (rightfully so) when specifying
+# the output filename of a target definition so the target must be defined in
+# the directory where the artifacts need to be placed. Do that now, because
+# the generated source (cpp) is needed to define the library target.
+subdir('org/open_power/Witherspoon/Fault')
+
+libpower = static_library(
+ 'power',
+ error_cpp,
+ error_hpp,
+ 'gpio.cpp',
+ 'pmbus.cpp',
+ 'utility.cpp',
+ dependencies: [
+ cppfs,
+ openpower_dbus_interfaces,
+ phosphor_dbus_interfaces,
+ phosphor_logging,
+ sdbusplus,
+ sdeventplus,
+ ],
+)
+
+subdir('power-sequencer')
+subdir('power-supply')
+subdir('test')