diff --git a/hadrian/src/Settings/Packages.hs b/hadrian/src/Settings/Packages.hs
index 4d399ca9f0ee5d4842f4b95f397906d39be490be..b0e012d31e6bdd314ad482097ed553232e5fc67e 100644
--- a/hadrian/src/Settings/Packages.hs
+++ b/hadrian/src/Settings/Packages.hs
@@ -207,6 +207,7 @@ rtsPackageArgs = package rts ? do
           [ arg "-Irts"
           , arg $ "-I" ++ path
           , flag WithLibdw ? if not (null libdwIncludeDir) then arg ("-I" ++ libdwIncludeDir) else mempty
+          , flag WithLibdw ? if not (null libdwLibraryDir) then arg ("-L" ++ libdwLibraryDir) else mempty
           , arg $ "-DRtsWay=\"rts_" ++ show way ++ "\""
           -- Set the namespace for the rts fs functions
           , arg $ "-DFS_NAMESPACE=rts"
@@ -222,6 +223,7 @@ rtsPackageArgs = package rts ? do
     let cArgs = mconcat
           [ rtsWarnings
           , flag UseSystemFfi ? arg ("-I" ++ ffiIncludeDir)
+          , flag WithLibdw ? arg ("-I" ++ libdwIncludeDir)
           , arg "-fomit-frame-pointer"
           -- RTS *must* be compiled with optimisations. The INLINE_HEADER macro
           -- requires that functions are inlined to work as expected. Inlining
@@ -319,13 +321,14 @@ rtsPackageArgs = package rts ? do
         , builder (Ghc CompileCWithGhc) ? map ("-optc" ++) <$> cArgs
         , builder Ghc ? ghcArgs
 
-          , builder HsCpp ? pure
+        , builder HsCpp ? pure
           [ "-DTOP="             ++ show top
           , "-DFFI_INCLUDE_DIR=" ++ show ffiIncludeDir
           , "-DFFI_LIB_DIR="     ++ show ffiLibraryDir
           , "-DFFI_LIB="         ++ show libffiName
-          , "-DLIBDW_LIB_DIR="     ++ show libdwLibraryDir ]
+          , "-DLIBDW_LIB_DIR="   ++ show libdwLibraryDir ]
 
+        , builder HsCpp ? flag WithLibdw ? arg "-DUSE_LIBDW"
         , builder HsCpp ? flag HaveLibMingwEx ? arg "-DHAVE_LIBMINGWEX" ]
 
 -- Compile various performance-critical pieces *without* -fPIC -dynamic
diff --git a/mk/config.mk.in b/mk/config.mk.in
index eff6b366e956788921cb3e2a1989983cb2ff77cd..41cd71ca1fc7f8ecb13d3c4db86b994b3c1e66ba 100644
--- a/mk/config.mk.in
+++ b/mk/config.mk.in
@@ -363,6 +363,7 @@ UseSystemLibFFI=@UseSystemLibFFI@
 FFILibDir=@FFILibDir@
 FFIIncludeDir=@FFIIncludeDir@
 
+UseLibdw=@UseLibdw@
 LibdwLibDir=@LibdwLibDir@
 LibdwIncludeDir=@LibdwIncludeDir@
 
diff --git a/rts/ghc.mk b/rts/ghc.mk
index f25f2f9b7568abb09e5969d15bdaf1201874af48..dfff8df796b7cf3c49f77d9082440ee473157b4a 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -544,8 +544,10 @@ rts_PACKAGE_CPP_OPTS += '-DFFI_LIB="C$(LIBFFI_NAME)"'
 endif
 
 ifeq "$(UseLibdw)" "YES"
+rts_PACKAGE_CPP_OPTS += -DLIBDW_INCLUDE_DIR=$(LibdwIncludeDir)
 rts_PACKAGE_CPP_OPTS += -DLIBDW_LIB_DIR=$(LibdwLibDir)
 else
+rts_PACKAGE_CPP_OPTS += -DLIBDW_INCLUDE_DIR=
 rts_PACKAGE_CPP_OPTS += -DLIBDW_LIB_DIR=
 endif
 
diff --git a/rts/package.conf.in b/rts/package.conf.in
index 93b664ae61b10e34f2f276c87d74266225e3527d..e4cb159cb8d230664bd7eca2c5569e1a36bb6f59 100644
--- a/rts/package.conf.in
+++ b/rts/package.conf.in
@@ -67,7 +67,12 @@ extra-libraries:
 #if defined(INSTALLING)
 include-dirs:           INCLUDE_DIR FFI_INCLUDE_DIR
 #else /* !INSTALLING */
-include-dirs:           TOP"/rts/dist/build" TOP"/includes" TOP"/includes/dist-derivedconstants/header" FFI_INCLUDE_DIR TOP"/includes/dist-install/build"
+include-dirs:           TOP"/rts/dist/build"
+                        TOP"/includes"
+                        TOP"/includes/dist-derivedconstants/header"
+                        FFI_INCLUDE_DIR
+                        LIBDW_INCLUDE_DIR
+                        TOP"/includes/dist-install/build"
 #endif
 
 includes:               Stg.h