Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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