It's not possible on stable. It's not possible to get the source filepath, and the working directory of the proc macro is technically unspecified as well, so you should grab $env:CARGO_MANIFEST_DIR instead of relying on cwd.
For files that actually get included, you can emit a const _: &str = include_str!("path"); to get the included file included in change detection. But on stable, there's no other way to track a path to rerun the proc macro like there is for buildscripts. But the buildscript tracked path functionality has actually supported watching a full directory for any contained changes for a while now. (It used to instead only watch the folder metadata for changes, thus ignoring changes within the folder, which isn't very useful.)
I think it's been both the directory cargo was invoked from and the manifest directory of the currently compiled crate. But also, looking at the docs, the initial cwd might be documented to be the manifest directory now. ↩︎
It's a bit funnier: when you compile the code it's manifest directory for the workspace, but when doctests are collected it's manifest directory for the crate. CARGO_MANIFEST_DIR is consistent even if workspaces are used.