diff --git a/meson.build b/meson.build
index 7a4e77c9cd838e6a5334932f0cf9caf32932222f..e2d16607671df50ec7fc33ac533949c56235106d 100644
--- a/meson.build
+++ b/meson.build
@@ -13,10 +13,29 @@ coeurl_dep = dependency('coeurl', required: true)
 thread_dep = dependency('threads', required: true)
 openssl_dep = dependency('openssl', version: '>=1.1', required: true)
 
-olm_dep = dependency('Olm', method: 'cmake', fallback: ['olm-wrap', 'olm_dep'], required: true)
-
 json_dep = dependency('nlohmann_json', version: '>=3.2.0', required: true)
 
+olm_dep = dependency('Olm', method: 'cmake', required: get_option('wrap_mode') == 'nofallback')
+
+if (not olm_dep.found()
+  or get_option('wrap_mode') == 'forcefallback'
+  or 'Olm' in get_option('force_fallback_for'))
+		olm_options = cmake.subproject_options()
+    olm_options.add_cmake_defines({
+      'BUILD_SHARED_LIBS': false,
+      'OLM_TESTS': false,
+      })
+    if target_machine.system() != 'windows'
+        olm_options.add_cmake_defines({
+          'CMAKE_C_FLAGS':  '-fPIC',
+        })
+    endif
+    olm_options.set_override_option('werror', 'false')
+    olm_options.set_override_option('warning_level', '0')
+    olm_proj = cmake.subproject('Olm', options: olm_options)
+    olm_dep = olm_proj.dependency('olm')
+endif
+
 deps = [
   coeurl_dep,
   thread_dep,
diff --git a/subprojects/olm-wrap/meson.build b/subprojects/olm-wrap/meson.build
deleted file mode 100644
index f81c695bc2e36be7cc47f3bf948b859c31afc9b4..0000000000000000000000000000000000000000
--- a/subprojects/olm-wrap/meson.build
+++ /dev/null
@@ -1,6 +0,0 @@
-project('olm-wrap', 'cpp', version: '3.1.4', meson_version: '>=0.55.0')
-
-cmake = import('cmake')
-
-olm_subproj = cmake.subproject('Olm')
-olm_dep = olm_subproj.dependency('olm')