Windows10下VS2017搭架OPENJDK源码调试环境

参考文章:https://blog.csdn.net/wqlinloveruby/article/details/80409031

所需软件

  1. VS安装,自行安装
  2. cygwin 64
  3. freetype我下载的最新版
  4. openjdk8
  5. JDK1.8(由于编译JDK需要一个JDK进行类似引导的工作)

cygwin安装

下载地址:http://www.cygwin.com/setup-x86_64.exe,请下载64位版本
1.打开安装文件,点击下一步

打开安装文件
2.选择第一项,点击下一步
这里写图片描述
3.点击下一步到如下界面
这里写图片描述
添加国内镜像,我用的163的地址为:http://mirrors.163.com/cygwin/,点击下一步进行安装
4.下载依赖包
这里写图片描述
将左上角view下拉框变为如图所示
这里写图片描述
安装以下依赖包,根据category中的名称进行下载(这么下载可能下载的比较多,主要是package包依赖很难找)
这里写图片描述
配置cygwin到windos的环境变量中
这里写图片描述

编译Freetype

为照顾没有使用过vs的同学,介绍一下编译的具体过程,第一次打开vs2010的话,选择使用VC++,找到你解压freetype的路径 D:\MyWorkSpace\freetype-2.9.1\builds\windows\vc2010
这里写图片描述
打开后,右键项目,选择属性,如图
这里写图片描述
修改目录扩展名以及配置类型如图所示
这里写图片描述
然后点击右上角配置管理器,改为下图所示
这里写图片描述
然后在编译一次生成DLL
这里写图片描述
然后生成文件在D:\MyWorkSpace\freetype-2.9.1\objs
这里写图片描述
然后咱们在D:\MyWorkSpace\freetype-2.9.1目录下创建lib文件夹,并将编译好的freetype.dll和freetype.lib复制到该目录。
这里写图片描述
然后还需要设置一下freetype的环境变量,FREETYPE_CFLAGS=D:\MyWorkSpace\freetype-2.9.1\include FREETYPE_LIBS=D:\MyWorkSpace\freetype-2.9.1\lib,可以尝试直接设置在path中。如图:
这里写图片描述
这里写图片描述
这里写图片描述

编译openjdk

打开cygwin,切换到解压的openjdk_8的文件夹根目录,如:
这里写图片描述
这里写图片描述

 ./configure -with-freetype=/cygdrive/d/MyWorkSpace/freetype-2.9.1/ -enable-debug -with-target-bits=64 with_toolsdir="/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build"

报错如下:
1.

 Your cygwin is too old. You are running 2.10.0(0.325/5/3), but at least cygwin 1.7 is required. 

如果cygwin安装的是2.X的版本则在编译的过程中会报cygwin的版本太老,这是检测脚本的一个bug,该脚本在common/autoconf目录下使用文本编辑器打开generated-configure.sh搜索Your cygwin is too old,关注7220行原来是1.7这里我根据自己的cygwin版本改成不是1.7以下的判断。
这里写图片描述
最简单的修改方案就是把打直接写死当前cygwin的版本我的是2.10.0
2.

Cannot locate a valid Visual Studio or Windows SDK installation on disk

卸载机器上的Microsoft Visual C++ 2010 redistributable packages (both x86 as well as x64) 组件
然后从以下地址下载重新安装

x64:
http://www.microsoft.com/en-us/download/details.aspx?id=14632

x86:
http://www.microsoft.com/en-us/download/details.aspx?id=5555

然后安装Microsoft SDK 7.1下载地址
https://www.microsoft.com/en-us/download/details.aspx?id=8442

打开/common/autoconf/generated-configure.sh文件,搜索“Cannot locate a valid Visual Studio”进行定位,发现可以通过传入–with-tools-dir参数指定vcvars32.bat的路径,从而定位到头文件、库文件等的路径。针对VS2017,该批处理位于以下路径:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build

修改generated-configure.sh文件中如图位置
这里写图片描述

修改为如下所示:
# First-hand choice is to locate and run the vsvars bat file.
  if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
    VCVARSFILE="VC/Auxiliary/Build/vcvars32xp.bat"  
  else
    VCVARSFILE="VC/Auxiliary/Build/vcvars64.bat"    
  fi

  VS_ENV_CMD=""
  VS_ENV_ARGS=""
  if test "x$with_toolsdir" != x; then

  if test "x$VS_ENV_CMD" = x; then
    VS100BASE="$with_toolsdir/../../.."              
    METHOD="--with-tools-dir"

3 .报错信息如下

