在Windows上构建OpenJDK

通过做一些实验,我发现手头提供JDK源代码来进行一些更改,使用它等等通常很有用。因此,我决定下载并编译该野兽。 显然,这花了我一些时间,尽管我最初的想法是,它应该和运行make命令一样简单:)。 您可能会猜到,我发现这不是一项微不足道的任务,并且为了简化以后的生活,保留一些有关我正在做的事情的记录将非常有用。

以下是我要做的步骤。 我认为计算机已经安装了Visual Studio 2010。 我觉得Express版本应该可以正常工作,但是我还没有尝试过。

  1. 安装cygwin。 确保已安装此处列出的所有软件包,其中一些默认情况下未安装。 以防万一,这是该表的副本,但建议与主源进行验证:
    二进制名称 类别 描述
    可执行文件 开发 Binutils GNU汇编器,链接器和二进制实用程序
    制作工具 开发 使 为CYGWIN构建的'make'实用程序的GNU版本。
    可执行文件 口译员 m4 传统Unix宏处理器的GNU实现
    cpio.exe 实用程序 cpio 一个管理文件存档的程序
    gawk.exe 实用程序 awk 模式导向的扫描和处理语言
    文件 实用程序 文件 使用“魔术”数字确定文件类型
    压缩文件 封存 压缩 打包和压缩(存档)文件
    解压缩文件 封存 解压缩 提取ZIP档案中的压缩文件
    免费版 系统 ps 显示系统中的可用和已用内存量

    不要忘记将cygwin的'bin'文件夹添加到PATH中。

  2. 此处安装Mercurial并将“ hg”添加到PATH。
  3. 安装用于Windows 7和.NET Framework 4的Microsoft Windows SDK
  4. 安装DirectX SDK 。 JDK需要v9.0,但我很难找到它。 所以我决定不打扰并安装最新的。 似乎工作正常。
  5. Bootstrap JDK是构建所必需的。 碰巧我使用了JDK6,但是假设任何> JDK6的版本都不会出现问题。
  6. 下载并安装Ant 。 我使用的是1.8.2版本。 将Ant添加到PATH。
  7. 结帐来源。 由于多种原因,它是最复杂的部分。 “ hg”不是特别稳定,因此某些应该由我的脚本完成的操作是手动完成的。

    因此,要在命令行中开始运行此命令:

    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u <some_folder>\openjdk7'

    这应该下载带有一些帮助脚本的根文件夹。

    然后在cygwin中,转到刚刚创建的“ openjdk7”文件夹并运行“ get_source.sh”。 “ get_source.sh”可能会失败或只是挂起(这正是我所发生的事情)。 如果是这样,则您可以尝试使用“ –pull”标志(元数据的拉协议)。 我不确定为什么,但这对我有所帮助。 不幸的是,脚本不是以非常友好的方式编写的,并且无法将任何“ hg”参数传递给源检索脚本。 因此,您需要转到“ make \ scripts \ hgforest.sh”并将“ –pull”添加到“ hg clone”的每次调用中。

    而且即使添加“ -pull”后仍然失败,嗯……只要放弃并手动运行以下命令:

    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/corba corba
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot hotspot
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jaxp jaxp
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jaxws jaxws
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jdk jdk
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/langtools langtools

    希望现在您有资源并且可以有所帮助:)

  8. Build需要一些外部二进制文件和一个可在Windows下运行的'make.exe'版本。 cygwin随附的'make'并没有真正起作用,因为路径名中的驱动器字母存在一些问题。

    接下来是我们需要编译几个文件。 一种是“ make.exe”的固定版本。 另一个是FreeType库,仅可作为源下载。

    如果您不希望编译所有这些东西,而只想轻松编译JDK,则建议从此处下载二进制文件(这是我的云端硬盘)。 将“ make.exe”解压缩到“ openjdk7 / bin”中。 请注意,该软件包中的“ make.exe”非常老,需要cygintl-3.dll,当前cygwin并未提供。 要修复此问题,只需复制cygintl-8.dll-> cygintl-3.dll。
    Freetype lib和dll必须放在ALT_FREETYPE_LIB_PATH conf变量引用的文件夹中(请参阅步骤13)。 另外,仍然需要一些Freetype标头,并通过make通过ALT_FREETYPE_HEADERS_PATH变量找到它们(请参见步骤13)。 这意味着您还需要下载源代码。

    如果您不是在寻找简单的解决方案,而是想自己编译这些二进制文件,请按照以下说明进行操作:

    1. 这里下载make 3.82并解压缩。 找到“ config.h.W32”并取消注释行,定义为“ HAVE_CYGWIN_SHELL”。 在Visual Studio中打开make_msvc_net2003.sln解决方案,选择“发布”配置并进行构建。 在“发布”文件夹中,您将获得“ make_msvc.net2003.exe”,并将其重命名为“ make.exe”。
    2. 现在编译FreeType:
      1. 此处下载FreeType v.2.4.7的源。
      2. 将其解压缩到某个位置,然后在Visual Studio中打开“ \ builds \ win32 \ vc2010 \ freetype.sln”。
      3. 转到项目属性(在项目树中的项目上单击鼠标右键),然后在“配置属性/常规/配置类型”中选择“动态库(.ddl)”,然后将输出重命名为“ freetype”。
      4. 更新ftoption.h,添加以下两行:
        #定义FT_EXPORT(x)__declspec(dllexport)x
        #定义FT_BASE(x)__declspec(dllexport)x
      5. 进行构建,您将在objs \ win32 \ vc2010中获得dll和lib。
      6. 不要忘记为“ ALT_FREETYPE_LIB_PATH”和“ ALT_FREETYPE_HEADERS_PATH”变量分配适当的值(请参阅步骤13)。
  9. 我在javadoc生成方面遇到了一些问题,但由于OutOfMemory失败。 为了修复它,我不得不更改“ openjdk7 \ jdk \ make \ docs \ Makefile”。
    这段代码:
    ifeq ($(ARCH_DATA_MODEL),64)
      MAX_VM_MEMORY = 1024
    else ifeq ($(ARCH),universal)
      MAX_VM_MEMORY = 1024
    else
      MAX_VM_MEMORY = 512
    endif

    必须用以下内容替换:

    ifeq ($(ARCH_DATA_MODEL),64)
      MAX_VM_MEMORY = 1024
    else ifeq ($(ARCH),universal)
      MAX_VM_MEMORY = 1024
    else
      MAX_VM_MEMORY = 1024
    endif
  10. 复制“ msvcr100.dll”到以下目录:
    cp /cygdrive/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 10.0/Common7/Packages/Debugger/X64/msvcr100.dll ./drops/
  11. 确保Windows之前的cygwin的“ find.exe”在PATH中。 最简单的方法是将其复制到“ openjdk7 / bin”,然后在当前PATH的开头进行设置。
  12. 创建一个类似于以下文件的批处理文件。 不要忘记适当地更新路径:
    ALT_BOOTDIR=C:/Stuff/java_libs/jdk1.6.0_25
    ANT_HOME=C:/Stuff/java_libs/apache-ant-1.8.2
    JAVA_HOME=
    CLASSPATH=
    PATH=C:/Stuff/openjdk7/bin;%PATH%
    ALLOW_DOWNLOADS=true
    ALT_MSVCRNN_DLL_PATH=C:/Stuff/java_libs/openjdk7/drops
    
    C:\WINDOWS\system32\cmd.exe /E:ON /V:ON /K 'C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd' /Release /xp /x86
  13. 运行批处理文件。 现在,您已经完全配置了环境,可以开始构建了。 运行“ bash”,然后在shell中执行“ make”:
    make ARCH_DATA_MODEL=32 ALT_OUTPUTDIR=C:/Users/Stas/Stuff/java_libs/openjdk7/output_32 ALT_FREETYPE_LIB_PATH=C:/Users/Stas/Stuff/java_libs/openjdk7/freetype-2.4.7/objs/win32/vc2010 ALT_FREETYPE_HEADERS_PATH=C:/Users/Stas/Stuff/java_libs/openjdk7/freetype-2.4.7/include ALT_BOOTDIR=C:/Users/Stas/Stuff/java_libs/jdk1.6.0_25 ALT_DROPS_DIR=c:/OpenJDK/ALT_DROPS_DIR ALT_DROPS_DIR=C:/Users/Stas/Stuff/java_libs/openjdk7/drops HOTSPOT_BUILD_JOBS=4 PARALLEL_COMPILE_JOBS=4 2>&1 | tee C:/Stuff/java_libs/openjdk7/output_32.log

    这将开始构建32位JDK。

  14. 喝咖啡,茶或您想要的任何东西,然后大约一个小时后,您应该会看到类似以下的内容:
    #-- Build times ----------
    Target all_product_build
    Start 2012-09-01 23:08:55
    End   2012-09-01 23:55:48
    00:02:35 corba
    00:06:46 hotspot
    00:00:30 jaxp
    00:00:51 jaxws
    00:35:30 jdk
    00:00:37 langtools
    00:46:53 TOTAL
    -------------------------

参考:来自Stas博客博客的JCG合作伙伴 Stanislav Kobylansky在Windows上构建OpenJDK


翻译自: https://www.javacodegeeks.com/2012/09/stass-blog-building-openjdk-on-windows.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值