RFR (M): Enable HotSpot build with Clang

Tim Bell tim.bell at oracle.com
Wed May 22 14:56:29 PDT 2013


I created RFE JDK-8015252 - Enable HotSpot build with Clang

The report should be visible at this URL in the next few business days:

http://bugs.sun.com/view_bug.do?bug_id=8015252

Tim

On 05/22/13 01:41 PM, Volker Simonis wrote:
>
> Hi,
>
> I'd like to propose the following change:
>
> http://cr.openjdk.java.net/~simonis/webrevs/hotspot_clang.v1/ 
> <http://cr.openjdk.java.net/%7Esimonis/webrevs/hotspot_clang.v1/>
>
> It would be great if somebody could open a BugID for it. Following 
> some details:
>
> With this patch it becomes possible to build the HotSpot VM with the 
> clang <http://clang.llvm.org/>, the "C language family frontend for 
> LLVM". The changes have been tested with clang 3.0 and 3.2 on 64-bit 
> Linux/Intel (Ubuntu 12.04) building both 32-bit and 64-bit HotSpot 
> VMs. The clang-build can be simply triggered by setting 
> |USE_CLANG=true| on the HotSpot build command line (in |hotspot/make|):
>
> make jvmg USE_CLANG=true ALT_BOOTDIR=/share/software/Java/jdk1.7.0 ARCH_DATA_MODEL=32 HOTSPOT_BUILD_JOBS=8
> make product USE_CLANG=true ALT_BOOTDIR=/share/software/Java/jdk1.7.0 ARCH_DATA_MODEL=64 HOTSPOT_BUILD_JOBS=8
> make product USE_CLANG=true ALT_BOOTDIR=/share/software/Java/jdk1.7.0 ARCH_DATA_MODEL=64 HOTSPOT_BUILD_JOBS=8 USE_PRECOMPILED_HEADER=0
>
>
>         What is it good for?
>
> The clang compiler provides very good diagnostic messages and 
> warnings. Currently all the following warnings are switched off in 
> order to successfully build the HotSpot with |-Werror|:
>
> -Wno-unused-value -Wno-logical-op-parentheses -Wno-parentheses-equality -Wno-parentheses
> -Wno-switch -Wno-tautological-constant-out-of-range-compare -Wno-tautological-compare
> -Wno-delete-non-virtual-dtor -Wno-deprecated -Wno-format -Wno-dynamic-class-memaccess
> -Wno-return-type -Wno-empty-body
>
> Gradually turning these warnings (or at least some of them) on and 
> fixing the corresponding responsible source code locations may 
> considerably improve the code quality and even reveal some real bugs.
>
> Another advantage of a clang build is the fact that clang is the 
> default compiler on MacOS. So this can be also seen as a first step 
> towards 7123056 : Update compiler used in Mac 10.7 to clang 
> <http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7123056>.
>
>
>         Implementation Details
>
> Currently the build will pick clang/clang++ from the current |PATH| 
> much in the same way as this is done for the gcc build. It is 
> therefore possible to test the build with different versions of clang 
> by simply changing the |PATH| settings.
>
> The changes are minimal in the sense that they don't change anything 
> in the current default build tool chain on Linux/Intel (i.e. without 
> |USE_CLANG=true| nothing will change). The very few source code 
> changes basically insert new code variants for clang in places where 
> we already dispatched based on the compiler anyway.
>
> The clang build only supports precompiled headers in 64-bit builds 
> because for 32-bit builds some files are compiled with |-fPIC| while 
> others are compiled without (see |NONPIC_OBJ_FILES| in 
> |make/linux/makefiles/rules.make|). But clang fails with an error if 
> the PCH file was compiled with other options than the actual 
> compilation unit. Therefore the default is to use PCHs for 64-bit 
> builds (but this can be turned off with |USE_PRECOMPILED_HEADER=0|) 
> and switch them off for 32-bit builds.
>
> Regards,
>
> Volker
>



More information about the hotspot-runtime-dev mailing list