Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python source reorg #6867

Merged
merged 9 commits into from
Jul 20, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion packaging/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,18 @@ endforeach ()
if (WITH_PYTHON_BINDINGS)
set(Halide_INSTALL_PYTHONDIR "${CMAKE_INSTALL_LIBDIR}/python3/site-packages"
CACHE STRING "Path to Halide Python bindings folder")

install(DIRECTORY "${Halide_SOURCE_DIR}/python_bindings/src/halide"
DESTINATION "${Halide_INSTALL_PYTHONDIR}"
COMPONENT Halide_Python
FILES_MATCHING
PATTERN "*.py"
PATTERN "*/halide_" EXCLUDE
PATTERN "*/__pycache__" EXCLUDE)

install(TARGETS Halide_Python
LIBRARY DESTINATION ${Halide_INSTALL_PYTHONDIR} COMPONENT Halide_Python
LIBRARY DESTINATION "${Halide_INSTALL_PYTHONDIR}/halide"
COMPONENT Halide_Python
NAMELINK_COMPONENT Halide_Python)
endif ()

Expand Down Expand Up @@ -101,6 +111,13 @@ if (TARGET Halide_Adams2019)
COMPONENT Halide_Development)
endif ()

if (TARGET Halide_Python AND NOT CMAKE_INSTALL_RPATH)
file(RELATIVE_PATH lib_dir
"${CMAKE_CURRENT_BINARY_DIR}/${Halide_INSTALL_PYTHONDIR}/halide"
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
set_target_properties(Halide_Python PROPERTIES INSTALL_RPATH "${rbase}/${lib_dir}")
endif ()

##
# READMEs and other top-level documentation
##
Expand Down Expand Up @@ -268,6 +285,11 @@ cpack_add_component(Halide_Development
DESCRIPTION "Static Halide libraries and CMake development files"
DEPENDS Halide_Runtime)

cpack_add_component(Halide_Python
DISPLAY_NAME "Python bindings"
DESCRIPTION "Python package providing bindings to Halide"
DEPENDS Halide_Runtime)

cpack_add_component(Halide_Documentation
DISPLAY_NAME "Halide documentation"
DESCRIPTION "Documentation for Halide")
2 changes: 1 addition & 1 deletion python_bindings/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ endif ()
# Add our sources to this sub-tree.
##

add_subdirectory(src)
add_subdirectory(src/halide)
add_subdirectory(stub)

option(WITH_TEST_PYTHON "Build Python tests" ON)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,13 @@ set(SOURCES
PyVar.cpp
PyVarOrRVar.cpp
)
list(TRANSFORM SOURCES PREPEND "halide_/")

pybind11_add_module(Halide_Python MODULE ${SOURCES})
add_library(Halide::Python ALIAS Halide_Python)
set_target_properties(Halide_Python
PROPERTIES
LIBRARY_OUTPUT_NAME halide
LIBRARY_OUTPUT_NAME halide_
EXPORT_NAME Python)
target_link_libraries(Halide_Python PRIVATE Halide::Halide)

Expand Down
24 changes: 24 additions & 0 deletions python_bindings/src/halide/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# TODO(#6870): The following three lines are a stop-gap. This file should just
# contain the last two imports, at least until the pure-Python part of the
# library grows.
#
# There are three main reasons why this exists:
#
# 1. relative imports cannot be overloaded with sys.path
# 2. for a variety of reasons, copying the python sources next to the
# halide_.*.so module is difficult to make work in 100% of cases in CMake
# 3. even if we could copy them reliably, copying these files into the build
# folder seems inelegant
#
# Fortunately, there are apparently other hooks besides sys.path that we could
# use to redirect a failing relative import.
#
# https://docs.python.org/3/reference/import.html#finders-and-loaders
# https://github.com/halide/Halide/issues/6870

import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.resolve(strict=True)))
alexreinking marked this conversation as resolved.
Show resolved Hide resolved

from halide_ import *
from halide_ import _, _1, _2, _3, _4, _5, _6, _7, _8, _9
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ static_assert(PY_VERSION_HEX >= 0x03000000,
"We appear to be compiling against Python 2.x rather than 3.x, which is not supported.");

#ifndef HALIDE_PYBIND_MODULE_NAME
#define HALIDE_PYBIND_MODULE_NAME halide
#define HALIDE_PYBIND_MODULE_NAME halide_
#endif

PYBIND11_MODULE(HALIDE_PYBIND_MODULE_NAME, m) {
Expand Down
File renamed without changes.
8 changes: 7 additions & 1 deletion python_bindings/test/apps/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,14 @@ set(SCRIPTS
interpolate.py
local_laplacian.py)

make_shell_path(
PYTHONPATH
"$<TARGET_FILE_DIR:Halide::Python>"
"${Halide_SOURCE_DIR}/python_bindings/src"
)

set(TEST_ENV
"PYTHONPATH=$<SHELL_PATH:$<TARGET_FILE_DIR:Halide::Python>>"
"PYTHONPATH=${PYTHONPATH}"
"HL_TARGET=${Halide_TARGET}"
"TEST_TMPDIR=$<SHELL_PATH:${CMAKE_CURRENT_BINARY_DIR}>"
"TEST_IMAGES_DIR=$<SHELL_PATH:${CMAKE_CURRENT_SOURCE_DIR}/../../../apps/images>"
Expand Down
12 changes: 7 additions & 5 deletions python_bindings/test/correctness/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,13 @@ set(TESTS
)

# Use generator expressions to get the true output paths of these files.
make_shell_path(PYTHONPATH
"$<TARGET_FILE_DIR:py_aot_bit>"
"$<TARGET_FILE_DIR:py_stub_bit>"
"$<TARGET_FILE_DIR:Halide::Python>"
)
make_shell_path(
PYTHONPATH
"$<TARGET_FILE_DIR:py_aot_bit>"
"$<TARGET_FILE_DIR:py_stub_bit>"
"$<TARGET_FILE_DIR:Halide::Python>"
"${Halide_SOURCE_DIR}/python_bindings/src"
)

foreach (TEST IN LISTS TESTS)
get_filename_component(TEST_NAME ${TEST} NAME_WE)
Expand Down
7 changes: 6 additions & 1 deletion python_bindings/tutorial/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ set(TESTS
lesson_14_types.py
)

make_shell_path(PYTHONPATH "$<TARGET_FILE_DIR:lesson_10_halide>" "$<TARGET_FILE_DIR:Halide::Python>")
make_shell_path(
PYTHONPATH
"$<TARGET_FILE_DIR:lesson_10_halide>"
"$<TARGET_FILE_DIR:Halide::Python>"
"${Halide_SOURCE_DIR}/python_bindings/src"
)

foreach (TEST IN LISTS TESTS)
get_filename_component(TEST_NAME ${TEST} NAME_WE)
Expand Down
6 changes: 5 additions & 1 deletion src/autoschedulers/li2018/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,11 @@ if (WITH_PYTHON_BINDINGS)
add_test(NAME gradient_autoscheduler_test_py
COMMAND Python3::Interpreter "${CMAKE_CURRENT_SOURCE_DIR}/test.py")

set(PYTHONPATH "$<SHELL_PATH:$<TARGET_FILE_DIR:Halide::Python>>")
make_shell_path(
PYTHONPATH
"$<TARGET_FILE_DIR:Halide::Python>"
"${Halide_SOURCE_DIR}/python_bindings/src"
)

if (WIN32)
set(SEP "\\$<SEMICOLON>")
Expand Down