-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
Build Hexagon runtime components using the Hexagon SDK #7671
Conversation
This PR seems to be massively broken on the buildbots -- is it ready for review? |
if (!host_lib) { | ||
// This will now cause a more specific error 'halide_error_code_symbol_not_found' down the line. | ||
// So, just print this message and continue on instead of returning a generic error here. | ||
error(user_context) << "Hexagon: unable to load libhalide_hexagon_host.so"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(1) Depending on how you have halide_error()
configured, this may not continue on at all.
(2) The golden rule of Halide Runtime code is that every call to error()
or halide_error()
must also return a nonzero error code across the runtime API boundary; otherwise, you get different failure modes in different configurations.
If you always want to continue from here, use print()
instead of error()
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it.
@@ -15,8 +15,8 @@ extern "C" { | |||
#include "known_symbols.h" | |||
#include "log.h" | |||
|
|||
const int stack_alignment = 128; | |||
const int stack_size = 1024 * 1024; | |||
// const int stack_alignment = 128; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are these commented out?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
They are unused and were emitting warnings.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Either remove them, or leave them in with a comment about why they are still there. (In this case, probably just remove)
The PR here needs the an environment variable set |
Want me to do that, or do you want to? |
This is the right place to look right? https://github.com/halide/build_bot/blob/master/master/master.cfg |
@steven-johnson - PTAL -> halide/build_bot#237 |
There is a problem here that I hadn't thought of earlier. For context, see halide/build_bot#237 (comment) |
@@ -339,3 +339,6 @@ add_library(Halide::Runtime ALIAS Halide_Runtime) | |||
target_include_directories(Halide_Runtime INTERFACE $<BUILD_INTERFACE:${Halide_BINARY_DIR}/include>) | |||
set_target_properties(Halide_Runtime PROPERTIES EXPORT_NAME Runtime) | |||
|
|||
if (TARGET_HEXAGON) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this condition can be true on builders that do not handle hexagon, maybe add another check to see if HEXAGON_SDK_ROOT is set up in the environment. It is not the most elegant thing to do though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An alternative is to partition targets into required and optional. Optional targets would be ones that are not built on all builders. Then provide a cmake option to turn off optional targets. Using the terminology in Halide/dependencies/cmake/llvm/CMakeLists.txt
loosely, the logic would be
set(required_components <targets_built_on_all_builders_eg_x86>)
set(optional_components <targets build on some builders only, eg. hexagon>)
list(APPEND known_components required_components)
list(APPEND known_components optional_components)
foreach (comp IN LISTS known_components)
string(TOUPPER "TARGET_${comp}" OPTION)
string(TOUPPER "WITH_${comp}" DEFINE)
if (comp STREQUAL "RISCV" AND LLVM_PACKAGE_VERSION VERSION_LESS 17.0)
# We default the RISCV target to OFF for LLVM versions prior to 17.0;
# it's not clear how robust and well-tested Halide's RISCV codegen
# is with LLVM16, and a great deal of effort is being put into
# improving it in LLVM17... so default to off so that people won't
# hurt themselves too badly.
cmake_dependent_option(${OPTION} "Include ${comp} target" OFF
"${comp} IN_LIST LLVM_TARGETS_TO_BUILD" OFF)
else ()
if (comp IN LISTS optional_components)
cmake_dependent_option(${OPTION} "Include ${comp} target" ON
"${comp} IN_LIST LLVM_TARGETS_TO_BUILD; BUILD_OPTIONAL_COMPONENTS" OFF)
else()
cmake_dependent_option(${OPTION} "Include ${comp} target" ON
"${comp} IN_LIST LLVM_TARGETS_TO_BUILD" OFF)
endif()
endif ()
if (${OPTION} OR Halide_SHARED_LLVM)
message(STATUS "Enabling ${comp} backend")
list(APPEND Halide_LLVM_DEFS $<BUILD_INTERFACE:${DEFINE}>)
list(APPEND active_components ${comp})
else ()
message(STATUS "Disabling ${comp} backend")
endif ()
endforeach ()
In Halide/CMakeLists.txt
option(BUILD_OPTIONAL_COMPONENTS "Set to OFF to not build optional components even if the underlying LLVM has that target enabled" ON)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@alexreinking @steven-johnson - Any thoughts on this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A simpler solution was to simply not build the hexagon backend in llvm on builders that don't handle hexagon. I have updated my PR -> halide/build_bot#237
@steven-johnson - I have tested this again and it looks good. We can merge this. Following this, we should merge halide/build_bot#237 |
OK, but we have to be sure that this passes the clang-tidy checks first -- currently it does not |
I think we're still just waiting on the clang-tidy fixes here |
Yes, we only need to merge main into this branch and those errors should get resolved. |
I don't have permission to change your branch, you need to do it |
Unfortunately, this isn't my branch either. It is Alex's as he was helping me out. I couldn't get in touch with him in the office today. I have sent him a message to merge main into his branch, hopefully he'll be online tomorrow. |
…one of #7671) (#7741) * Add CMakeLists.txt to build the hexagon_remote runtime. * Print an error message if libhalide_hexagon_host.so is not found. * Fix case mismatch in hexagon_remote/CMakeLists.txt * Remove some code that had been commented out in hexagon_remote/CMakeLists.txt * Remove unused argument in macro in hexagon_remote/CMakeLists.txt * add find module for Hexagon * move more variables to find module * Build binary modules with ExternalProject * group platform-speicifc sources into subdirectories * Pass HEXAGON_TOOLS_ROOT, too * Use the desired layout for the build-tree artifacts * Use SYSTEM for Hexagon SDK include dirs * trigger buildbots * Ignore code in src/runtime/hexagon_remote/bin/src for clang-tidy * Just skip hexagon_remote entirely for Halide_CLANG_TIDY_BUILD * Add an option to enable the building of the hexagon remote runtime --------- Co-authored-by: Alex Reinking <[email protected]> Co-authored-by: Steven Johnson <[email protected]>
Is this PR still useful, or has it been subsumed by the other PR for this that landed recently? |
1 similar comment
Is this PR still useful, or has it been subsumed by the other PR for this that landed recently? |
Yes, this PR should be closed because it is subsumed by #7741 which has now been merged. |
…one of halide#7671) (halide#7741) * Add CMakeLists.txt to build the hexagon_remote runtime. * Print an error message if libhalide_hexagon_host.so is not found. * Fix case mismatch in hexagon_remote/CMakeLists.txt * Remove some code that had been commented out in hexagon_remote/CMakeLists.txt * Remove unused argument in macro in hexagon_remote/CMakeLists.txt * add find module for Hexagon * move more variables to find module * Build binary modules with ExternalProject * group platform-speicifc sources into subdirectories * Pass HEXAGON_TOOLS_ROOT, too * Use the desired layout for the build-tree artifacts * Use SYSTEM for Hexagon SDK include dirs * trigger buildbots * Ignore code in src/runtime/hexagon_remote/bin/src for clang-tidy * Just skip hexagon_remote entirely for Halide_CLANG_TIDY_BUILD * Add an option to enable the building of the hexagon remote runtime --------- Co-authored-by: Alex Reinking <[email protected]> Co-authored-by: Steven Johnson <[email protected]>
This is a reimplementation of #7659 that uses ExternalProject and the Hexagon SDK-provided toolchain files. This will require relatively less maintenance when porting the build between Hexagon SDK versions.
Notable changes:
src/runtime/hexagon_remote
have been arranged into subdirectoriesqurt
andandroid
based on which toolchain must compile them. This avoids a horrible use of recursive CMake.To-do:
SYSTEM
includes for the SDK directories.Halide
depend onhexagon_runtime
?Future work: