[讨论] Mac OS X 10.9.2 build JDK8有谁build成功过么
yueyemaitian
2014-03-28
近来遇到个问题,想看看jvm cmsgc的时候的debug信息,就build了下jdk,先是根据obuildfactory的这篇文章试了下jdk7,不行。
于是就根据jdk源码里头readme自己build,但是遇到很多问题,查了一堆资料是说clang新版本很多参数都废掉了。我也试图改了openjdk8/hotspot/make/bsd/makefiles/gcc.make一些gcc配置项,解决了诸如这种问题: /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/utilities/globalDefinitions.hpp:754:11: error: enumeration values 'number_of_states' and 'ilgl' not handled in switch [-Werror,-Wswitch] switch (state) { ^ /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/utilities/globalDefinitions.hpp:1108:24: error: implicit conversion changes signedness: 'uintx' (aka 'unsigned long') to 'intptr_t' (aka 'long') [-Werror,-Wsign-conversion] if (!is_power_of_2(s)) basic_fatal("s must be a power of 2"); ~~~~~~~~~~~~~ ^ 但是还是有更多的问题,搞不定。现在遇到的问题是类似这种: In file included from /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/utilities/debug.hpp:29: /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/utilities/globalDefinitions.hpp:737:11: error: 6 enumeration values not handled in switch: 'T_ADDRESS', 'T_NARROWOOP', 'T_METADATA'... [-Werror,-Wswitch] switch (type) { ^ /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/utilities/globalDefinitions.hpp:754:11: error: enumeration values 'number_of_states' and 'ilgl' not handled in switch [-Werror,-Wswitch] switch (state) { ^ In file included from /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/precompiled/precompiled.hpp:29: In file included from /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/asm/assembler.hpp:28: In file included from /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/asm/codeBuffer.hpp:29: /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/code/relocInfo.hpp:367:27: error: friend declaration specifying a default argument must be a definition inline friend relocInfo prefix_relocInfo(int datalen = 0); ^ /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/code/relocInfo.hpp:462:18: error: friend declaration specifying a default argument must be the only declaration inline relocInfo prefix_relocInfo(int datalen) { ^ /Users/fanhua/develop/openjdk-home/sources/openjdk8/hotspot/src/share/vm/code/relocInfo.hpp:367:27: note: previous declaration is here inline friend relocInfo prefix_relocInfo(int datalen = 0); ^ 求各位帮忙看看! |
|
yueyemaitian
2014-03-29
gcc版本是:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn) Target: x86_64-apple-darwin13.1.0 Thread model: posix |
|
RednaxelaFX
2014-03-29
我在Mac OS X上build过OpenJDK 8 build 132的HotSpot VM,能正常build出来。
首先你用的不是GCC(g++)而是Clang。 其次你需要这些参数: make -C make CC=clang COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' USE_CLANG=true LP64=1 LANG=C ALT_BOOTDIR=$JAVA_HOME ARCH_DATA_MODEL=64 HOTSPOT_BUILD_JOBS=8 all_fastdebug 其中跟Clang相关的参数是 CC=clang COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' USE_CLANG=true。试试在你的build上加上这些参数来避开Clang的严格检查… 然后看看你的hotspot/make/bsd/makefiles/gcc.make里有没有下面这段,没有的话加上它(你的Clang是5.1的) ifeq ($(USE_CLANG), true) # Clang 4.2 ifeq ($(shell expr $(CC_VER_MAJOR) = 4 \& $(CC_VER_MINOR) = 2), 1) OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT) OPT_CFLAGS/unsafe.o += -O1 endif # Clang 5.0 ifeq ($(shell expr $(CC_VER_MAJOR) = 5 \& \( $(CC_VER_MINOR) = 0 \| $(CC_VER_MINOR) = 1 \) ), 1) OPT_CFLAGS/loopTransform.o += $(OPT_CFLAGS/NOOPT) OPT_CFLAGS/unsafe.o += -O1 OPT_CFLAGS/graalCompilerToVM.o += -O1 endif 另外可能有一处: ifeq ($(USE_CLANG),) CFLAGS += -pthread CFLAGS += -fcheck-new 可能需要把这个CFLAGS += -fcheck-new这行注释掉。 最后你需要修改一处源码,请参考:http://cr.openjdk.java.net/~henryjen/jdk9/8033057/webrev/hotspot.changeset |
|
yueyemaitian
2014-03-29
RednaxelaFX 写道 make -C make CC=clang COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' USE_CLANG=true LP64=1 LANG=C ALT_BOOTDIR=$JAVA_HOME ARCH_DATA_MODEL=64 HOTSPOT_BUILD_JOBS=8 all_fastdebug 其中跟Clang相关的参数是 CC=clang COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' USE_CLANG=true。试试在你的build上加上这些参数来避开Clang的严格检查… 这个地方开头多打了make -C吧? build成功了,多谢R大指点! 写了篇博客记录了下过程 |
|
RednaxelaFX
2014-03-30
yueyemaitian 写道 这个地方开头多打了make -C吧?
没有多打。我是在hotspot目录执行的make而不是在hotspot/make目录里执行的。make -C就是指定Makefile在哪里的。 |
|
yueyemaitian
2014-03-30
RednaxelaFX 写道 yueyemaitian 写道 这个地方开头多打了make -C吧?
没有多打。我是在hotspot目录执行的make而不是在hotspot/make目录里执行的。make -C就是指定Makefile在哪里的。 哈,好吧,是我对make不了解 |
|
pulsar_lxl
2014-09-05
我按照你得blog,到make那一步又出错了
Building OpenJDK for target 'all' in configuration 'macosx-x86_64-normal-server-fastdebug' ## Starting langtools Compiling 2 files for BUILD_TOOLS /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:305: 错误: 找不到符号 return tk.accepts(S.token(lookahead + 1).kind); ^ 符号: 变量 kind 位置: 类 Token /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:313: 错误: 找不到符号 return tk1.accepts(S.token(lookahead + 1).kind) && ^ 符号: 变量 kind 位置: 类 Token /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:314: 错误: 找不到符号 tk2.accepts(S.token(lookahead + 2).kind); ^ 符号: 变量 kind 位置: 类 Token /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:322: 错误: 找不到符号 return tk1.accepts(S.token(lookahead + 1).kind) && ^ 符号: 变量 kind 位置: 类 Token /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:323: 错误: 找不到符号 tk2.accepts(S.token(lookahead + 2).kind) && ^ 符号: 变量 kind 位置: 类 Token /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:324: 错误: 找不到符号 tk3.accepts(S.token(lookahead + 3).kind); ^ 符号: 变量 kind 位置: 类 Token /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:335: 错误: 找不到符号 if (!kinds[lookahead].accepts(S.token(lookahead + 1).kind)) { ^ 符号: 变量 kind 位置: 类 Token /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:350: 错误: 找不到符号 switch (token.kind) { ^ 符号: 变量 kind 位置: 类型为Token的变量 token /work/projects/opensource/openjdk8/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java:351: 错误: 需要常量字符串表达式 case SEMI: ^ 请问有什么解决办法吗? |