aboutsummaryrefslogtreecommitdiff
path: root/mwe/profiling/lib
diff options
context:
space:
mode:
Diffstat (limited to 'mwe/profiling/lib')
-rw-r--r--mwe/profiling/lib/CMakeLists.txt11
-rw-r--r--mwe/profiling/lib/lib.cpp26
-rw-r--r--mwe/profiling/lib/lib.h12
3 files changed, 49 insertions, 0 deletions
diff --git a/mwe/profiling/lib/CMakeLists.txt b/mwe/profiling/lib/CMakeLists.txt
new file mode 100644
index 0000000..bd78d59
--- /dev/null
+++ b/mwe/profiling/lib/CMakeLists.txt
@@ -0,0 +1,11 @@
+cmake_minimum_required(VERSION 3.28)
+
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_BUILD_TYPE Release)
+
+project(lib C CXX)
+
+add_library(test SHARED lib.cpp)
+target_include_directories(test SYSTEM INTERFACE .)
+
diff --git a/mwe/profiling/lib/lib.cpp b/mwe/profiling/lib/lib.cpp
new file mode 100644
index 0000000..9ea8f26
--- /dev/null
+++ b/mwe/profiling/lib/lib.cpp
@@ -0,0 +1,26 @@
+#include <chrono>
+#include <thread>
+#include <random>
+
+#include "lib.h"
+
+// yeah this is bad, boo hoo
+using namespace std;
+using std::this_thread::sleep_for;
+using std::chrono::milliseconds;
+
+random_device dev;
+mt19937 rng(dev());
+uniform_int_distribution<mt19937::result_type> random_dist(1, 50);
+
+static void random_slow() {
+ int delay = random_dist(rng);
+ sleep_for(milliseconds(delay));
+}
+
+int recursive(int rem) {
+ if (rem <= 0) return 0;
+ random_slow();
+ return recursive(rem - 1) + recursive(rem - 2);
+}
+
diff --git a/mwe/profiling/lib/lib.h b/mwe/profiling/lib/lib.h
new file mode 100644
index 0000000..fc413ff
--- /dev/null
+++ b/mwe/profiling/lib/lib.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int recursive(int rem);
+
+#ifdef __cplusplus
+}
+#endif
+