From bd2bbdc501a93134c447c708d490cf7823536224 Mon Sep 17 00:00:00 2001 From: kuba Date: Thu, 5 Sep 2019 22:27:43 -0700 Subject: [PATCH 1/4] #880 - Add support to build on arm. --- .../clang+llvm-7.0.0-aarch64-linux-gnu.tar.xz.SHA256 | 1 + .../clang+llvm-7.0.0-armv7a-linux-gnueabihf.tar.xz.SHA256 | 1 + cmake/DownloadAndExtractClang.cmake | 6 ++++++ 3 files changed, 8 insertions(+) create mode 100644 clang_archive_hashes/clang+llvm-7.0.0-aarch64-linux-gnu.tar.xz.SHA256 create mode 100644 clang_archive_hashes/clang+llvm-7.0.0-armv7a-linux-gnueabihf.tar.xz.SHA256 diff --git a/clang_archive_hashes/clang+llvm-7.0.0-aarch64-linux-gnu.tar.xz.SHA256 b/clang_archive_hashes/clang+llvm-7.0.0-aarch64-linux-gnu.tar.xz.SHA256 new file mode 100644 index 000000000..4a62842e1 --- /dev/null +++ b/clang_archive_hashes/clang+llvm-7.0.0-aarch64-linux-gnu.tar.xz.SHA256 @@ -0,0 +1 @@ +bd962b32818f8b07ae60e708f736eca5cd856f0d34ed9d1038cc9e0991390217 \ No newline at end of file diff --git a/clang_archive_hashes/clang+llvm-7.0.0-armv7a-linux-gnueabihf.tar.xz.SHA256 b/clang_archive_hashes/clang+llvm-7.0.0-armv7a-linux-gnueabihf.tar.xz.SHA256 new file mode 100644 index 000000000..d2240d8df --- /dev/null +++ b/clang_archive_hashes/clang+llvm-7.0.0-armv7a-linux-gnueabihf.tar.xz.SHA256 @@ -0,0 +1 @@ +2d831636d54ff7a3225a3a52f05b8723110e71fa982de1fa55c9fed307ec8aca \ No newline at end of file diff --git a/cmake/DownloadAndExtractClang.cmake b/cmake/DownloadAndExtractClang.cmake index e504a6e97..62e6d3549 100644 --- a/cmake/DownloadAndExtractClang.cmake +++ b/cmake/DownloadAndExtractClang.cmake @@ -27,6 +27,12 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL Linux) set(CLANG_ARCHIVE_NAME clang+llvm-${CLANG_VERSION}-x86_64-linux-gnu-ubuntu-16.04) endif() + message(${CMAKE_HOST_SYSTEM_PROCESSOR}) + if (${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64") + set(CLANG_ARCHIVE_NAME clang+llvm-${CLANG_VERSION}-aarch64-linux-gnu) + elseif (${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "armv7l") + set(CLANG_ARCHIVE_NAME clang+llvm-${CLANG_VERSION}-armv7a-linux-gnueabihf) + endif() endif() elseif(${CMAKE_SYSTEM_NAME} STREQUAL Darwin) From 0bf9994dc910d22ef9239c7d59ba563ffe1edaa5 Mon Sep 17 00:00:00 2001 From: kuba Date: Fri, 6 Sep 2019 21:14:18 -0700 Subject: [PATCH 2/4] Skip download step if clang tarball is already available in build directory. Helps on slower connection or while building with no internet connection. --- cmake/DownloadAndExtractClang.cmake | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/cmake/DownloadAndExtractClang.cmake b/cmake/DownloadAndExtractClang.cmake index 62e6d3549..7e407b028 100644 --- a/cmake/DownloadAndExtractClang.cmake +++ b/cmake/DownloadAndExtractClang.cmake @@ -79,15 +79,19 @@ file an issue to get it added.") endif() # Download Clang archive -message(STATUS "Downloading Clang ${CLANG_VERSION} (${CLANG_ARCHIVE_URL}) ...") -file(DOWNLOAD ${CLANG_ARCHIVE_URL} ${CLANG_ARCHIVE_FILE} - STATUS CLANG_ARCHIVE_DOWNLOAD_RESULT) - -# Abort if download failed -list(GET ${CLANG_ARCHIVE_DOWNLOAD_RESULT} 0 ERROR_CODE) -if(${ERROR_CODE}) - list(GET ${CLANG_ARCHIVE_DOWNLOAD_RESULT} 1 ERROR_STRING) - message(FATAL_ERROR ${ERROR_STRING}) +if (EXISTS ${CLANG_ARCHIVE_FILE}) + message (STATUS "file exists, skipping download: ${CLANG_ARCHIVE_FILE}") +else() + message(STATUS "Downloading Clang ${CLANG_VERSION} (${CLANG_ARCHIVE_URL}) ...") + file(DOWNLOAD ${CLANG_ARCHIVE_URL} ${CLANG_ARCHIVE_FILE} + STATUS CLANG_ARCHIVE_DOWNLOAD_RESULT) + + # Abort if download failed + list(GET ${CLANG_ARCHIVE_DOWNLOAD_RESULT} 0 ERROR_CODE) + if(${ERROR_CODE}) + list(GET ${CLANG_ARCHIVE_DOWNLOAD_RESULT} 1 ERROR_STRING) + message(FATAL_ERROR ${ERROR_STRING}) + endif() endif() # Retrieve expected hash from file and strip newline From d892041b1b46bc5de4722de19fc1a6781549bb42 Mon Sep 17 00:00:00 2001 From: kuba Date: Wed, 20 Nov 2019 20:38:39 -0800 Subject: [PATCH 3/4] Added cquery.sh - wrapper with a custom version of clang --- cquery.sh | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100755 cquery.sh diff --git a/cquery.sh b/cquery.sh new file mode 100755 index 000000000..821cc155d --- /dev/null +++ b/cquery.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# with clang90 +# cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=debug -DCLANG_ROOT=$HOME/toolchains/clang90 -DSYSTEM_CLANG=ON +# export LD_LIBRARY_PATH=$HOME/toolchains/clang90/lib:$LD_LIBRARY_PATH +# $HOME/SRC_jetson/cquery-kuba/build_clang90/debug/bin/cquery $@ + +$HOME/SRC_jetson/cquery-kuba/build/cquery $@ + From 34cd127fd372c848fe545a81ad5527335be8b813 Mon Sep 17 00:00:00 2001 From: kubaroth Date: Fri, 10 Jul 2020 08:05:38 -0900 Subject: [PATCH 4/4] Handle missing link atomic library on armv7 --- CMakeLists.txt | 5 +++++ cmake/DownloadAndExtractClang.cmake | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c54eae41..6bd331125 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -116,6 +116,11 @@ target_link_libraries(cquery PRIVATE Threads::Threads) if(${CMAKE_SYSTEM_NAME} STREQUAL Linux) # loguru calls dladdr target_link_libraries(cquery PRIVATE ${CMAKE_DL_LIBS}) + string(FIND ${CMAKE_HOST_SYSTEM_PROCESSOR} "armv7" result) + + if(${result} GREATER -1) + target_link_libraries(cquery PRIVATE atomic) + endif() elseif(${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD) # loguru::stacktrace_as_stdstring calls backtrace_symbols diff --git a/cmake/DownloadAndExtractClang.cmake b/cmake/DownloadAndExtractClang.cmake index 7e407b028..177c38601 100644 --- a/cmake/DownloadAndExtractClang.cmake +++ b/cmake/DownloadAndExtractClang.cmake @@ -27,7 +27,7 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL Linux) set(CLANG_ARCHIVE_NAME clang+llvm-${CLANG_VERSION}-x86_64-linux-gnu-ubuntu-16.04) endif() - message(${CMAKE_HOST_SYSTEM_PROCESSOR}) + message(STATUS "Host system processor: ${CMAKE_HOST_SYSTEM_PROCESSOR}") if (${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "aarch64") set(CLANG_ARCHIVE_NAME clang+llvm-${CLANG_VERSION}-aarch64-linux-gnu) elseif (${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "armv7l")