I'm looking to do a similar thing. The approach I'm thinking about is to sample the height map values at the desired voxel resolution of the output grid, to get a uniform (x, y) grid of height values (z). The (x, y, z) coordinates of each sample correspond to voxels with an distance value of 0.0 in the required SDF, and can be used as the seed values for a fast-sweeping pass that extends distance values into a narrow band of voxels around the seed points. I think openvdb::tools::sdfToSdf can be used for this, but possibly it is required to use the lower-level FastSweeping API's directly to do this. This would give you an unsigned distance field, you would have to close it using some level-set CSG to make it a valid level-set SDF, e.g. pasting it on top of a box SDF and fixing the interior voxels.
I still need to work this out further and maybe there's an easier way, any help is appreciated!