gyp appears to have to 'own' files generated by actions to actually run those actions in the right order - got this working by placing files inside the SHARED_INTERMEDIATE_DIR rather than the src/ dir which gyp does not watch