[
https://issues.apache.org/jira/browse/KUDU-3678?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18008548#comment-18008548
]
ASF subversion and git services commented on KUDU-3678:
-------------------------------------------------------
Commit e902cc29bd6343ec92700ac26a6a1f837df14def in kudu's branch
refs/heads/master from Jeffrey Smith
[ https://gitbox.apache.org/repos/asf?p=kudu.git;h=e902cc29b ]
KUDU-3678: Fix cmake compilation in MacOS
This patch fixes compiling cmake in MacOS by removing an old define
that sets fdopen to NULL. This change is already present in cmake
version 3.30 and greater.
Change-Id: I8ceec62d5c0fd7ff1564fec10ab4761b699c4e6d
Reviewed-on: http://gerrit.cloudera.org:8080/23196
Tested-by: Alexey Serbin <[email protected]>
Reviewed-by: Alexey Serbin <[email protected]>
> MacOS 15.4 thirdparty dependency build failures
> -----------------------------------------------
>
> Key: KUDU-3678
> URL: https://issues.apache.org/jira/browse/KUDU-3678
> Project: Kudu
> Issue Type: Bug
> Components: build
> Affects Versions: 1.18
> Environment: MacOS 15.4.1
> CPU: M3
> Reporter: Jeffrey Smith
> Priority: Major
> Attachments: cmake-fix-macos-compilation.patch,
> crcutil-fix-macos-arm64-flags.patch, postgres-fix-strchrnul-macos-check.patch
>
>
> While trying to build Kudu's thirdparty dependencies on arm64, I came across
> three different issues that affect MacOS and prevent building the thirdparty
> dependencies:
> Cmake 2.25:
> {code:java}
>
> /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk/usr/include/_stdio.h:318:7:
> error: expected identifier or '('
> 318 | FILE *fdopen(int, const char *)
> __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fdopen));
> | ^
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/zutil.h:147:33:
> note: expanded from macro 'fdopen'
> 147 | # define fdopen(fd,mode) NULL /* No fdopen() */
> | ^
> /Library/Developer/CommandLineTools/usr/lib/clang/17/include/__stddef_null.h:26:16:
> note: expanded from macro 'NULL'
> 26 | #define NULL ((void*)0)
> | ^
> In file included from
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/zutil.c:10:
> In file included from
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/gzguts.h:21:
> In file included from
> /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk/usr/include/stdio.h:61:
> /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk/usr/include/_stdio.h:318:7:
> error: expected ')'
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/zutil.h:147:33:
> note: expanded from macro 'fdopen'
> 147 | # define fdopen(fd,mode) NULL /* No fdopen() */
> | ^
> /Library/Developer/CommandLineTools/usr/lib/clang/17/include/__stddef_null.h:26:16:
> note: expanded from macro 'NULL'
> 26 | #define NULL ((void*)0)
> | ^
> /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk/usr/include/_stdio.h:318:7:
> note: to match this '('
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/zutil.h:147:33:
> note: expanded from macro 'fdopen'
> 147 | # define fdopen(fd,mode) NULL /* No fdopen() */
> | ^
> /Library/Developer/CommandLineTools/usr/lib/clang/17/include/__stddef_null.h:26:15:
> note: expanded from macro 'NULL'
> 26 | #define NULL ((void*)0)
> | ^
> In file included from
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/zutil.c:10:
> In file included from
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/gzguts.h:21:
> In file included from
> /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk/usr/include/stdio.h:61:
> /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk/usr/include/_stdio.h:318:7:
> error: expected ')'
> 318 | FILE *fdopen(int, const char *)
> __DARWIN_ALIAS_STARTING(__MAC_10_6, __IPHONE_2_0, __DARWIN_ALIAS(fdopen));
> | ^
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/zutil.h:147:33:
> note: expanded from macro 'fdopen'
> 147 | # define fdopen(fd,mode) NULL /* No fdopen() */
> | ^
> /Library/Developer/CommandLineTools/usr/lib/clang/17/include/__stddef_null.h:26:22:
> note: expanded from macro 'NULL'
> 26 | #define NULL ((void*)0)
> | ^
> /Library/Developer/CommandLineTools/SDKs/MacOSX15.5.sdk/usr/include/_stdio.h:318:7:
> note: to match this '('
> /Users/user/kudu-apache/thirdparty/src/cmake-3.25.3/Utilities/cmzlib/zutil.h:147:33:
> note: expanded from macro 'fdopen'
> 147 | # define fdopen(fd,mode) NULL /* No fdopen() */
> | ^
> /Library/Developer/CommandLineTools/usr/lib/clang/17/include/__stddef_null.h:26:14:
> note: expanded from macro 'NULL'
> 26 | #define NULL ((void*)0)
> | ^
> 3 errors generated.
> make[2]: *** [Utilities/cmzlib/CMakeFiles/cmzlib.dir/zutil.c.o] Error 1
> make[1]: *** [Utilities/cmzlib/CMakeFiles/cmzlib.dir/all] Error 2
> make[1]: *** Waiting for unfinished jobs....{code}
> Postgres:
> {code:java}
> /Users/user/kudu-apache/thirdparty/src/postgresql-17.2/src/port/snprintf.c:414:27:
> error: 'strchrnul' is only available on macOS 15.4 or newer
> [-Werror,-Wunguarded-availability-new]
> 414 | const char *next_pct = strchrnul(format + 1,
> '%');
> | ^~~~~~~~~
> /Users/user/kudu-apache/thirdparty/src/postgresql-17.2/src/port/snprintf.c:366:14:
> note: 'strchrnul' has been marked as being introduced in macOS 15.4 here,
> but the deployment target is macOS 15.0.0
> 366 | extern char *strchrnul(const char *s, int c);
> | ^
> /Users/user/kudu-apache/thirdparty/src/postgresql-17.2/src/port/snprintf.c:414:27:
> note: enclose 'strchrnul' in a __builtin_available check to silence this
> warning
> 414 | const char *next_pct = strchrnul(format + 1,
> '%');
> | ^~~~~~~~~
> 415 |
> 416 | /* Dump literal data we just scanned over */
> 417 | dostr(format, next_pct - format, target);
> 418 | if (target->failed)
> 419 | break;
> 420 |
> 421 | if (*next_pct == '\0')
> 422 | break;
> 423 | format = next_pct;
> |
> 1 error generated.
> make[2]: *** [snprintf.o] Error 1
> {code}
> Crcutil:
> {code:java}
> clang++: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]
> make: *** [code/usage-crc32c_sse4.o] Error 1
> make: *** Waiting for unfinished jobs....
> clang++: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]
> make: *** [code/usage-multiword_128_64_gcc_amd64_sse2.o] Error 1
> clang++: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]
> make: *** [examples/usage-interface.o] Error 1
> clang++: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]
> make: *** [code/usage-multiword_64_64_gcc_i386_mmx.o] Error 1
> clang++: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]
> make: *** [examples/usage-usage.o] Error 1
> clang++: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]
> make: *** [code/usage-multiword_64_64_gcc_amd64_asm.o] Error 1
> clang++: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]
> make: *** [code/usage-multiword_64_64_cl_i386_mmx.o] Error 1
> libtool: compile: g++ -DHAVE_CONFIG_H -I. -DCRCUTIL_USE_MM_CRC32=1 -Wall
> -Icode -Iexamples -Itests -O3 -msse2 -msse4.2 -fPIC -g
> -fno-omit-frame-pointer -O2 -stdlib=libc++ -MT
> code/libcrcutil_la-multiword_128_64_gcc_amd64_sse2.lo -MD -MP -MF
> code/.deps/libcrcutil_la-multiword_128_64_gcc_amd64_sse2.Tpo -c
> code/multiword_128_64_gcc_amd64_sse2.cc -fno-common -DPIC -o
> code/.libs/libcrcutil_la-multiword_128_64_gcc_amd64_sse2.o
> libtool: compile: g++ -DHAVE_CONFIG_H -I. -DCRCUTIL_USE_MM_CRC32=1 -Wall
> -Icode -Iexamples -Itests -O3 -msse2 -msse4.2 -fPIC -g
> -fno-omit-frame-pointer -O2 -stdlib=libc++ -MT
> code/libcrcutil_la-crc32c_sse4.lo -MD -MP -MF
> code/.deps/libcrcutil_la-crc32c_sse4.Tpo -c code/crc32c_sse4.cc -fno-common
> -DPIC -o code/.libs/libcrcutil_la-crc32c_sse4.o
> libtool: compile: g++ -DHAVE_CONFIG_H -I. -DCRCUTIL_USE_MM_CRC32=1 -Wall
> -Icode -Iexamples -Itests -O3 -msse2 -msse4.2 -fPIC -g
> -fno-omit-frame-pointer -O2 -stdlib=libc++ -MT
> code/libcrcutil_la-multiword_64_64_cl_i386_mmx.lo -MD -MP -MF
> code/.deps/libcrcutil_la-multiword_64_64_cl_i386_mmx.Tpo -c
> code/multiword_64_64_cl_i386_mmx.cc -fno-common -DPIC -o
> code/.libs/libcrcutil_la-multiword_64_64_cl_i386_mmx.o
> libtool: compile: g++ -DHAVE_CONFIG_H -I. -DCRCUTIL_USE_MM_CRC32=1 -Wall
> -Icode -Iexamples -Itests -O3 -msse2 -msse4.2 -fPIC -g
> -fno-omit-frame-pointer -O2 -stdlib=libc++ -MT
> code/libcrcutil_la-multiword_64_64_gcc_amd64_asm.lo -MD -MP -MF
> code/.deps/libcrcutil_la-multiword_64_64_gcc_amd64_asm.Tpo -c
> code/multiword_64_64_gcc_amd64_asm.cc -fno-common -DPIC -o
> code/.libs/libcrcutil_la-multiword_64_64_gcc_amd64_asm.o
> clang++: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]clang++:
> error: unsupported option '-msse2' for target 'arm64-apple-darwin24.4.0'
> clang++: warning: argument unused during compilation: '-msse4.2'
> [-Wunused-command-line-argument]
> make: *** [code/libcrcutil_la-multiword_128_64_gcc_amd64_sse2.lo] Error 1
> make: *** [code/libcrcutil_la-crc32c_sse4.lo] Error 1
> rm -f stamp-h1
> touch config.h.in
> clang++clang++: : error: error: unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'unsupported option '-msse2' for target
> 'arm64-apple-darwin24.4.0'clang++clang++: : warning: warning: argument unused
> during compilation: '-msse4.2' [-Wunused-command-line-argument]argument
> unused during compilation: '-msse4.2' [-Wunused-command-line-argument]make:
> *** [code/libcrcutil_la-multiword_64_64_gcc_amd64_asm.lo] Error 1
> make: *** [code/libcrcutil_la-multiword_64_64_cl_i386_mmx.lo] Error 1{code}
> Cmake fails because it's trying to redefine fdopen, in zutil.h:
> {code:java}
> #if defined(MACOS) || defined(TARGET_OS_MAC)
> # define OS_CODE 7
> # ifndef Z_SOLO
> # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
> # include <unix.h> /* for fdopen */
> # else
> # ifndef fdopen
> # define fdopen(fd,mode) NULL /* No fdopen() */
> # endif
> # endif
> # endif
> #endif {code}
> Using the 3 attached patches, I was able to get them to build with no issues
> and then compile and run Kudu.
> For Cmake, this change is already present in newer versions of cmake (cmake
> 3.30 and later)
> The Postgres patch is based off [this
> commit|https://github.com/postgres/postgres/commit/6da2ba1d8a031984eb016fed6741bb2ac945f19d]
> The crcutil patch removes the offending flags when we're compiling on Arm64
> and MacOS.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)