Use toplevel key when sp-specific one does not exist.
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index 49b84b9..bfa160b 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -582,6 +582,9 @@
         except KeyError:
             pass
 
+        if key.subproject:
+            # Per-subproject option was not found, try the top level one.
+            return self.get_option(key.toplevel_key())
         raise MesonException(f'Tried to get unknown builtin option {str(key)}')
 
     def set_option(self, key: OptionKey, value) -> None:
diff --git a/mesonbuild/mesonlib/universal.py b/mesonbuild/mesonlib/universal.py
index 318b365..fbb3a00 100644
--- a/mesonbuild/mesonlib/universal.py
+++ b/mesonbuild/mesonlib/universal.py
@@ -1976,6 +1976,11 @@
             _type = _classify_argument(self)
         object.__setattr__(self, 'type', _type)
 
+    def toplevel_key(self):
+        if not self.subproject:
+            raise RuntimeError("Internal error: tried to get top level option for a top level option.")
+        return OptionKey(self.name, '', self.machine, self.lang, self.type)
+
     def __setattr__(self, key: str, value: T.Any) -> None:
         raise AttributeError('OptionKey instances do not support mutation.')