Jeffrey Smith created KUDU-3678:
-----------------------------------
Summary: 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
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 comes from [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)