jdk/makefiles/common/Defs-windows.gmk
changeset 13254 529a896a6b36
parent 13251 58f0a0823496
parent 13220 086271e35b0a
child 13255 2a310dd80800
equal deleted inserted replaced
13251:58f0a0823496 13254:529a896a6b36
     1 #
       
     2 # Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
       
     3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4 #
       
     5 # This code is free software; you can redistribute it and/or modify it
       
     6 # under the terms of the GNU General Public License version 2 only, as
       
     7 # published by the Free Software Foundation.  Oracle designates this
       
     8 # particular file as subject to the "Classpath" exception as provided
       
     9 # by Oracle in the LICENSE file that accompanied this code.
       
    10 #
       
    11 # This code is distributed in the hope that it will be useful, but WITHOUT
       
    12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14 # version 2 for more details (a copy is included in the LICENSE file that
       
    15 # accompanied this code).
       
    16 #
       
    17 # You should have received a copy of the GNU General Public License version
       
    18 # 2 along with this work; if not, write to the Free Software Foundation,
       
    19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20 #
       
    21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22 # or visit www.oracle.com if you need additional information or have any
       
    23 # questions.
       
    24 #
       
    25 
       
    26 #
       
    27 # Makefile to specify compiler flags for programs and libraries
       
    28 # targeted to Windows builds.  Should not contain any rules.
       
    29 #
       
    30 # WARNING: This file is shared with other workspaces. 
       
    31 #          So when it includes other files, it must use JDK_TOPDIR.
       
    32 #
       
    33 
       
    34 # Get shared JDK settings
       
    35 include $(JDK_MAKE_SHARED_DIR)/Defs.gmk
       
    36 
       
    37 # CC compiler object code output directive flag value
       
    38 CC_OBJECT_OUTPUT_FLAG = -Fo
       
    39 
       
    40 # The suffix applied to the library name for FDLIBM
       
    41 FDDLIBM_SUFFIX = lib
       
    42 # The suffix applied to scripts (.bat for windows, nothing for unix)
       
    43 SCRIPT_SUFFIX = .bat
       
    44 
       
    45 # LIB_LOCATION, which for windows identifies where .exe files go, may be
       
    46 # set by each GNUmakefile. The default is BINDIR.
       
    47 ifndef LIB_LOCATION
       
    48   LIB_LOCATION = $(BINDIR)
       
    49 endif # LIB_LOCATION
       
    50 
       
    51 ifndef PLATFORM_SRC
       
    52   PLATFORM_SRC  = $(BUILDDIR)/../src/windows
       
    53 endif # PLATFORM_SRC
       
    54 
       
    55 # Platform specific closed sources
       
    56 ifndef OPENJDK
       
    57   ifndef CLOSED_PLATFORM_SRC
       
    58     CLOSED_PLATFORM_SRC  = $(BUILDDIR)/../src/closed/windows
       
    59   endif
       
    60 endif
       
    61 
       
    62 # for backwards compatability, the old "win32" is used here instead of 
       
    63 # the more proper "windows"
       
    64 PLATFORM_INCLUDE_NAME = win32
       
    65 PLATFORM_INCLUDE      = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME)
       
    66 
       
    67 # The following DLL's are considered MS runtime libraries and should
       
    68 #     not to be REBASEd, see deploy/make/common/Release.gmk.
       
    69 #     msvcr*.dll: Microsoft runtimes
       
    70 ifeq ($(COMPILER_VERSION), VS2010)
       
    71   MSVCRNN_DLL = msvcr100.dll
       
    72   MSVCPNN_DLL = msvcp100.dll
       
    73 endif
       
    74 
       
    75 EXTRA_LFLAGS += /LIBPATH:$(DXSDK_LIB_PATH)
       
    76 
       
    77 # C Compiler flag definitions
       
    78 
       
    79 #
       
    80 # Default optimization
       
    81 #
       
    82 
       
    83 ifndef OPTIMIZATION_LEVEL
       
    84   ifeq ($(PRODUCT), java)
       
    85     OPTIMIZATION_LEVEL = HIGHER
       
    86   else
       
    87     OPTIMIZATION_LEVEL = LOWER
       
    88   endif
       
    89 endif
       
    90 ifndef FASTDEBUG_OPTIMIZATION_LEVEL
       
    91   FASTDEBUG_OPTIMIZATION_LEVEL = LOWER
       
    92 endif
       
    93 
       
    94 ifeq ($(CC_VERSION),msvc)
       
    95   # Visual Studio compiler option definitions:
       
    96   #   -O1      Favors reduced size over speed (-Og     -Os -Oy -Ob2 -Gs -GF -Gy)
       
    97   #   -O2      Favors speed over reduced size (-Og -Oi -Ot -Oy -Ob2 -Gs -GF -Gy)
       
    98   #   -Ob2     More aggressive inlining
       
    99   #   -Og      Global optimizations
       
   100   #   -Oi      Replace some functions with intrinsic or special forms
       
   101   #   -fp:precise (should be the default)
       
   102   #            Improve floating point calculations (disables some optimizations)
       
   103   #   -Os      Favor small code
       
   104   #   -Ot      Favor faster code
       
   105   #   -Oy      Frame pointer omission
       
   106   #   -G6      Used to be -GB?
       
   107   #   -GF      Pool strings in read-only memory
       
   108   #   -Gf      Pool strings in read-write memory (the default)
       
   109   #   -Gs      Controls stack probess
       
   110   #   -GS      Adds buffer overflow checks on stacks (the default)
       
   111   #   -EHsc    Enables exception handling 
       
   112   #   -Gy      Function level linking only
       
   113   #
       
   114 
       
   115   CC_OPT/NONE    = -Od
       
   116   CC_OPT/LOWER   = -O2
       
   117   CC_OPT/HIGHER  = -O3
       
   118   CC_OPT/HIGHEST = -O3
       
   119   
       
   120   ifeq ($(COMPILER_VERSION), VS2010)
       
   121     # Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
       
   122     AUTOMATIC_PCH_OPTION =
       
   123     GX_OPTION = -EHsc
       
   124     GZ_OPTION = -RTC1
       
   125     ifeq ($(ARCH_DATA_MODEL), 32)
       
   126       CC_OPT/HIGHEST = -O2
       
   127       CC_OPT/HIGHER  = -O1
       
   128       CC_OPT/LOWER   = -O1
       
   129     else
       
   130       CC_OPT/HIGHEST = -O2
       
   131       CC_OPT/HIGHER  = -O1
       
   132       CC_OPT/LOWER   = -O1
       
   133     endif
       
   134   endif
       
   135 
       
   136 else # CC_VERSION
       
   137   # GCC not supported, but left for historical reference...
       
   138   CC_OPT/NONE     =
       
   139   CC_OPT/LOWER    = -O2
       
   140   CC_OPT/HIGHER   = -O2
       
   141   CC_OPT/HIGHEST  = -O3
       
   142 
       
   143 endif
       
   144 
       
   145 CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL))
       
   146 
       
   147 # Select the runtime support library carefully, need to be consistent
       
   148 #
       
   149 # Visual Studio Runtime compiler option definitions:
       
   150 #   -MD        Use dynamic multi-threaded runtime library
       
   151 #   -MDd       Use debug version (don't use, doesn't mix with -MD DLL's)
       
   152 #   -MT        Use static multi-threaded runtime library (-ML is going away)
       
   153 #   -MTd       Use static debug version (better than -MDd, no runtime issues)
       
   154 #   -D_DEBUG   Change use of malloc/free/etc to use special debug ones (-MTd)
       
   155 #
       
   156 #      NOTE: We also will use /D _STATIC_CPPLIB  so we don't need msvcpnn.dll
       
   157 #
       
   158 # If MS_RUNTIME_STATIC is requested we may have a problem, it is no longer
       
   159 #     supported by VS2010
       
   160 ifneq ($(MS_RUNTIME_STATIC),true)
       
   161   MS_RUNTIME_OPTION=-MD
       
   162 endif
       
   163 # The _DEBUG macro option (changes things like malloc to use debug version)
       
   164 MS_RUNTIME_DEBUG_OPTION=
       
   165 MS_RC_DEBUG_OPTION=
       
   166 # Externally set environment variable can force any build to use the debug vers
       
   167 ifeq ($(MFC_DEBUG), true)
       
   168   ifeq ($(MS_RUNTIME_STATIC),true)
       
   169     MS_RUNTIME_OPTION=-MTd
       
   170   else
       
   171     # This MS debugging flag forces a dependence on the debug
       
   172     #     version of the runtime library (MSVCR*D.DLL), as does -MDd.
       
   173     #     We cannot re-distribute this debug runtime.
       
   174     MS_RUNTIME_OPTION=-MDd
       
   175   endif
       
   176   MS_RUNTIME_DEBUG_OPTION= -D_DEBUG
       
   177   MS_RC_DEBUG_OPTION= -d _DEBUG
       
   178 endif
       
   179 
       
   180 # Always add _STATIC_CPPLIB definition
       
   181 STATIC_CPPLIB_OPTION = /D _STATIC_CPPLIB
       
   182 
       
   183 # Silence the warning about using _STATIC_CPPLIB
       
   184 ifneq ($(SHOW_ALL_WARNINGS),true)
       
   185   # Needed with VS2010 to turn off the deprecated warning.
       
   186   STATIC_CPPLIB_OPTION += /D _DISABLE_DEPRECATE_STATIC_CPPLIB
       
   187 endif
       
   188 
       
   189 MS_RUNTIME_OPTION += $(STATIC_CPPLIB_OPTION)
       
   190 
       
   191 ifeq ($(CC_VERSION),msvc)
       
   192   # Visual Studio compiler option definitions:
       
   193   #   -Zi      Cause *.pdb file to be created, full debug information
       
   194   #   -Z7      Full debug inside the .obj, no .pdb
       
   195   #   -Zd      Basic debug, no local variables? In the .obj
       
   196   #   -Zl      Don't add runtime library name to obj file?
       
   197   #   -Od      Turns off optimization and speeds compilation
       
   198   #   -YX -Fp/.../foobar.pch   Use precompiled headers (try someday?)
       
   199   #   -nologo  Don't print out startup message
       
   200   #   /D _STATIC_CPPLIB
       
   201   #            Use static link for the C++ runtime (so msvcpnn.dll not needed)
       
   202   #   
       
   203   CFLAGS_COMMON  += -Zi -nologo
       
   204   CFLAGS_OPT      = $(CC_OPT)
       
   205   CFLAGS_DBG      = -Od $(MS_RUNTIME_DEBUG_OPTION)
       
   206 
       
   207   CFLAGS_VS2010 += -Zc:wchar_t-
       
   208 
       
   209   # All builds get the same runtime setting
       
   210   CFLAGS_COMMON += $(MS_RUNTIME_OPTION) $(CFLAGS_$(COMPILER_VERSION))
       
   211 
       
   212   LDEBUG = /debug
       
   213   
       
   214   ifeq ($(VTUNE_SUPPORT), true)
       
   215     OTHER_CFLAGS = -Z7 -Ox 
       
   216     LDEBUG += /pdb:NONE
       
   217   endif
       
   218   
       
   219   # VS2010, always need safe exception handlers, not needed on 64bit
       
   220   ifeq ($(ARCH_DATA_MODEL), 32)
       
   221     LFLAGS_VS2010 +=  -SAFESEH
       
   222   endif
       
   223 
       
   224   # LFLAGS are the flags given to $(LINK) and used to build the actual DLL file
       
   225   BASELFLAGS = -nologo /opt:REF /incremental:no
       
   226 
       
   227   LFLAGS = $(BASELFLAGS) $(LDEBUG) $(EXTRA_LFLAGS) $(LFLAGS_$(COMPILER_VERSION))
       
   228   LDDFLAGS += $(LFLAGS_$(COMPILER_VERSION))
       
   229   
       
   230 endif
       
   231 
       
   232 #
       
   233 # Preprocessor macro definitions
       
   234 #
       
   235 CPPFLAGS_COMMON = -DWIN32 -DIAL -D_LITTLE_ENDIAN
       
   236 ifeq ($(ARCH), amd64)
       
   237   CPPFLAGS_COMMON += -D_AMD64_ -Damd64
       
   238 else
       
   239   CPPFLAGS_COMMON += -D_X86_ -Dx86 
       
   240 endif
       
   241 CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN
       
   242 
       
   243 #
       
   244 # Output options (use specific filenames to avoid parallel compile errors)
       
   245 #
       
   246 CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map
       
   247 
       
   248 #
       
   249 # Use -wdNNNN to disable warning NNNN.
       
   250 #   C4800 is a warning about bool performance casts (can't make go away)
       
   251 #
       
   252 COMPILER_WARNINGS_TO_IGNORE = 4800
       
   253 CFLAGS_COMMON += $(COMPILER_WARNINGS_TO_IGNORE:%=-wd%)
       
   254 
       
   255 #
       
   256 # Treat compiler warnings as errors, if requested
       
   257 #
       
   258 CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL)
       
   259 ifeq ($(COMPILER_WARNINGS_FATAL),true)
       
   260   CFLAGS_COMMON += -WX
       
   261 endif
       
   262 
       
   263 # Turn off some warnings by default, enable them all if asked.
       
   264 ifneq ($(SHOW_ALL_WARNINGS),true)
       
   265   # The -D _CRT_SECURE_NO_DEPRECATE turns off security/deprecated warnings on
       
   266   #    the standard C library functions like strcpy.
       
   267   CFLAGS_COMMON += -D _CRT_SECURE_NO_DEPRECATE
       
   268   # The -D _CRT_NONSTDC_NO_DEPRECATE turns off deprecation warnings about using
       
   269   #    non-standard C POSIX functions.
       
   270   CFLAGS_COMMON += -D _CRT_NONSTDC_NO_DEPRECATE
       
   271 endif
       
   272 
       
   273 CPPFLAGS_OPT    = -DNDEBUG
       
   274 CPPFLAGS_DBG    = -DDEBUG -DLOGGING
       
   275 
       
   276 CXXFLAGS_COMMON = $(CFLAGS_COMMON)
       
   277 CXXFLAGS_OPT    = $(CFLAGS_OPT)
       
   278 CXXFLAGS_DBG    = $(CFLAGS_DBG)
       
   279 
       
   280 ifneq ($(LIBRARY),fdlibm)
       
   281   EXTRA_LIBS += advapi32.lib
       
   282 endif
       
   283 
       
   284 #
       
   285 # Path and option to link against the VM, if you have to. 
       
   286 #
       
   287 JVMLIB = $(LIBDIR)/jvm.lib
       
   288 JAVALIB = $(LIBDIR)/java.lib
       
   289 
       
   290 ifeq ($(CC_VERSION), msvc)
       
   291   CC_DEPEND        = -FD
       
   292   CC_DEPEND_FILTER = 
       
   293 else # CC_VERSION
       
   294 # not supported, but left for historical reference...
       
   295   CC_DEPEND        = -MM
       
   296   CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)&!g'
       
   297 endif # CC_VERSION
       
   298 
       
   299 LIBRARY_SUFFIX = dll
       
   300 LIB_SUFFIX     = lib
       
   301 
       
   302 # Settings for the JDI - Serviceability Agent binding.
       
   303 HOTSPOT_SALIB_PATH   = $(HOTSPOT_IMPORT_PATH)/jre/bin
       
   304 SALIB_NAME = $(LIB_PREFIX)sawindbg.$(LIBRARY_SUFFIX)
       
   305 SAMAP_NAME = $(LIB_PREFIX)sawindbg.map
       
   306 SAPDB_NAME = $(LIB_PREFIX)sawindbg.pdb
       
   307 
       
   308 ifeq ($(ARCH), ia64)
       
   309   # SA will never be supported here.
       
   310   INCLUDE_SA = false
       
   311 else
       
   312   INCLUDE_SA = true
       
   313 endif
       
   314 
       
   315 # Settings for the VERSIONINFO tap on windows. 
       
   316 VERSIONINFO_RESOURCE = $(BUILDDIR)/../src/windows/resource/version.rc
       
   317 
       
   318 ifneq ($(JDK_BUILD_NUMBER),)
       
   319  COOKED_BUILD_NUMBER = $(shell $(ECHO) $(JDK_BUILD_NUMBER) | $(SED) -e 's/^b//' -e 's/^0//')
       
   320 else
       
   321  COOKED_BUILD_NUMBER = 0
       
   322 endif
       
   323 
       
   324 # If the update version contains non-numeric characters, we need
       
   325 # to massage it into a numeric format. 
       
   326 # We use the following formula:
       
   327 # JDK_UPDATE_VER = JDK_UPDATE_VERSION * 10 + EXCEPTION_VERSION
       
   328 #
       
   329 # Here are some examples:
       
   330 #     1.5.0    b01  ->  5,0,0,1
       
   331 #     1.5.0_10 b01  ->  5,0,100,1
       
   332 #     1.4.2 b01     ->  4,2,0,1
       
   333 #     1.4.2_02 b01  ->  4,2,20,1
       
   334 #     1.4.2_02a b01 ->  4,2,21,1
       
   335 #     1.4.2_02b b01 ->  4,2,22,1
       
   336 ifdef JDK_UPDATE_VERSION
       
   337   VTMP := $(shell $(ECHO) $(JDK_UPDATE_VERSION) | $(TR) "abcde" "12345")
       
   338   CAB_CHAR1 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 1, 1);}')
       
   339   CAB_CHAR2 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 2, 1);}')
       
   340   CAB_CHAR3 := $(shell $(ECHO) $(VTMP) | $(NAWK) '{print substr($$1, 3, 1);}')
       
   341   JDK_UPDATE_META_TAG := U$(MARKETING_NUMBER)
       
   342   ifeq ($(CAB_CHAR3),)
       
   343     CAB_CHAR3 := 0
       
   344   endif
       
   345   ifeq ($(CAB_CHAR1), 0)
       
   346     JDK_UPDATE_VER := $(CAB_CHAR2)$(CAB_CHAR3)
       
   347   else
       
   348     JDK_UPDATE_VER := $(CAB_CHAR1)$(CAB_CHAR2)$(CAB_CHAR3)
       
   349   endif
       
   350 else
       
   351   JDK_UPDATE_VER := 0
       
   352 endif
       
   353 
       
   354 #RC_FLAGS = /l 0x409 /r
       
   355 
       
   356 #ifeq ($(VARIANT), OPT)
       
   357 #  RC_FLAGS += -d NDEBUG 
       
   358 #else
       
   359 #  RC_FLAGS += $(MS_RC_DEBUG_OPTION)
       
   360 #endif 
       
   361 
       
   362 # Values for the RC variables defined in RC_FLAGS
       
   363 #JDK_RC_BUILD_ID = $(FULL_VERSION)
       
   364 #JDK_RC_COMPANY = $(COMPANY_NAME)
       
   365 #JDK_RC_COMPONENT = $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) binary
       
   366 #JDK_RC_VER = \
       
   367 #    $(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER)
       
   368 #JDK_RC_COPYRIGHT = Copyright \xA9 $(COPYRIGHT_YEAR)
       
   369 #JDK_RC_NAME = \
       
   370 #    $(PRODUCT_NAME) $(JDK_RC_PLATFORM_NAME) $(JDK_MINOR_VERSION) $(JDK_UPDATE_META_TAG)
       
   371 #JDK_RC_FVER = \
       
   372 #    $(JDK_MINOR_VERSION),$(JDK_MICRO_VERSION),$(JDK_UPDATE_VER),$(COOKED_BUILD_NUMBER)
       
   373 
       
   374 # JDK name required here
       
   375 #RC_FLAGS += -d "JDK_BUILD_ID=$(JDK_RC_BUILD_ID)" \
       
   376 #            -d "JDK_COMPANY=$(JDK_RC_COMPANY)" \
       
   377 #            -d "JDK_COMPONENT=$(JDK_RC_COMPONENT)" \
       
   378 #            -d "JDK_VER=$(JDK_RC_VER)" \
       
   379 #            -d "JDK_COPYRIGHT=$(JDK_RC_COPYRIGHT)" \
       
   380 #            -d "JDK_NAME=$(JDK_RC_NAME)" \
       
   381 #            -d "JDK_FVER=$(JDK_RC_FVER)"
       
   382 
       
   383 # Enable 7-Zip LZMA file (de)compression for Java Kernel if it is available
       
   384 ifeq ($(ARCH_DATA_MODEL), 32)
       
   385   ifneq ($(KERNEL), off)
       
   386     # This is a hack to use until  7-Zip (and UPX) bundles can be put
       
   387     # under /java/devtools.
       
   388     ifndef DEPLOY_TOPDIR
       
   389       DEPLOY_TOPDIR=$(JDK_TOPDIR)/../deploy
       
   390     endif
       
   391     # Uncomment this block to cause build failure if above assumption false
       
   392     #DCHK = $(shell if [ ! -d $(DEPLOY_TOPDIR) ] ; then \
       
   393     #  $(ECHO) deploy_not_a_peer_of_j2se ; \
       
   394     #fi )
       
   395     #ifeq ($(DCHK), deploy_not_a_peer_of_j2se)
       
   396     #  If a build failure points to control coming here it means
       
   397     #  it means deploy is not in the same directory
       
   398     #  as j2se. Java Kernel can't tolerate that for the time being.
       
   399     #endif
       
   400     EC_TMP = $(shell if [ -d $(DEPLOY_TOPDIR)/make/lzma ] ; then \
       
   401       $(ECHO) true ; \
       
   402     else \
       
   403       $(ECHO) false ; \
       
   404     fi )
       
   405     ifeq ($(EC_TMP), true)
       
   406       EXTRA_COMP_INSTALL_PATH = lib\\\\deploy\\\\lzma.dll
       
   407       # Crazy but true: deploy/make/plugin/jinstall/Makefile.jkernel does
       
   408       # not include deploy/make/common/Defs-windows.gmk, either directly
       
   409       # or indirectly. But it does include this file, so redundantly declare
       
   410       # these variables that are in deploy/make/common/Defs-windows.gmk for
       
   411       # the sake of the Java Kernel part of the deploy build. Whew!
       
   412       EXTRA_COMP_LIB_NAME = lzma.dll
       
   413       EXTRA_COMP_PATH = $(OUTPUTDIR)/tmp/deploy/lzma/win32/obj
       
   414       EXTRA_COMP_CMD_PATH = $(EXTRA_COMP_PATH)/lzma.exe
       
   415       EXTRA_COMP_LIB_PATH = $(EXTRA_COMP_PATH)/$(EXTRA_COMP_LIB_NAME)
       
   416     endif
       
   417   endif
       
   418 endif