/usr/bin/sort: cannot read: localdevenvtmp.export1: No such file or directory
no
configure: Could not succesfully extract the envionment variables needed for the VS setup.

报错出处来源于以下代码

 if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then
      _vs10varsall=`cygpath -a -m -s "$VS_ENV_CMD"`
      _dosvs10varsall=`cygpath -a -w -s $_vs10varsall`
      _dosbash=`cygpath -a -w -s \`which bash\`.*`
    else
      _dosvs10varsall=`cmd //c echo $VS_ENV_CMD`
      _dosbash=`cmd //c echo \`which bash\``
    fi

    # generate the set of exported vars before/after the vs10 setup
    echo '-----------------$ECHO'
    $ECHO "@echo off"                                           >  localdevenvtmp.bat
    $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export0" >> localdevenvtmp.bat
    $ECHO "call $_dosvs10varsall $VS_ENV_ARGS"                  >> localdevenvtmp.bat
    $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export1" >> localdevenvtmp.bat

    # Now execute the newly created bat file.
    # The | cat is to stop SetEnv.Cmd to mess with system colors on msys
    cmd /c localdevenvtmp.bat | cat

    # apply the diff (less some non-vs10 vars named by "!")
    $SORT localdevenvtmp.export0 | $GREP -v "!" > localdevenvtmp.export0.sort
    $SORT localdevenvtmp.export1 | $GREP -v "!" > localdevenvtmp.export1.sort
    $COMM -1 -3 localdevenvtmp.export0.sort localdevenvtmp.export1.sort > localdevenv.sh

找到文件

$ cd /cygdrive/d/MyWorkSpace/openjdk/build/windows-x86_64-normal-server-fastdebug
$ vi localdevenvtmp.bat
@echo off
C:\cygwin64\bin\bash.exe -c "export -p" > localdevenvtmp.export0
call C:\progra~2\mib055~1\2017\commun~1\vc\auxili~1\build\vcvars64.bat
C:\cygwin64\bin\bash.exe -c "export -p > localdevenvtmp.export1" 

原因为call之后切换了环境变量创建的localdevenvtmp.export1不在指定位置

# generate the set of exported vars before/after the vs10 setup
    $ECHO "@echo off"                                           >  localdevenvtmp.bat
    $ECHO "$_dosbash -c \"export -p\" > D:/MyWorkSpace/openjdk/build/windows-x86_64-normal-server-fastdebug/localdevenvtmp.export0" >> localdevenvtmp.bat
    $ECHO "call $_dosvs10varsall $VS_ENV_ARGS"                  >> localdevenvtmp.bat
    $ECHO "$_dosbash -c \"export -p\" > D:/MyWorkSpace/openjdk/build/windows-x86_64-normal-server-fastdebug/localdevenvtmp.export1" >> localdevenvtmp.bat

4 继续报错

configure: error: Target CPU mismatch. We are building for x86_64 but CL is for ""; expected "x64".

错误段代码

    # First line typically looks something like:
    # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
    COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1 | $TR -d '\r'`
    COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \([1-9][0-9.]*\) .*/\1/p"`
    COMPILER_VENDOR="Microsoft CL.EXE"
    COMPILER_CPU_TEST=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* for \(.*\)$/\1/p"`
    if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
      if test "x$COMPILER_CPU_TEST" != "x80x86"; then
        as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"80x86\"." "$LINENO" 5
      fi
    elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
      if test "x$COMPILER_CPU_TEST" != "xx64"; then
        as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"x64\"." "$LINENO" 5
      fi
    fi

注释以下代码,一共有两处都要注释

if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
      if test "x$COMPILER_CPU_TEST" != "x80x86"; then
        as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"80x86\"." "$LINENO" 5
      fi
    elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
      if test "x$COMPILER_CPU_TEST" != "xx64"; then
        as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"x64\"." "$LINENO" 5
      fi
    fi

如下图代表此部分完成
这里写图片描述

编译阶段

make images

这里写图片描述
进入目录执行编译指令

./create.bat D:\MyWorkSpace\openjdk\build\windows-x86_64-normal-server-fastdebug\images\j2sdk-image

这是由于c++版本问题需要进行源码修改,先将HostSpot项目导入VS2017中,利用VS2017快速修改其源码,使其通过编译。然而执行create.bat时马上就报错了:
这里写图片描述
在window中将如下参数加入环境变量

cd /cygdrive/d/MyWorkSpace/openjdk/hotspot/make/windows
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64

猜你喜欢

转载自blog.csdn.net/ciqingloveless/article/details/81950308