diff --git a/CMakeLists.txt b/CMakeLists.txt index e39891a58..8ed8a7a03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -238,6 +238,18 @@ add_library(tilelang SHARED $) add_library(tilelang_module SHARED $) target_link_libraries(tilelang PUBLIC tvm_runtime tvm) target_link_libraries(tilelang_module PUBLIC tvm) + +# Place dev build outputs under build/lib for consistency +set_target_properties(tilelang PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" +) +set_target_properties(tilelang_module PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" +) # Build cython extension find_package(Python REQUIRED COMPONENTS Interpreter Development.Module ${SKBUILD_SABI_COMPONENT}) @@ -257,11 +269,19 @@ if(NOT "${SKBUILD_SABI_VERSION}" STREQUAL "") endif() python_add_library(tilelang_cython_wrapper MODULE "${CMAKE_BINARY_DIR}/tilelang_cython_wrapper.cpp" ${USE_SABI} WITH_SOABI) -# Install extension into the tilelang package directory + +# Ensure dev builds drop the extension into build/lib alongside other shared libs +set_target_properties(tilelang_cython_wrapper PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" +) + +# Install the extension into tilelang/lib inside the wheel install(TARGETS tilelang_cython_wrapper - LIBRARY DESTINATION tilelang - RUNTIME DESTINATION tilelang - ARCHIVE DESTINATION tilelang) + LIBRARY DESTINATION tilelang/lib + RUNTIME DESTINATION tilelang/lib + ARCHIVE DESTINATION tilelang/lib) # let libtilelang to search tvm/tvm_runtime in same dir if(APPLE) diff --git a/tilelang/env.py b/tilelang/env.py index b1697ef51..ce27aba9c 100644 --- a/tilelang/env.py +++ b/tilelang/env.py @@ -20,7 +20,9 @@ TVM_LIBRARY_NOT_FOUND_MESSAGE = ("TVM is not installed or found in the expected path") TL_ROOT = os.path.dirname(os.path.abspath(__file__)) -TL_LIBS = [TL_ROOT, os.path.join(TL_ROOT, 'lib')] +# Only expose the internal lib directory to sys.path to avoid shadowing +# common top-level module names (e.g., utils, analysis) from user projects. +TL_LIBS = [os.path.join(TL_ROOT, 'lib')] TL_LIBS = [i for i in TL_LIBS if os.path.exists(i)] DEV = False @@ -30,7 +32,9 @@ tl_dev_root = os.path.dirname(TL_ROOT) dev_lib_root = os.path.join(tl_dev_root, 'build') - TL_LIBS = [dev_lib_root, os.path.join(dev_lib_root, 'tvm')] + # In dev builds, place artifacts under build/lib and point search path there + # to avoid adding the entire build root to sys.path. + TL_LIBS = [os.path.join(dev_lib_root, 'lib'), os.path.join(dev_lib_root, 'tvm')] THIRD_PARTY_ROOT = os.path.join(tl_dev_root, '3rdparty') logger.warning(f'Loading tilelang libs from dev root: {dev_lib_root}')