returnn.util.native_code_compiler

Native code compiler

class returnn.util.native_code_compiler.NativeCodeCompiler(base_name: str, *, code_version: int | Tuple[int, ...] = 1, code: str, is_cpp: bool = True, c_macro_defines: Dict[str, str | int | None] | None = None, ld_flags: Sequence[str] | None = None, include_paths: Sequence[str] | None = (), include_deps: Sequence[str] | None = None, static_version_name: str | None = None, should_cleanup_old_all: bool = True, should_cleanup_old_mydir: bool = False, use_cxx11_abi: bool = False, log_stream: TextIO | None = None, verbose: bool | None = None)[source]

Helper class to compile native C/C++ code on-the-fly.

Parameters:
  • base_name – base name for the module, e.g. “zero_out”

  • code_version – check for the cache whether to reuse

  • code – the source code itself

  • is_cpp – if False, C is assumed

  • c_macro_defines – e.g. {“TENSORFLOW”: 1}

  • ld_flags – e.g. [“-lblas”]

  • include_paths

  • include_deps – if provided and an existing lib file, we will check if any dependency is newer and we need to recompile. we could also do it automatically via -MD but that seems overkill and too slow.

  • static_version_name – normally, we use …/base_name/hash as the dir but this would use …/base_name/static_version_name.

  • should_cleanup_old_all – whether we should look in the cache dir and check all ops if we can delete some old ones which are older than some limit (self._cleanup_time_limit_days)

  • should_cleanup_old_mydir – whether we should delete our op dir before we compile there.

  • log_stream – file stream for print statements

  • verbose – be slightly more verbose

CacheDirName = 'returnn_native'[source]
CollectedCompilers: List[NativeCodeCompiler] | None = None[source]
cpp_version = 11[source]
load_lib_ctypes()[source]
Return type:

ctypes.CDLL

get_lib_filename()[source]
Return type:

str

returnn.util.native_code_compiler.get_cc_bin() str[source]
Returns:

path

returnn.util.native_code_compiler.get_cpp_bin() str[source]
Returns:

path