You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by al...@apache.org on 2022/08/23 15:05:52 UTC
[kudu] 02/04: [macos] fix build on macOS (Xcode 12.4 and earlier)
This is an automated email from the ASF dual-hosted git repository.
alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git
commit 056308c978e97e3ec550f04ca2d842f833e93cee
Author: Alexey Serbin <al...@apache.org>
AuthorDate: Fri Aug 5 19:24:11 2022 -0700
[macos] fix build on macOS (Xcode 12.4 and earlier)
The change introduced by [1] broke build on my macOS laptop
with Xcode 12.4.
This patch addresses the issue: as it turned out, starting with
Xcode 12.5 the location of the libc++ headers changed, so it's necessary
to use different approaches for different Xcode versions (for details,
see the comment added in src/kudu/codegen/CMakeLists.txt).
I verified the new approach works on my Intel-based laptop:
* macOS Catalina 10.15.7 with Xcode 11.7, 12.4
* macOS BigSur 11.6.8 with Xcode 11.7, 12.4, 12.5, 13.2.1.
[1] https://github.com/apache/kudu/commit/543e128d473f8f7836e605bba8cd6512fa918550
Change-Id: Ib47f2d04cb87a3fc9c9a8b8c10c17d4f502c47c0
Reviewed-on: http://gerrit.cloudera.org:8080/18820
Tested-by: Alexey Serbin <al...@apache.org>
Reviewed-by: Attila Bukor <ab...@apache.org>
Tested-by: Attila Bukor <ab...@apache.org>
---
src/kudu/codegen/CMakeLists.txt | 46 ++++++++++++++++++++++++++++++++++++-----
1 file changed, 41 insertions(+), 5 deletions(-)
diff --git a/src/kudu/codegen/CMakeLists.txt b/src/kudu/codegen/CMakeLists.txt
index c87b0047a..eb32a41d5 100644
--- a/src/kudu/codegen/CMakeLists.txt
+++ b/src/kudu/codegen/CMakeLists.txt
@@ -65,11 +65,47 @@ foreach(noprefix ${IR_INCLUDES})
endforeach()
if (APPLE)
- # OS X keeps the libc++ headers in a non-standard location that the thirdparty
- # Clang does not know about by default.
- set(PREFIXED_IR_INCLUDES
- ${PREFIXED_IR_INCLUDES}
- -cxx-isystem "${CMAKE_OSX_SYSROOT}")
+ # The macOS keeps the libc++ headers in a non-standard location so
+ # that the thirdparty CLANG does not know about by default.
+ #
+ # Xcode starting with version 12.5 has the libc++ headers under
+ # Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk,
+ # which corresponds to CMAKE_OSX_SYSROOT, so it's enough to add -isysroot
+ # pointing to CMAKE_OSX_SYSROOT.
+ #
+ # Xcode prior to version 12.5 (12.4 and earlier, inclusive) doesn't have the
+ # libc++ headers under CMAKE_OSX_SYSROOT, but instead keeps those under
+ # Contents/Developer/Toolchains/XcodeDefault.xctoolchain: with that,
+ # it's easy to deduce the path to the libc++ headers from the output
+ # produced by `clang++ --version`.
+ #
+ # For non-clang compilers, assume the libc++ include directory provided
+ # with the Xcode command line tools.
+ if (NOT "${COMPILER_FAMILY}" STREQUAL "clang")
+ set(PREFIXED_IR_INCLUDES
+ ${PREFIXED_IR_INCLUDES}
+ -cxx-isystem "/Library/Developer/CommandLineTools/usr/include/c++/v1")
+ elseif (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 12.0.5)
+ execute_process(
+ COMMAND ${CMAKE_CXX_COMPILER} --version
+ COMMAND grep -E "^InstalledDir: "
+ COMMAND sed "s/^InstalledDir: \\(.*\\)$/\\1/"
+ RESULT_VARIABLE CXX_INSTALLED_DIR_CMD_EXIT_CODE
+ OUTPUT_VARIABLE CXX_INSTALLED_DIR_CMD_OUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if (${CXX_INSTALLED_DIR_CMD_EXIT_CODE} EQUAL 0 AND
+ NOT ${CXX_INSTALLED_DIR_CMD_OUT} STREQUAL "")
+ set(PREFIXED_IR_INCLUDES
+ ${PREFIXED_IR_INCLUDES}
+ -cxx-isystem "${CXX_INSTALLED_DIR_CMD_OUT}/../include/c++/v1")
+ else()
+ message(FATAL_ERROR "failed to deduce path to libc++ headers")
+ endif()
+ else()
+ set(PREFIXED_IR_INCLUDES
+ ${PREFIXED_IR_INCLUDES}
+ -isysroot "${CMAKE_OSX_SYSROOT}")
+ endif()
endif()
# Get preprocessing definitions, which enable directives for glog and gtest.