Add vendor description and meson.build for googletest
Signed-off-by: Alphan Ulusoy <alphan@google.com>
diff --git a/sw/device/lib/meson.build b/sw/device/lib/meson.build
index 3a506c8..f6a31a5 100644
--- a/sw/device/lib/meson.build
+++ b/sw/device/lib/meson.build
@@ -5,6 +5,7 @@
subdir('base')
subdir('runtime')
subdir('dif')
+subdir('testing')
# UART library (sw_lib_uart)
sw_lib_uart = declare_dependency(
diff --git a/sw/device/lib/testing/meson.build b/sw/device/lib/testing/meson.build
new file mode 100644
index 0000000..0ef4a1c
--- /dev/null
+++ b/sw/device/lib/testing/meson.build
@@ -0,0 +1,50 @@
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+
+sw_lib_testing_gtest_src_dir = meson.source_root() / 'sw/vendor/google_googletest'
+sw_lib_testing_gtest_lock_file = meson.source_root() / 'sw/vendor/google_googletest.lock.hjson'
+# Build dir below is $REPO_TOP/build-out/sw/fpga/sw/device/lib/testing/google_googletest
+sw_lib_testing_gtest_build_dir = meson.current_build_dir() / 'google_googletest'
+sw_lib_testing_empty_file_for_dep = 'empty_file_for_googletest_dependency.cc'
+
+# Bash script used for building googletest. Also creates an empty file
+# which is used to establish the dependency between gtest and mock_mmio.
+build_gtest_cmd = '''
+echo "Building googletest..."
+GTEST_BUILD_DIR="@0@"
+GTEST_SRC_DIR="@1@"
+EMPTY_FILE_FOR_DEP="@2@"
+# Create a directory for building gtest
+mkdir -p $GTEST_BUILD_DIR
+# Build googletest
+cmake -B $GTEST_BUILD_DIR -S $GTEST_SRC_DIR > /dev/null
+make -C $GTEST_BUILD_DIR > /dev/null
+# Create an empty file for dependencies
+touch "@OUTDIR@/$EMPTY_FILE_FOR_DEP"
+echo "Done!"
+'''.format(sw_lib_testing_gtest_build_dir, sw_lib_testing_gtest_src_dir, sw_lib_testing_empty_file_for_dep)
+
+build_gtest = custom_target(
+ 'googletest',
+ output: sw_lib_testing_empty_file_for_dep,
+ depend_files: sw_lib_testing_gtest_lock_file,
+ command: ['bash', '-c', build_gtest_cmd],
+)
+
+gtest_inc = include_directories(
+ '../../../vendor/google_googletest/googletest/include',
+ '../../../vendor/google_googletest/googlemock/include',
+)
+
+gtest = declare_dependency(
+ sources: [build_gtest],
+ include_directories: gtest_inc,
+ link_args: [
+ '-L' + sw_lib_testing_gtest_build_dir / 'lib',
+ '-lgmock',
+ '-lgmock_main',
+ '-lgtest',
+ ],
+ dependencies: dependency('threads'),
+)
diff --git a/sw/vendor/google_googletest.vendor.hjson b/sw/vendor/google_googletest.vendor.hjson
new file mode 100644
index 0000000..2134df8
--- /dev/null
+++ b/sw/vendor/google_googletest.vendor.hjson
@@ -0,0 +1,12 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+{
+ name: "google_googletest",
+ target_dir: "google_googletest",
+
+ upstream: {
+ url: "https://github.com/google/googletest.git",
+ rev: "master",
+ },
+}