-
Notifications
You must be signed in to change notification settings - Fork 3.5k
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
[Hexagon] Reuse Hexagon SDK analysis across cmake files #8822
Merged
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
15c750e
[Hexagon] Reuse Hexagon SDK analysis across cmake files
e4132bf
Don't modify CMAKE_SHARED_LINKER_FLAGS, instead set target properties
2187d5a
Add quotes around ${...}
3765132
Add USE_HEXAGON_ARCH variable to cmake configuration
8137504
Restart build
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,12 +16,12 @@ | |
# under the License. | ||
|
||
include(ExternalProject) | ||
include(cmake/modules/HexagonSDK.cmake) | ||
|
||
set(PICK_SIM "sim") | ||
set(PICK_HW "target") | ||
set(PICK_NONE "OFF") | ||
|
||
set(FOUND_HEXAGON_SDK_ROOT FALSE) | ||
set(FOUND_HEXAGON_TOOLCHAIN FALSE) | ||
|
||
function(find_hexagon_toolchain) | ||
|
@@ -47,41 +47,10 @@ function(find_hexagon_toolchain) | |
endif() | ||
endfunction() | ||
|
||
function(find_hexagon_sdk_root) | ||
if(FOUND_HEXAGON_SDK_ROOT) | ||
return() | ||
endif() | ||
message(STATUS "Checking Hexagon SDK root: ${USE_HEXAGON_SDK}") | ||
file(GLOB_RECURSE HEXAGON_AEESTDDEF "${USE_HEXAGON_SDK}/*/AEEStdDef.h") | ||
if(HEXAGON_AEESTDDEF) | ||
# The path is ${HEXAGON_SDK_ROOT}/incs/stddef/AEEStdDef.h. | ||
get_filename_component(HEXAGON_TMP0 "${HEXAGON_AEESTDDEF}" DIRECTORY) | ||
get_filename_component(HEXAGON_TMP1 "${HEXAGON_TMP0}" DIRECTORY) | ||
get_filename_component(HEXAGON_TMP2 "${HEXAGON_TMP1}" DIRECTORY) | ||
set(HEXAGON_SDK_ROOT "${HEXAGON_TMP2}" CACHE PATH | ||
"Root directory of Hexagon SDK") | ||
set(FOUND_HEXAGON_SDK_ROOT TRUE) | ||
else(HEXAGON_AEESTDDEF) | ||
message(SEND_ERROR "Cannot validate Hexagon SDK in ${USE_HEXAGON_SDK}") | ||
endif() | ||
endfunction() | ||
|
||
if(BUILD_FOR_HEXAGON) | ||
find_hexagon_sdk_root() | ||
if(HEXAGON_SDK_ROOT MATCHES "3.5.1") | ||
message(SEND_ERROR "Hexagon SDK 3.5.1 is not supported") | ||
elseif(HEXAGON_SDK_ROOT MATCHES "3\.[0-9]+\.[0-9]+") | ||
include_directories( | ||
SYSTEM "${USE_HEXAGON_SDK}/libs/common/qurt/ADSPv62MP/include/posix" | ||
SYSTEM "${USE_HEXAGON_SDK}/libs/common/qurt/ADSPv62MP/include/qurt") | ||
else() | ||
include_directories( | ||
SYSTEM "${HEXAGON_SDK_ROOT}/rtos/qurt/computev65/include/posix" | ||
SYSTEM "${HEXAGON_SDK_ROOT}/rtos/qurt/computev65/include/qurt") | ||
endif() | ||
include_directories( | ||
SYSTEM "${HEXAGON_SDK_ROOT}/incs" | ||
SYSTEM "${HEXAGON_SDK_ROOT}/incs/stddef") | ||
find_hexagon_sdk_root("${USE_HEXAGON_SDK}" "${USE_HEXAGON_ARCH}") | ||
# Add SDK and QuRT includes when building for Hexagon. | ||
include_directories(SYSTEM ${HEXAGON_SDK_INCLUDES} ${HEXAGON_QURT_INCLUDES}) | ||
endif() | ||
|
||
if(USE_HEXAGON_DEVICE STREQUAL "OFF") | ||
|
@@ -113,29 +82,19 @@ if(USE_HEXAGON_DEVICE STREQUAL "${PICK_SIM}") | |
CMAKE_ARGS | ||
"-DCMAKE_C_COMPILER=${HEXAGON_TOOLCHAIN}/bin/hexagon-clang" | ||
"-DCMAKE_CXX_COMPILER=${HEXAGON_TOOLCHAIN}/bin/hexagon-clang++" | ||
"-DHEXAGON_ARCH=${USE_HEXAGON_ARCH}" | ||
INSTALL_COMMAND "true" | ||
) | ||
elseif(USE_HEXAGON_DEVICE STREQUAL "${PICK_HW}") | ||
find_hexagon_sdk_root() | ||
find_hexagon_sdk_root("${USE_HEXAGON_SDK}" "${USE_HEXAGON_ARCH}") | ||
find_hexagon_toolchain() | ||
message(STATUS "Hexagon SDK: ${HEXAGON_SDK_ROOT}") | ||
if(HEXAGON_SDK_ROOT MATCHES "3.5.1") | ||
message(SEND_ERROR "Hexagon SDK 3.5.1 is not supported") | ||
elseif(HEXAGON_SDK_ROOT MATCHES "3\.[0-9]+\.[0-9]+") | ||
set(RPCMEM_DIR "libs/common/rpcmem") | ||
set(REMOTE_DIR "libs/common/remote/ship/android_Release_aarch64") | ||
else() | ||
set(RPCMEM_DIR "ipc/fastrpc/rpcmem") | ||
set(REMOTE_DIR "ipc/fastrpc/remote/ship/android_aarch64") | ||
endif() | ||
file(GLOB RUNTIME_HEXAGON_DEVICE_SRCS src/runtime/hexagon/target/*.cc) | ||
include_directories(SYSTEM "${HEXAGON_SDK_ROOT}/incs/stddef") | ||
include_directories(SYSTEM "${HEXAGON_SDK_ROOT}/${RPCMEM_DIR}/inc") | ||
include_directories( | ||
SYSTEM "${HEXAGON_SDK_ROOT}/incs") | ||
include_directories( | ||
SYSTEM "${HEXAGON_SDK_ROOT}/${REMOTE_DIR}") | ||
include_directories(SYSTEM "${HEXAGON_TOOLCHAIN}/include/iss") | ||
|
||
include_directories(SYSTEM | ||
${HEXAGON_SDK_INCLUDES} | ||
${HEXAGON_RPCMEM_ROOT}/inc | ||
${HEXAGON_REMOTE_ROOT} | ||
) | ||
Comment on lines
+93
to
+97
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you also switch this to |
||
list(APPEND TVM_RUNTIME_LINKER_LIBS "dl") | ||
if(BUILD_FOR_ANDROID) | ||
# Hexagon runtime uses __android_log_print, which is in liblog. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
# Licensed to the Apache Software Foundation (ASF) under one | ||
# or more contributor license agreements. See the NOTICE file | ||
# distributed with this work for additional information | ||
# regarding copyright ownership. The ASF licenses this file | ||
# to you under the Apache License, Version 2.0 (the | ||
# "License"); you may not use this file except in compliance | ||
# with the License. You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, | ||
# software distributed under the License is distributed on an | ||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
# KIND, either express or implied. See the License for the | ||
# specific language governing permissions and limitations | ||
# under the License. | ||
|
||
set(FOUND_HEXAGON_SDK_ROOT FALSE) | ||
|
||
macro(set_parent var) | ||
set(${var} ${ARGN} PARENT_SCOPE) | ||
endmacro() | ||
|
||
function(find_hexagon_sdk_root HEXAGON_SDK_PATH HEXAGON_ARCH) | ||
if(FOUND_HEXAGON_SDK_ROOT) | ||
return() | ||
endif() | ||
if(${ARGC} LESS "2") | ||
message(SEND_ERROR "Must provide Hexagon SDK path and Hexagon arch") | ||
endif() | ||
|
||
# Initial verification of the Hexagon SDK. | ||
message(STATUS "Checking Hexagon SDK root: ${HEXAGON_SDK_PATH}") | ||
file(GLOB_RECURSE VERSION_HEADERS "${HEXAGON_SDK_PATH}/*/version.h") | ||
if(VERSION_HEADERS) | ||
foreach(HEADER IN LISTS VERSION_HEADERS) | ||
if(HEADER MATCHES "incs/version.h$") | ||
set(SDK_VERSION_HEADER "${HEADER}") | ||
break() | ||
endif() | ||
endforeach() | ||
# The path is ${HEXAGON_SDK_ROOT}/incs/version.h. | ||
get_filename_component(TMP0 "${SDK_VERSION_HEADER}" DIRECTORY) | ||
get_filename_component(TMP1 "${TMP0}" DIRECTORY) | ||
set(HEXAGON_SDK_ROOT "${TMP1}" CACHE PATH "Root directory of Hexagon SDK") | ||
else() | ||
message(SEND_ERROR "Cannot validate Hexagon SDK in ${HEXAGON_SDK_PATH}") | ||
endif() | ||
|
||
execute_process( | ||
COMMAND grep "#define[ \t]*VERSION_STRING" "${SDK_VERSION_HEADER}" | ||
OUTPUT_VARIABLE SDK_VERSION_DEFINE) | ||
string( | ||
REGEX REPLACE ".*VERSION_STRING.* ([0-9\\.]+) .*" "\\1" | ||
SDK_VERSION_STRING "${SDK_VERSION_DEFINE}") | ||
|
||
if (SDK_VERSION_STRING MATCHES "3.5.1") | ||
message(SEND_ERROR "Hexagon SDK 3.5.1 is not supported") | ||
endif() | ||
|
||
# Set the Hexagon arch directory component. | ||
set(HEXARCH_DIR_v60 "ADSPv60MP") | ||
set(HEXARCH_DIR_v62 "ADSPv62MP") | ||
set(HEXARCH_DIR_v65 "computev65") | ||
set(HEXARCH_DIR_v66 "computev66") | ||
set(HEXARCH_DIR_v68 "computev68") | ||
tmoreau89 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
set(HEXARCH_DIR_STR "HEXARCH_DIR_${HEXAGON_ARCH}") | ||
set(HEXARCH_DIR "${${HEXARCH_DIR_STR}}") | ||
|
||
if(NOT HEXARCH_DIR) | ||
message(SEND_ERROR | ||
"Please set HEXAGON_ARCH to one of v60, v62, v65, v66, v68") | ||
endif() | ||
|
||
# Set parent variables: | ||
# - HEXAGON_SDK_VERSION | ||
# - HEXAGON_SDK_INCLUDES | ||
# - HEXAGON_QURT_INCLUDES | ||
# - HEXAGON_RPCMEM_ROOT | ||
# - HEXAGON_REMOTE_ROOT | ||
# - HEXAGON_QAIC_EXE | ||
set_parent(HEXAGON_SDK_VERSION "${SDK_VERSION_STRING}") | ||
|
||
if(SDK_VERSION_STRING MATCHES "^3\.[0-9]+\.[0-9]+") | ||
# SDK 3.x.y | ||
if(HEXAGON_ARCH MATCHES "v6[7-9]|v[7-9][0-9]") | ||
message(SEND_ERROR | ||
"Hexagon SDK ${SDK_VERSION_STRING} does not support ${HEXAGON_ARCH}") | ||
endif() | ||
set_parent(HEXAGON_SDK_INCLUDES | ||
"${HEXAGON_SDK_ROOT}/incs" | ||
"${HEXAGON_SDK_ROOT}/incs/a1std" | ||
"${HEXAGON_SDK_ROOT}/incs/qlist" | ||
"${HEXAGON_SDK_ROOT}/incs/stddef") | ||
set_parent(HEXAGON_QURT_INCLUDES | ||
"${HEXAGON_SDK_ROOT}/libs/common/qurt/${HEXARCH_DIR}/include/posix" | ||
"${HEXAGON_SDK_ROOT}/libs/common/qurt/${HEXARCH_DIR}/include/qurt") | ||
set_parent(HEXAGON_RPCMEM_ROOT "${HEXAGON_SDK_ROOT}/libs/common/rpcmem") | ||
set_parent(HEXAGON_REMOTE_ROOT | ||
"${HEXAGON_SDK_ROOT}/libs/common/remote/ship/android_Release_aarch64") | ||
set_parent(HEXAGON_QAIC_EXE "${HEXAGON_SDK_ROOT}/tools/qaic/bin/qaic") | ||
else() | ||
# SDK 4.x.y.z | ||
if(HEXAGON_ARCH MATCHES "v6[02]") | ||
message(SEND_ERROR | ||
"Hexagon SDK ${SDK_VERSION_STRING} does not support ${HEXAGON_ARCH}") | ||
endif() | ||
set_parent(HEXAGON_SDK_INCLUDES | ||
"${HEXAGON_SDK_ROOT}/incs" | ||
"${HEXAGON_SDK_ROOT}/incs/stddef") | ||
set_parent(HEXAGON_QURT_INCLUDES | ||
"${HEXAGON_SDK_ROOT}/rtos/qurt/${HEXARCH_DIR}/include/posix" | ||
"${HEXAGON_SDK_ROOT}/rtos/qurt/${HEXARCH_DIR}/include/qurt") | ||
set_parent(HEXAGON_RPCMEM_ROOT "${HEXAGON_SDK_ROOT}/ipc/fastrpc/rpcmem") | ||
set_parent(HEXAGON_REMOTE_ROOT # libadsprpc.so | ||
"${HEXAGON_SDK_ROOT}/ipc/fastrpc/remote/ship/android_aarch64") | ||
set_parent(HEXAGON_QAIC_EXE | ||
"${HEXAGON_SDK_ROOT}/ipc/fastrpc/qaic/Ubuntu16/qaic") | ||
endif() | ||
|
||
set(FOUND_HEXAGON_SDK_ROOT TRUE) | ||
endfunction() | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Can you switch this to
target_include_directories
? You may have to call it multiple times with different targets (tvm_objs
,tvm
). I know the old code usedinclude_directories
, but it would be good to clean this up.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.
I think that would also require moving the
include(cmake/modules/Hexagon.cmake)
to be after the definitions oftvm_objs
. It would then also require using thetarget_sources
function instead of appending to theRUNTIME_SRCS
variable, since theRUNTIME_SRCS
variable isn't used after the definition of the object libraries.If we're cleaning up the module usage, I'd lean toward having every module define an object library, along with any flags that are needed. It looks like there's a nice new feature in cmake 3.12 that allows object libraries to specify linkage. There are some workarounds for earlier versions, including using static libraries, but needing the
-Wl,--whole-archive
flag is causing some issues.I think I'd stick with the current style for consistency with other modules, but I want to change it to use object libraries if/when we require a newer version of cmake.
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.
These targets are created after the target-specific modules are included. In other words, they don't yet exist here.
Edit: This is essentially what @Lunderberg said, I didn't see his comment when I was replying.
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.
I would like to clean up the module, but I don't want to put too much of a burden on you @kparzysz-quic. If its too much work switch this to
target_include_directories
, we can leave it as further work.@Lunderberg I think cmake 3.9 is the minimum version of cmake we support. There are a lot of useful features in 3.12 and 3.13 that I'd like to use, but many OSs don't have newer version of cmake.
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.
That was my guess, since ubuntu18.04 is on 3.10 in the repo. It would be nice to have a newer version, but not worth dropping support. It looks like the
CMakeLists.txt
declares a minimum version of cmake 3.2, while the documentation gives 3.5.