diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,5 +1,9 @@
 # Changelog for `proto-lens-setup`
 
+## v0.4.0.10
+- Support GHC 9.12 (add compatibility shim for Cabal >= 3.14 `SymbolicPath` API).
+- Support GHC 9.14.
+
 ## v0.4.0.9
 - Relax upper bounds for ghc-9.10.
 
diff --git a/proto-lens-setup.cabal b/proto-lens-setup.cabal
--- a/proto-lens-setup.cabal
+++ b/proto-lens-setup.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.37.0.
+-- This file has been generated from package.yaml by hpack version 0.39.1.
 --
 -- see: https://github.com/sol/hpack
 
 name:           proto-lens-setup
-version:        0.4.0.9
+version:        0.4.0.10
 synopsis:       Cabal support for codegen with proto-lens.
 description:    This package provides Cabal support for the @proto-lens@ package.
                 It automatically generates Haskell source files from protocol buffer
@@ -68,10 +68,10 @@
   hs-source-dirs:
       src
   build-depends:
-      Cabal >=2.0 && <3.13
-    , base >=4.10 && <4.21
-    , bytestring >=0.10 && <0.13
-    , containers >=0.5 && <0.8
+      Cabal >=3 && <3.17
+    , base >=4.10 && <4.23
+    , bytestring >=0.10 && <0.14
+    , containers >=0.5 && <0.9
     , deepseq >=1.4 && <1.6
     , directory >=1.2 && <1.4
     , filepath >=1.4 && <1.6
diff --git a/src/Data/ProtoLens/Setup.hs b/src/Data/ProtoLens/Setup.hs
--- a/src/Data/ProtoLens/Setup.hs
+++ b/src/Data/ProtoLens/Setup.hs
@@ -13,7 +13,12 @@
 -- `build-dependencies`.
 --
 -- See @README.md@ for instructions on how to use proto-lens with Cabal.
+
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE DataKinds #-}
+
 module Data.ProtoLens.Setup
     ( defaultMainGeneratingProtos
     , defaultMainGeneratingSpecificProtos
@@ -28,6 +33,9 @@
 import qualified Data.Map as Map
 import Data.Maybe (maybeToList)
 import qualified Data.Set as Set
+#if MIN_VERSION_Cabal(3,4,0)
+import Distribution.CabalSpecVersion (CabalSpecVersion)
+#endif
 import Distribution.ModuleName (ModuleName)
 import qualified Distribution.ModuleName as ModuleName
 import qualified Distribution.InstalledPackageInfo as InstalledPackageInfo
@@ -74,11 +82,19 @@
     )
 #if MIN_VERSION_Cabal(2,4,0)
 import Distribution.Simple.Glob (matchDirFileGlob)
+#if MIN_VERSION_Cabal(3,14,0)
+import Distribution.Utils.Path (getSymbolicPath, CWD, AllowAbsolute, SymbolicPath, SymbolicPathX, FileOrDir(..))
+import Distribution.Utils.Path (makeSymbolicPath)
 #endif
+#endif
 import Distribution.Simple
     ( defaultMainWithHooks
     , simpleUserHooks
     , UserHooks(..)
+#if MIN_VERSION_Cabal(3,4,0)
+#else
+    , Version
+#endif
     )
 import Distribution.Verbosity
     ( Verbosity
@@ -109,6 +125,33 @@
 
 import Data.ProtoLens.Compiler.ModuleName (protoModuleName)
 
+-- Compatibility shim for the change of 'FilePath' to 'SymbolicPath' in Cabal-3.14.1 in few places
+#if MIN_VERSION_Cabal(3,14,0)
+getSymbolicPath' :: forall (a :: AllowAbsolute) f t. SymbolicPathX a f t -> FilePath
+getSymbolicPath' = getSymbolicPath
+
+matchDirFileGlob' :: forall dir (allowAbs :: AllowAbsolute) (file :: FileOrDir). Verbosity -> CabalSpecVersion -> SymbolicPath CWD (Dir dir) -> SymbolicPathX allowAbs dir file -> IO [SymbolicPathX allowAbs dir file]
+matchDirFileGlob' ver specVer path = matchDirFileGlob ver specVer (Just path)
+#elif MIN_VERSION_Cabal(3,4,0)
+getSymbolicPath' :: FilePath -> FilePath
+getSymbolicPath' = id
+
+matchDirFileGlob' :: Verbosity -> CabalSpecVersion -> FilePath -> FilePath -> IO [FilePath]
+matchDirFileGlob' = matchDirFileGlob
+
+makeSymbolicPath :: FilePath -> FilePath
+makeSymbolicPath = id
+#else
+getSymbolicPath' :: FilePath -> FilePath
+getSymbolicPath' = id
+
+matchDirFileGlob' :: Verbosity -> Version -> FilePath -> FilePath -> IO [FilePath]
+matchDirFileGlob' = matchDirFileGlob
+
+makeSymbolicPath :: FilePath -> FilePath
+makeSymbolicPath = id
+#endif
+
 -- | This behaves the same as 'Distribution.Simple.defaultMain', but
 -- auto-generates Haskell files from .proto files which are:
 --
@@ -170,7 +213,7 @@
     getProtos l = do
       -- Replicate Cabal's own logic for parsing file globs.
       files <- concat <$> mapM (match $ localPkgDescr l)
-                               (extraSrcFiles $ localPkgDescr l)
+                               (map getSymbolicPath' $ extraSrcFiles $ localPkgDescr l)
       pure
            . filter (\f -> takeExtension f == ".proto")
            . map (makeRelative root)
@@ -179,7 +222,7 @@
 
 match :: PackageDescription -> FilePath -> IO [FilePath]
 #if MIN_VERSION_Cabal(2,4,0)
-match desc f = matchDirFileGlob normal (specVersion desc) "." f
+match desc f = map getSymbolicPath' <$> matchDirFileGlob' normal (specVersion desc) (makeSymbolicPath ".") (makeSymbolicPath f)
 #else
 match _ f = matchFileGlob f
 #endif
@@ -254,7 +297,7 @@
           let sourcePath = tmpDir </> f
           sourceExists <- doesFileExist sourcePath
           when sourceExists $ do
-            let dest = autogenComponentModulesDir l compBI </> f
+            let dest = getSymbolicPath' (autogenComponentModulesDir l compBI) </> f
             copyIfDifferent sourcePath dest
 
 -- Note: we do a copy rather than a move since a given module may be used in
