build: Add wrapfiles for dependencies

Update meson.build and add wrapfiles so that all dependencies are
handled as subprojects.

This allows builds completely outside of bitbake or an SDK.

Tested: built phosphor-debug-collector repo successfully using
        `meson -Dtests build`.

Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I51bae90f4fac113270e259b7acac3630b5ec6778
diff --git a/README.md b/README.md
index e5c9d1d..6f14a5f 100644
--- a/README.md
+++ b/README.md
@@ -16,6 +16,6 @@
 
 or with an OpenBMC x86 sdk(see below for x86 steps).
 ```
-meson -Doe-sdk=enabled -Dtests=enabled build
+meson -Dtests=enabled build
 ninja -C build test
 ```
diff --git a/meson.build b/meson.build
index fcb3004..7c8ff03 100644
--- a/meson.build
+++ b/meson.build
@@ -16,9 +16,33 @@
 
 cppfs = meson.get_compiler('cpp').find_library('stdc++fs')
 libsystemd = dependency('libsystemd', version : '>=221')
-phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
-sdbusplus = dependency('sdbusplus')
-phosphor_logging = dependency('phosphor-logging')
+
+sdbusplus_dep = dependency('sdbusplus', required: false)
+if sdbusplus_dep.found()
+    sdbusplusplus_prog = find_program('sdbus++')
+    sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson')
+else
+    sdbusplus_proj = subproject('sdbusplus', required: true)
+    sdbusplus_dep = sdbusplus_proj.get_variable('sdbusplus_dep')
+    sdbusplusplus_prog = sdbusplus_proj.get_variable('sdbusplusplus_prog')
+    sdbuspp_gen_meson_prog = sdbusplus_proj.get_variable(
+        'sdbuspp_gen_meson_prog'
+    )
+endif
+phosphor_dbus_interfaces_dep = dependency(
+    'phosphor-dbus-interfaces',
+    fallback: [
+        'phosphor-dbus-interfaces',
+        'phosphor_dbus_interfaces_dep'
+    ],
+)
+phosphor_logging_dep = dependency(
+    'phosphor-logging',
+    fallback: [
+        'phosphor-logging',
+        'phosphor_logging_dep'
+    ],
+)
 
 # Disable FORTIFY_SOURCE when compiling with no optimization
 if(get_option('optimization') == '0')
@@ -131,9 +155,9 @@
     ]
 
 phosphor_dump_manager_dependency = [
-        phosphor_dbus_interfaces,
-        sdbusplus,
-        phosphor_logging,
+        phosphor_dbus_interfaces_dep,
+        sdbusplus_dep,
+        phosphor_logging_dep,
         cppfs
     ]
 
@@ -156,8 +180,8 @@
     ]
 
 phosphor_dump_monitor_dependency = [
-        phosphor_dbus_interfaces,
-        phosphor_logging,
+        phosphor_dbus_interfaces_dep,
+        phosphor_logging_dep,
         cppfs
     ]
 
diff --git a/meson_options.txt b/meson_options.txt
index 93c8fc4..4bcf664 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -2,8 +2,6 @@
 
 option('tests', type: 'feature', description: 'Build tests')
 
-option('oe-sdk', type: 'feature', description: 'Enable OE SDK')
-
 option('jffs-workaround', type: 'feature',
         description : 'Turn on jffs workaround for core file'
       )
diff --git a/subprojects/googletest.wrap b/subprojects/googletest.wrap
new file mode 100644
index 0000000..766a562
--- /dev/null
+++ b/subprojects/googletest.wrap
@@ -0,0 +1,3 @@
+[wrap-git]
+url = https://github.com/google/googletest.git
+revision = HEAD
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/test/meson.build b/test/meson.build
index d375acc..2f23272 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -1,21 +1,24 @@
-# SPDX-License-Identifier: Apache-2.0
-if get_option('oe-sdk').enabled()
-    # Setup OE SYSROOT
-    OECORE_TARGET_SYSROOT = run_command('sh', '-c', 'echo $OECORE_TARGET_SYSROOT').stdout().strip()
-    if OECORE_TARGET_SYSROOT == ''
-        error('Unable to get OECORE_TARGET_SYSROOT, check your environment.')
-    endif
-    message('OECORE_TARGET_SYSROOT: ' + OECORE_TARGET_SYSROOT)
-    rpath = ':'.join([OECORE_TARGET_SYSROOT + '/lib', OECORE_TARGET_SYSROOT + '/usr/lib'])
-    ld_so = run_command('sh', '-c', 'find ' + OECORE_TARGET_SYSROOT + '/lib/ld-*.so | sort -r -n | head -n1').stdout().strip()
-    dynamic_linker = ['-Wl,-dynamic-linker,' + ld_so]
-else
-    dynamic_linker = []
+gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
+gmock_dep = dependency('gmock', disabler: true, required: false)
+if not gtest_dep.found() or not gmock_dep.found()
+    gtest_proj = import('cmake').subproject('googletest', required: false)
+    if gtest_proj.found()
+        gtest_dep = declare_dependency(
+            dependencies: [
+                dependency('threads'),
+                gtest_proj.dependency('gtest'),
+                gtest_proj.dependency('gtest_main'),
+            ]
+        )
+        gmock_dep = gtest_proj.dependency('gmock')
+  else
+        assert(
+            not get_option('tests').enabled(),
+            'Googletest is required if tests are enabled'
+        )
+  endif
 endif
 
-gtest = dependency('gtest', main: true, disabler: true, required: true)
-gmock = dependency('gmock', disabler: true, required: true)
-
 dump = declare_dependency(
          sources: [
         '../dump_serialize.cpp'
@@ -29,12 +32,10 @@
   test(t, executable(t.underscorify(), t + '.cpp',
                      include_directories: ['.', '../'],
                      implicit_include_directories: false,
-                     link_args: dynamic_linker,
-                     build_rpath: get_option('oe-sdk').enabled() ? rpath : '',
-                     dependencies:[ gtest,
-                                    gmock,
+                     dependencies:[ gtest_dep,
+                                    gmock_dep,
                                     dump,
-                                    phosphor_logging,
+                                    phosphor_logging_dep,
                                     cppfs]),
        workdir: meson.current_source_dir())
 endforeach