From owner-freebsd-java@FreeBSD.ORG Sat Sep 14 23:45:45 2013 Return-Path: Delivered-To: java@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B25B9BE9; Sat, 14 Sep 2013 23:45:45 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from tensor.andric.com (tensor.andric.com [87.251.56.140]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id D9EB52235; Sat, 14 Sep 2013 23:45:44 +0000 (UTC) Received: from [IPv6:2001:7b8:3a7::8f9:73f5:56d9:8cd2] (unknown [IPv6:2001:7b8:3a7:0:8f9:73f5:56d9:8cd2]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id 35C865C44; Sun, 15 Sep 2013 01:45:42 +0200 (CEST) From: Dimitry Andric Content-Type: multipart/signed; boundary="Apple-Mail=_484484E3-1B53-4A83-A485-8A192C1E3AD7"; protocol="application/pgp-signature"; micalg=pgp-sha1 Subject: Building java/openjdk7 with clang Date: Sun, 15 Sep 2013 01:45:19 +0200 Message-Id: <108F3771-64B3-40E9-91FA-04C160442608@FreeBSD.org> To: Baptiste Daroussin Mime-Version: 1.0 (Mac OS X Mail 6.6 \(1510\)) X-Mailer: Apple Mail (2.1510) Cc: java@FreeBSD.org, Greg Lewis X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Sep 2013 23:45:45 -0000 --Apple-Mail=_484484E3-1B53-4A83-A485-8A192C1E3AD7 Content-Type: multipart/mixed; boundary="Apple-Mail=_423C12BA-A4B6-4E1B-9D43-BE6CF796B379" --Apple-Mail=_423C12BA-A4B6-4E1B-9D43-BE6CF796B379 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Hi, I took some time to figure out how to build java/openjdk7 with clang. There are a few items I changed: - Change a few instances of "ifneq ($(COMPILER_WARNINGS_FATAL),false)" to "ifeq ($(COMPILER_WARNINGS_FATAL),true)", to make sure -Werror is *not* used. There are zillions of warnings in openjdk, and I don't think it is worth the trouble to fix them all (even if that is possible :). - Remove -fcheck-new from CFLAGS, since clang does not support it, and it does not make sense anyway. This is the only one that is not strictly needed; if -Werror is not enabled, clang will just print a warning that the option is unused, but it won't be fatal. - Change the $(CC) -dumpspecs hack in one of the Makefiles to something more portable. The -dumpspecs is done to figure out if the compiler uses --hash-style=gnu when linking, and if it does, it changes the option to --hash-style=both. On FreeBSD, this is basically a no-op, so it could also be commented out entirely. - In jdk/src/solaris/native/java/net/net_util_md.c, change two instances of CHECK_NULL() to CHECK_NULL_RETURN(), since the function they are in is supposed to return a value. I chose to return 0, since that is what the function seems to use as a default value. With these fixes, openjdk7 builds and runs fine for me. I tried to run "gmake test" in the work directory, but that didn't do much, so I am not sure if a full test suite will survive anything. It would be nice if anybody knows a good way to test the produced binaries more thoroughly. -Dimitry --Apple-Mail=_423C12BA-A4B6-4E1B-9D43-BE6CF796B379 Content-Disposition: attachment; filename=java__openjdk7-fix-build-2.diff Content-Type: application/octet-stream; name="java__openjdk7-fix-build-2.diff" Content-Transfer-Encoding: 7bit Index: java/openjdk7/Makefile =================================================================== --- java/openjdk7/Makefile (revision 327163) +++ java/openjdk7/Makefile (working copy) @@ -29,7 +29,7 @@ USE_XORG+= x11 xext xi xrender xt xtst MAKE_ARGS= CC=${CC} CXX=${CXX} HOST_CC=${CC} MAKE_JOBS_UNSAFE= yes -USE_GCC= any +#USE_GCC= any OPTIONS_DEFINE= DEBUG POLICY TZUPDATE OPTIONS_DEFAULT= POLICY TZUPDATE Index: java/openjdk7/files/patch-set =================================================================== --- java/openjdk7/files/patch-set (revision 327163) +++ java/openjdk7/files/patch-set (working copy) @@ -5756,6 +5756,17 @@ # Synonyms for win32-like targets. compiler2: jvmg product +--- hotspot/make/bsd/makefiles/adlc.make 2012-08-10 18:22:56.000000000 +0200 ++++ hotspot/make/bsd/makefiles/adlc.make 2013-09-14 20:38:13.000000000 +0200 +@@ -68,7 +68,7 @@ + + # CFLAGS_WARN holds compiler options to suppress/enable warnings. + # Compiler warnings are treated as errors +-ifneq ($(COMPILER_WARNINGS_FATAL),false) ++ifeq ($(COMPILER_WARNINGS_FATAL), true) + CFLAGS_WARN = -Werror + endif + CFLAGS += $(CFLAGS_WARN) --- hotspot/make/bsd/makefiles/buildtree.make 2012-08-10 09:22:57.000000000 -0700 +++ hotspot/make/bsd/makefiles/buildtree.make 2013-04-28 16:29:16.000000000 -0700 @@ -1,5 +1,5 @@ @@ -5975,6 +5986,14 @@ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it +@@ -111,7 +111,6 @@ + CFLAGS += -fno-rtti + CFLAGS += -fno-exceptions + CFLAGS += -pthread +-CFLAGS += -fcheck-new + # version 4 and above support fvisibility=hidden (matches jni_x86.h file) + # except 4.1.2 gives pointless warnings that can't be disabled (afaik) + ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0" @@ -124,7 +124,11 @@ ARCHFLAG/ia64 = ARCHFLAG/sparc = -m32 -mcpu=v9 @@ -5987,6 +6006,15 @@ # Darwin-specific build flags ifeq ($(OS_VENDOR), Darwin) +@@ -159,7 +162,7 @@ + endif + + # Compiler warnings are treated as errors +-ifneq ($(COMPILER_WARNINGS_FATAL),false) ++ifeq ($(COMPILER_WARNINGS_FATAL), true) + WARNINGS_ARE_ERRORS = -Werror + endif + @@ -285,6 +289,26 @@ DEBUG_CFLAGS += -gstabs endif Index: java/openjdk7/files/patch-set-jdk =================================================================== --- java/openjdk7/files/patch-set-jdk (revision 327163) +++ java/openjdk7/files/patch-set-jdk (working copy) @@ -451,7 +451,7 @@ + +# If this is a --hash-style=gnu system, use --hash-style=both +# The gnu .hash section won't work on some Linux systems like SuSE 10. -+_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu') ++_HAS_HASH_STYLE_GNU:=$(shell $(CC) -v /dev/null -o /dev/null 2>&1 | $(GREP) -- '--hash-style=gnu') +ifneq ($(_HAS_HASH_STYLE_GNU),) + LDFLAGS_HASH_STYLE = -Wl,--hash-style=both +endif @@ -96310,6 +96310,18 @@ #ifdef __solaris__ #include #include +@@ -114,9 +118,9 @@ + static jfieldID ni_defaultIndexID; + if (ni_class == NULL) { + jclass c = (*env)->FindClass(env, "java/net/NetworkInterface"); +- CHECK_NULL(c); ++ CHECK_NULL_RETURN(c, 0); + c = (*env)->NewGlobalRef(env, c); +- CHECK_NULL(c); ++ CHECK_NULL_RETURN(c, 0); + ni_defaultIndexID = (*env)->GetStaticFieldID( + env, c, "defaultIndex", "I"); + ni_class = c; @@ -818,7 +822,7 @@ NET_InetAddressToSockaddr(JNIEnv *env, jobject iaObj, int port, struct sockaddr *him, int *len, jboolean v4MappedAddress) { --Apple-Mail=_423C12BA-A4B6-4E1B-9D43-BE6CF796B379 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_423C12BA-A4B6-4E1B-9D43-BE6CF796B379-- --Apple-Mail=_484484E3-1B53-4A83-A485-8A192C1E3AD7 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.20 (Darwin) iEYEARECAAYFAlI09RkACgkQsF6jCi4glqMPawCgs9TClZulaAmHYYl+ArGN2z+v SiIAoPDRP4Z0zcKrWxJ9T0KUqdnESxSD =jlCe -----END PGP SIGNATURE----- --Apple-Mail=_484484E3-1B53-4A83-A485-8A192C1E3AD7--