Windows 7下構建OpenJDK7__windows

來源:互聯網
上載者:User

        介紹了本人在Windows 7下編譯OpenJDK的過程。

 

一、擷取JDK源碼

 

        在http://download.java.net/openjdk/jdk7/下載最新的OpenJDK7源碼openjdk-7-fcs-src-b147-27_jun_2011.zip,將其解壓到E:盤目錄下。

        由於該openjdk的jaxp和jaxws目錄下並不包含JAXP和JAX-WS的源碼(它們分別可以在JAXP和JAX-WS的首頁上下載),在

        http://download.java.net/jaxp/1.4.5

        下載jaxp-1_4_5-unittests.zip和jaxp145_01.zip,

        在http://download.java.net/glassfish/components/jax-ws/openjdk/jdk7

        下載jdk7-jaxws2_2_4-b03-2011_05_27.zip

        在https://java.net/downloads/jax-ws/JDK7/

        下載jdk7-jaf-2010_08_19.zip

        將這四個壓縮包放到openjdk\java\devtools\share\jdk7-drops目錄下,設定ALT_DROPS_DIR指向該目錄,構建jaxp和jaxws的ANT指令碼會嘗試從該目錄尋找這些zip。

        你還可以使用make ALLOW_DOWNLOADS=true來允許ANT下載需要的zip,不過這會產生太多不確定性,因此不推薦此做法。

 

二、配置環境

 

        安裝CYGWIN,需要手工選擇安裝以下工具:

 

檔案名稱

分類

描述

ar.exe

Devel

binutils

The GNU assembler, linker and binary utilities

make.exe

Devel

make

The GNU version of the 'make' utility built for CYGWIN

m4.exe

Interpreters

m4

GNU implementation of the traditional Unix macro processor

cpio.exe

Utils

cpio

A program to manage archives of files

gawk.exe

Base

awk

Pattern-directed scanning and processing language

file.exe

Utils

file

Determines file type using 'magic' numbers

zip.exe

Archive

zip

Package and compress (archive) files

unzip.exe

Archive

unzip

Extract compressed files in a ZIP archive

free.exe

System

procps

Display amount of free and used memory in the system

        從http://ftp.gnu.org/pub/gnu/make下載make-3.82.tar.gz,在CYGWIN中解壓,運行./configure && make安裝。由於該make版本不支援C:/ style形式的路徑,我從http://www.cmake.org/files/cygwin/make.exe下載了make.exe放到了CYGWIN的bin目錄下。

 

        安裝JDK6,設定ALT_BOOTDIR,ALT_JDK_IMPORT_PATH指向該bootstrap JDK。注意不要設定JAVA_HOME和CLASSPATH。

        安裝ANT1.8.1,在Path中添加bin目錄,設定ANT_HOME。

        安裝freetype-2.3.5-1-setup,設定ALT_FREETYPE_LIB_PATH 和ALT_FREETYPE_HEADERS_PATH,分別指向lib和include目錄。

        安裝DirectX 9.0 SDK (Summer 2004),SDK的位置可以設定為ALT_DXSDK_PATH,不過通常由DirectX環境變數DXSDK_DIR就可以找到。

 

        安裝編譯器VS2010,設定環境變數(在設定環境變數時,首先使用cygpath將路徑轉換為short路徑,如cygpath –s –m  D:\\Program\Files\\Microsoft\ SDKs\\Windows\\v7.0A,下面的設定直接按我當時的設定來,VS2010裝在了系統D:盤和F:盤):

        WINDOWSSDKDIR = D:/PROGRA~1/MICROS~4/Windows/v7.0A

        INCLUDE = %WINDOWSSDKDIR%/include;F:/PROGRA~1/MICROS~1.0/VC/include;

        LIB=% WINDOWSSDKDIR %/lib;F:/PROGRA~1/MICROS~1.0/VC/lib;

        ALT_COMPILER_PATH= F:/PROGRA~1/MICROS~1.0/VC/bin

        ALT_MSVCRNN_DLL_PATH 指向msvcr100.dll位置

        Path中添加

        F:/PROGRA~1/MICROS~1.0/VC/bin;%WINDOWSSDKDIR%/bin/NETFX4~1.0TO;%WINDOWSSDKDIR%/bin;F:/PROGRA~1/MICROS~1.0/Common7/IDE;D:/PROGRA~1/GnuWin32/bin;

        在CYGWIN中,

        echo $PATH

        需要將/cygdrive/d/PROGRA~1/MICROS~4/Windows/v7.0A/bin/NETFX4~1.0TO:/cygdrive/d/PROGRA~1/MICROS~4/Windows/v7.0A/bin:移到

/usr/local/bin:/usr/bin之前,以使用VS中的工具命令進行編譯。

 

        TMP TEMP VS100COMNTOOLS VS90COMNTOOLS需要已經設定。

 

三、檔案修改

 

        FreeType 2.3.5版,庫已經更名,不再叫freetype.dll,而是叫freetype6.dll,同時,多了一個依賴庫zlib1.dll。將bin中freetype6.dll和zlib1.dll拷到lib下。

修改相關的makefile檔案和java源檔案:

        /jdk/make/sun/font/Makefile:

        126

        FREETYPE_LIB =$(LIB_LOCATION)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX)

 

        FREETYPE_LIB =$(LIB_LOCATION)/$(LIB_PREFIX)freetype6.$(LIBRARY_SUFFIX)

        ZLIB1_LIB =$(LIB_LOCATION)/$(LIB_PREFIX)zlib1.$(LIBRARY_SUFFIX)

        137,138

        $(FREETYPE_LIB):

        $(CP)$(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX) $@

 

        $(FREETYPE_LIB): $(ZLIB1_LIB)

        $(CP)$(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype6.$(LIBRARY_SUFFIX) $@

        $(install-module-file)

        $(ZLIB1_LIB):

        $(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)zlib1.$(LIBRARY_SUFFIX)$@

 

        jdk/make/tools/freetypecheck/Makefile

        41

        FREETYPE_DLL =$(FREETYPE_LIB_PATH)/freetype.dll

 

        FREETYPE_DLL =$(FREETYPE_LIB_PATH)/freetype6.dll

        ZLIB1_DLL = $(FREETYPE_LIB_PATH)/zlib1.dll

 

        72

        $(CP) $(ZLIB1_DLL) $(@D)/

 

        jdk/src/share/classes/sun/font/FontManagerNativeLibrary.java

        59

        System.loadLibrary("freetype");

 

        System.loadLibrary("freetype6");

 

        OpenJDK的部分java檔案注釋是中文的。javac卻指定了ascii編碼方式(添加了參數-encoding ascii)。遇到包含中文的java檔案,javac會報錯。因此需要將-encoding編譯選項去掉。

        /corba/make/common/shared/Defs-java.gmk

       133

       JAVACFLAGS += -encoding ascii

 

       # JAVACFLAGS  += -encoding ascii

       194

       BOOT_JAVACFLAGS  += -encoding ascii -source$(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION)

 

       BOOT_JAVACFLAGS += -source $(BOOT_SOURCE_LANGUAGE_VERSION)-target $(BOOT_TARGET_CLASS_VERSION)

 

       /jdk/make/common/shared/Defs-java.gmk

       134

       JAVACFLAGS += -encoding ascii

 

       # JAVACFLAGS  += -encoding ascii

       212

       BOOT_JAVACFLAGS  += -encoding ascii -source$(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION)

 

       BOOT_JAVACFLAGS += -source$(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION)

 

       /hotspot/make/windows/makefiles/rules.make

       48

       JAVAC_FLAGS=-g -encoding ascii

 

       JAVAC_FLAGS=-g

 

       OpenJDK啟用了VC的“將警告視為錯誤”(warnings as errors)選項。如果連結器產生警告,/WX 將不會產生任何輸出檔案。

       /hotspot/make/windows/makefiles/compile.make

       53

       CPP_FLAGS=/nologo /W3 /WX

 

       CPP_FLAGS=/nologo /W3 /WX-

 

       /hotspot/src/share/tools/hsdis/Makefile

       92

       CFLAGS        += /nologo /MD /W3 /WX /O2 /Fo$(@:.dll=.obj) /Gi-

 

       CFLAGS        += /nologo /MD /W3 /WX- /O2 /Fo$(@:.dll=.obj) /Gi-

 

       OpenJDK分析VC版本是按英文版本來進行的,對於中文版VS2010需要修改。

 

       /hotspot/make/windows/get_msc_ver.sh

       61

       MSC_VER_RAW=`cl 2>&1 |"$HEAD" -n 1 | "$SED" 's/.*Version[\]*\([0-9][0-9.]*\).*/\1/'`

 

       if [ "${ALT_MSC_VER_RAW}" !="" ] ; then

              MSC_VER_RAW=${ALT_MSC_VER_RAW}

       else

              MSC_VER_RAW=`cl 2>&1 |"$HEAD" -n 1 | "$SED" 's/.*Version[\]*\([0-9][0-9.]*\).*/\1/'`

       fi

 

       /jdk/make/common/shared/Compiler-msvc.gmk

       49

       CC_VER := $(shell $(CC) 2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/'| $(NAWK) '{print $$2}')

 

       ifdef ALT_CC_VER

              CC_VER := $(ALT_CC_VER)

       else

              CC_VER := $(shell $(CC)2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/' | $(NAWK) '{print$$2}')

       endif

 

       設定ALT_CC_VER和ALT_MSC_VER_RAW變數

       ALT_CC_VER = 16.00.30319.01

       ALT_MSC_VER_RAW = 16.00.30319.01

 

四、編譯

 

       進入openjdk根目錄,執行“make sanity”檢查我們前面所做的設定是否正確,如果看到“Sanity check passed.”說明檢查過程通過,接下來輸入“make”執行整個Makefile,等待不到一個小時的時間,JDK就可以編譯成功了。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.