【问题标题】:Scrambled arguments when building OpenJDK构建 OpenJDK 时的参数混乱
【发布时间】:2014-02-10 08:00:22
【问题描述】:

在尝试构建 OpenJDK 时,我在执行 make all 时遇到一系列错误:

/usr/bin/make: invalid option -- '8'
/usr/bin/make: invalid option -- '/'
/usr/bin/make: invalid option -- 'a'
/usr/bin/make: invalid option -- '/'
/usr/bin/make: invalid option -- 'c'

运行make all LOG=trace JOBS=1 给出

+ /usr/bin/make VERBOSE= LOG_LEVEL=trace -R -I /home/ft/openjdk8/make/common -f adlc.make -r -rRw -I/home/ft/open -j1 -dk8/make/common -I/home/ft/openjdk8/make/common -I/home/ft/openjdk8/make/common -I/home/ft/openjdk8/make/common -I/home/ft/openjdk8/make/common

作为不好的论据。相关部分是-I/home/ft/open -j1 -dk8/make/commongrep -R 'I/home/ft/open -j1 -dk8/make/common' 只出现日志。这发生在 ./configure --enable-debug 和没有。

我找到了一个issue on a mailing list,看起来很相似,但似乎他放弃了。

编辑:搜索-jimake/HotspotWrapper.gmk:@($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) SPEC=$(HOTSPOT_SPEC) BASE_SPEC=$(BASE_SPEC))是破坏事物的主要候选人

【问题讨论】:

  • 某些东西正在运行类似s/jd/j1 -/ 的替换,这会将I/home/ft/openjdk8/make/common 变成-I/home/ft/open -j1 -dk8/make/common 它会出现。这似乎是试图在 make 上强制执行最大数量的作业(与裸 -j 的默认无限制行为相反)。
  • 我也想知道是什么导致-I 参数被重复了这么多次(尽管这可能是正常的不良操作,并且这次运行没有特别的破坏/错误)。
  • 任何人都可以提供帮助的唯一方法是,如果您在 makefile 中找到调用子 make 的规则,并显示出来。一旦变量等被 make 扩展,如您所见,损坏已经造成,如果没有 makefile 中的内容(损坏之前),我们无法知道发生了什么。
  • @MadScientist 我对 make 的大部分经验都是作为最终用户,您对我如何做到这一点有什么建议吗?搜索-f adlc.makehotspot/make/linux/makefiles/top.make 中找到了@$(MAKE) -f adlc.make $(MFLAGS-adjusted),但这似乎不是顶级品牌,因为-f 之前的附加参数。

标签: makefile openjdk


【解决方案1】:

这就是为我做的。在热点目录中应用以下补丁:

diff -r 87ee5ee27509 make/linux/makefiles/adjust-mflags.sh
--- a/make/linux/makefiles/adjust-mflags.sh Tue Mar 04 11:51:03 2014 -0800
+++ b/make/linux/makefiles/adjust-mflags.sh Wed Sep 30 16:51:55 2015 -0700
@@ -64,7 +64,6 @@
    echo "$MFLAGS" \
    | sed '
        s/^-/ -/
-       s/ -\([^    ][^     ]*\)j/ -\1 -j/
        s/ -j[0-9][0-9]*/ -j/
        s/ -j\([^   ]\)/ -j -\1/
        s/ -j/ -j'${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}'/

其中一条规则似乎太宽了,如果随机目录包含 j 并且恰好出现在破折号之后,则它们正在匹配随机目录。

【讨论】:

    【解决方案2】:

    这似乎是记录在案的错误 (JDK-8028407) 的一部分。解决这个问题的方法是将我的 make 降级到 3.82,它确实可以编译 OpenJDK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多