    def copy_headers_and_csrc_to_workdir(self, workdir: str) -> List[str]:
        """
        Copy over all the files in include/ and csrc/ to some working directory.
        Skips files that are not marked with .cpp/.h

        Returns a list of copied source files (to be built later).

        Parameters
        ----------
        workdir : str
            The path to copy to
        """
        sources = []
        csrc = os.path.join(self.static_files_path, "csrc")
        for fname in os.listdir(csrc):
            fname_dst, ext = os.path.splitext(fname)
            if ext != ".cpp":
                continue
            # TODO: Remove this file when the linker error gets fixed in rocm backend.
            # All files in csrc should be shared between the ROCM and CUDA backends.
            if fname == "rocm_hack.cpp" and self.name() != "rocm":
                continue
            fname_src = os.path.join(csrc, fname)
            fname_dst_cpp = os.path.join(workdir, f"{fname_dst}{self.src_extension()}")
            shutil.copyfile(fname_src, fname_dst_cpp)
            sources.append(fname_dst_cpp)

        headers = []
        include = os.path.join(self.static_files_path, "include")
        for fname in os.listdir(include):
            _, ext = os.path.splitext(fname)
            if ext != ".h":
                continue
            fname_src = os.path.join(include, fname)
            fname_dst = os.path.join(workdir, fname)
            shutil.copyfile(fname_src, fname_dst)
            headers.append(fname_dst)
        return sources
Copy over all the files in include/ and csrc/ to some working directory.
Skips files that are not marked with .cpp/.h

Returns a list of copied source files (to be built later).

Parameters
----------
workdir : str
The path to copy to
python/aitemplate/backend/target.py