Skip to content

[Bug][FFI] tvm_ffi.cpp.load_inline fails on macOS #18305

@junrushao

Description

@junrushao

When running FFI unittests under /path-to-tvm/ffi/ via:

pytest -svv tests/python/test_*

I noticed that all cpp.load_inline-related tests failed on macOS.

Error message

tests/python/test_load_inline.py:31:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
python/tvm_ffi/cpp/load_inline.py:396: in load_inline
    _build_ninja(build_dir)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

build_dir = '/Users/jshao/.cache/tvm-ffi/hello_e822416553bed865'

    def _build_ninja(build_dir: str) -> None:
        """Build the module in the given build directory using ninja."""
        command = ["ninja", "-v"]
        num_workers = os.environ.get("MAX_JOBS", None)
        if num_workers is not None:
            command += ["-j", num_workers]
        status = subprocess.run(args=command, cwd=build_dir, capture_output=True)
        if status.returncode != 0:
            msg = ["ninja exited with status {}".format(status.returncode)]
            if status.stdout:
                msg.append("stdout:\n{}".format(status.stdout.decode("utf-8")))
            if status.stderr:
                msg.append("stderr:\n{}".format(status.stderr.decode("utf-8")))

>           raise RuntimeError("\n".join(msg))
E           RuntimeError: ninja exited with status 1
E           stdout:
E           [1/2] c++ -MMD -MF main.o.d -std=c++17 -fPIC -O2 -I/Users/jshao/Projects/tvm-dev/ffi/python/tvm_ffi/../../include -I/Users/jshao/Projects/tvm-dev/ffi/python/tvm_ffi/../../3rdparty/dlpack/include -c /Users/jshao/.cache/tvm-ffi/hello_e822416553bed865/main.cpp -o main.o
E           [2/2] c++ main.o -shared -o hello.so
E           FAILED: [code=1] hello.so
E           c++ main.o -shared -o hello.so
E           Undefined symbols for architecture arm64:
E             "_TVMFFIErrorSetRaised", referenced from:
E                 ___tvm_ffi_add_one_cpu in main.o
E                 ___tvm_ffi_add_one_cpu in main.o
E             "_TVMFFIGetTypeInfo", referenced from:
E                 tvm::ffi::TypeIndexToTypeKey(int) in main.o
E             "_TVMFFITraceback", referenced from:
E                 add_one_cpu(DLTensor*, DLTensor*) in main.o
E                 add_one_cpu(DLTensor*, DLTensor*) in main.o
E                 add_one_cpu(DLTensor*, DLTensor*) in main.o
E                 add_one_cpu(DLTensor*, DLTensor*) in main.o
E                 add_one_cpu(DLTensor*, DLTensor*) in main.o
E                 ___tvm_ffi_add_one_cpu in main.o
E                 ___tvm_ffi_add_one_cpu in main.o
E                 ___tvm_ffi_add_one_cpu in main.o
E                 ...
E             "_TVMFFITypeGetOrAllocIndex", referenced from:
E                 ___cxx_global_var_init in main.o
E                 ___cxx_global_var_init.1 in main.o
E                 ___cxx_global_var_init.2 in main.o
E                 ___cxx_global_var_init.3 in main.o
E           ld: symbol(s) not found for architecture arm64
E           clang++: error: linker command failed with exit code 1 (use -v to see invocation)
E           ninja: build stopped: subcommand failed.

Environment

  • OS: macOS 15.6.1, arm64
  • C++ toolchain
>>> c++ --version
Apple clang version 17.0.0 (clang-1700.0.13.5)
Target: arm64-apple-darwin24.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  • Python toolchain: venv via uv
>>> python --version
Python 3.13.1
>>> uv pip list
Package        Version Editable project location
-------------- ------- ---------------------------------
apache-tvm-ffi 0.1.0a8 /Users/jshao/Projects/tvm-dev/ffi
iniconfig      2.1.0
numpy          2.3.3
packaging      25.0
pluggy         1.6.0
pygments       2.19.2
pytest         8.4.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-triagePRs or issues that need to be investigated by maintainers to find the right assignees to address ittype: bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions