8019470: Changes needed to compile JDK 8 on MacOS with clang compiler
Reviewed-by: erikj, ihse
--- a/common/autoconf/flags.m4 Wed Jul 05 19:32:12 2017 +0200
+++ b/common/autoconf/flags.m4 Tue Feb 25 23:38:52 2014 -0800
@@ -148,6 +148,26 @@
SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1'
SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1'
fi
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ PICFLAG=''
+ C_FLAG_REORDER=''
+ CXX_FLAG_REORDER=''
+
+ if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+ # Linking is different on MacOSX
+ SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
+ SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.'
+ SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
+ SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1'
+ SET_SHARED_LIBRARY_MAPFILE=''
+ else
+ # Default works for linux, might work on other platforms as well.
+ SHARED_LIBRARY_FLAGS='-shared'
+ SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1'
+ SET_SHARED_LIBRARY_ORIGIN="-Xlinker -z -Xlinker origin $SET_EXECUTABLE_ORIGIN"
+ SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1'
+ SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1'
+ fi
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
PICFLAG="-KPIC"
C_FLAG_REORDER='-xF'
@@ -242,6 +262,8 @@
# Generate make dependency files
if test "x$TOOLCHAIN_TYPE" = xgcc; then
C_FLAG_DEPS="-MMD -MF"
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ C_FLAG_DEPS="-MMD -MF"
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
C_FLAG_DEPS="-xMMD -xMF"
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
@@ -260,6 +282,9 @@
CFLAGS_DEBUG_SYMBOLS="-g"
CXXFLAGS_DEBUG_SYMBOLS="-g"
fi
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ CFLAGS_DEBUG_SYMBOLS="-g"
+ CXXFLAGS_DEBUG_SYMBOLS="-g"
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
CFLAGS_DEBUG_SYMBOLS="-g -xs"
CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
@@ -315,6 +340,20 @@
C_O_FLAG_NORM="-O2"
C_O_FLAG_NONE="-O0"
fi
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+ # On MacOSX we optimize for size, something
+ # we should do for all platforms?
+ C_O_FLAG_HIGHEST="-Os"
+ C_O_FLAG_HI="-Os"
+ C_O_FLAG_NORM="-Os"
+ C_O_FLAG_NONE=""
+ else
+ C_O_FLAG_HIGHEST="-O3"
+ C_O_FLAG_HI="-O3"
+ C_O_FLAG_NORM="-O2"
+ C_O_FLAG_NONE="-O0"
+ fi
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
C_O_FLAG_HIGHEST="-O3"
C_O_FLAG_HI="-O3 -qstrict"
--- a/common/autoconf/generated-configure.sh Wed Jul 05 19:32:12 2017 +0200
+++ b/common/autoconf/generated-configure.sh Tue Feb 25 23:38:52 2014 -0800
@@ -4221,7 +4221,7 @@
#CUSTOM_AUTOCONF_INCLUDE
# Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1394011255
+DATE_WHEN_GENERATED=1394150589
###############################################################################
#
@@ -26297,8 +26297,28 @@
# Use indirect variable referencing
toolchain_var_name=VALID_TOOLCHAINS_$OPENJDK_BUILD_OS
VALID_TOOLCHAINS=${!toolchain_var_name}
- # First toolchain type in the list is the default
- DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *}
+
+ if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+ # On Mac OS X, default toolchain to clang after Xcode 5
+ XCODE_VERSION_OUTPUT=`xcodebuild -version 2>&1 | $HEAD -n 1`
+ $ECHO "$XCODE_VERSION_OUTPUT" | $GREP "Xcode " > /dev/null
+ if test $? -ne 0; then
+ as_fn_error $? "Failed to determine Xcode version." "$LINENO" 5
+ fi
+ XCODE_MAJOR_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | \
+ $SED -e 's/^Xcode \([1-9][0-9.]*\)/\1/' | \
+ $CUT -f 1 -d .`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Xcode major version: $XCODE_MAJOR_VERSION" >&5
+$as_echo "$as_me: Xcode major version: $XCODE_MAJOR_VERSION" >&6;}
+ if test $XCODE_MAJOR_VERSION -ge 5; then
+ DEFAULT_TOOLCHAIN="clang"
+ else
+ DEFAULT_TOOLCHAIN="gcc"
+ fi
+ else
+ # First toolchain type in the list is the default
+ DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *}
+ fi
if test "x$with_toolchain_type" = xlist; then
# List all toolchains
@@ -41236,6 +41256,26 @@
SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1'
SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1'
fi
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ PICFLAG=''
+ C_FLAG_REORDER=''
+ CXX_FLAG_REORDER=''
+
+ if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+ # Linking is different on MacOSX
+ SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
+ SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.'
+ SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
+ SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1'
+ SET_SHARED_LIBRARY_MAPFILE=''
+ else
+ # Default works for linux, might work on other platforms as well.
+ SHARED_LIBRARY_FLAGS='-shared'
+ SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN$1'
+ SET_SHARED_LIBRARY_ORIGIN="-Xlinker -z -Xlinker origin $SET_EXECUTABLE_ORIGIN"
+ SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1'
+ SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$1'
+ fi
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
PICFLAG="-KPIC"
C_FLAG_REORDER='-xF'
@@ -41297,6 +41337,8 @@
# Generate make dependency files
if test "x$TOOLCHAIN_TYPE" = xgcc; then
C_FLAG_DEPS="-MMD -MF"
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ C_FLAG_DEPS="-MMD -MF"
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
C_FLAG_DEPS="-xMMD -xMF"
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
@@ -41315,6 +41357,9 @@
CFLAGS_DEBUG_SYMBOLS="-g"
CXXFLAGS_DEBUG_SYMBOLS="-g"
fi
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ CFLAGS_DEBUG_SYMBOLS="-g"
+ CXXFLAGS_DEBUG_SYMBOLS="-g"
elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
CFLAGS_DEBUG_SYMBOLS="-g -xs"
CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
@@ -41370,6 +41415,20 @@
C_O_FLAG_NORM="-O2"
C_O_FLAG_NONE="-O0"
fi
+ elif test "x$TOOLCHAIN_TYPE" = xclang; then
+ if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+ # On MacOSX we optimize for size, something
+ # we should do for all platforms?
+ C_O_FLAG_HIGHEST="-Os"
+ C_O_FLAG_HI="-Os"
+ C_O_FLAG_NORM="-Os"
+ C_O_FLAG_NONE=""
+ else
+ C_O_FLAG_HIGHEST="-O3"
+ C_O_FLAG_HI="-O3"
+ C_O_FLAG_NORM="-O2"
+ C_O_FLAG_NONE="-O0"
+ fi
elif test "x$TOOLCHAIN_TYPE" = xxlc; then
C_O_FLAG_HIGHEST="-O3"
C_O_FLAG_HI="-O3 -qstrict"
--- a/common/autoconf/toolchain.m4 Wed Jul 05 19:32:12 2017 +0200
+++ b/common/autoconf/toolchain.m4 Tue Feb 25 23:38:52 2014 -0800
@@ -96,8 +96,27 @@
# Use indirect variable referencing
toolchain_var_name=VALID_TOOLCHAINS_$OPENJDK_BUILD_OS
VALID_TOOLCHAINS=${!toolchain_var_name}
- # First toolchain type in the list is the default
- DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *}
+
+ if test "x$OPENJDK_TARGET_OS" = xmacosx; then
+ # On Mac OS X, default toolchain to clang after Xcode 5
+ XCODE_VERSION_OUTPUT=`xcodebuild -version 2>&1 | $HEAD -n 1`
+ $ECHO "$XCODE_VERSION_OUTPUT" | $GREP "Xcode " > /dev/null
+ if test $? -ne 0; then
+ AC_MSG_ERROR([Failed to determine Xcode version.])
+ fi
+ XCODE_MAJOR_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | \
+ $SED -e 's/^Xcode \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/' | \
+ $CUT -f 1 -d .`
+ AC_MSG_NOTICE([Xcode major version: $XCODE_MAJOR_VERSION])
+ if test $XCODE_MAJOR_VERSION -ge 5; then
+ DEFAULT_TOOLCHAIN="clang"
+ else
+ DEFAULT_TOOLCHAIN="gcc"
+ fi
+ else
+ # First toolchain type in the list is the default
+ DEFAULT_TOOLCHAIN=${VALID_TOOLCHAINS%% *}
+ fi
if test "x$with_toolchain_type" = xlist; then
# List all toolchains