make/common/Defs-windows.gmk

Sat, 01 Dec 2007 00:00:00 +0000

author
duke
date
Sat, 01 Dec 2007 00:00:00 +0000
changeset 1
55540e827aef
child 33
a067bf2329ef
permissions
-rw-r--r--

Initial load

     1 #
     2 # Copyright 1999-2007 Sun Microsystems, Inc.  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.  Sun designates this
     8 # particular file as subject to the "Classpath" exception as provided
     9 # by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
    22 # CA 95054 USA or visit www.sun.com if you need additional information or
    23 # have any questions.
    24 #
    26 #
    27 # Makefile to specify compiler flags for programs and libraries
    28 # targeted to Windows builds.  Should not contain any rules.
    29 #
    31 # Get shared JDK settings
    32 include $(BUILDDIR)/common/shared/Defs.gmk
    34 # CC compiler object code output directive flag value
    35 CC_OBJECT_OUTPUT_FLAG = -Fo
    36 CC_PROGRAM_OUTPUT_FLAG = -Fe
    38 # The suffix applied to the library name for FDLIBM
    39 FDDLIBM_SUFFIX = lib
    40 # The suffix applied to scripts (.bat for windows, nothing for unix)
    41 SCRIPT_SUFFIX = .bat
    43 HPIS = windows
    44 # LIB_LOCATION, which for windows identifies where .exe files go, may be
    45 # set by each GNUmakefile. The default is BINDIR.
    46 ifndef LIB_LOCATION
    47   LIB_LOCATION = $(BINDIR)
    48 endif # LIB_LOCATION
    50 ifndef PLATFORM_SRC
    51   PLATFORM_SRC  = $(TOPDIR)/src/windows
    52 endif # PLATFORM_SRC
    54 # for backwards compatability, the old "win32" is used here instead of 
    55 # the more proper "windows"
    56 PLATFORM_INCLUDE_NAME = win32
    57 PLATFORM_INCLUDE      = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME)
    59 # The following DLL's are considered MS runtime libraries and should
    60 #     not to be REBASEd, see deploy/make/common/Release.gmk.
    61 #     msvcrt.dll, msvcr71.dll: Microsoft runtimes
    62 MS_RUNTIME_LIBRARIES = msvcrt.dll
    63 ifeq ($(ARCH_DATA_MODEL), 32)
    64   ifeq ($(COMPILER_VERSION), VS2003)
    65     MS_RUNTIME_LIBRARIES += msvcr71.dll
    66   endif
    67 endif
    69 # C Compiler flag definitions
    71 #
    72 # Default optimization
    73 #
    74 ifeq ($(CC_VERSION),msvc)
    75   # Visual Studio .NET 2003 or VS2003 compiler option definitions:
    76   #   -O1      Favors reduced size over speed (-Og     -Os -Oy -Ob2 -Gs -GF -Gy)
    77   #   -O2      Favors speed over reduced size (-Og -Oi -Ot -Oy -Ob2 -Gs -GF -Gy)
    78   #   -Ox      Full optimization (use -O2)    (-Og -Oi -Ot -Oy -Ob2)
    79   #              (Removed in Visual Studio 2005 or VS2005)
    80   #   -Ob2     More aggressive inlining
    81   #   -Og      Global optimizations
    82   #   -Oi      Replace some functions with intrinsic or special forms
    83   #   -Op      Improve floating point calculations (disables some optimizations)
    84   #              (Replaced with -fp:precise in VS2005, /Op is default now)
    85   #   -Os      Favor small code
    86   #   -Ot      Favor faster code
    87   #   -Oy      Frame pointer omission
    88   #   -GB      Optimize for pentium (old VC6 option?)
    89   #   -G6      VS2003 version of -GB?
    90   #   -GF      Pool strings in read-only memory
    91   #   -Gf      Pool strings in read-write memory (the default)
    92   #   -Gs      Controls stack probess
    93   #   -GS      Adds buffer overflow checks on stacks
    94   #              (Default in VS2005)
    95   #   -GX      Enables exception handling 
    96   #              (Replaced with /EHsc in VS2005)
    97   #   -Gy      Function level linking only
    98   #
    99   # NOTE: With VC6, -Ox included -Gs.
   100   # NOTE: With VC6, -Ox, -O1, and -O2 used -Ob1, not -Ob2.
   101   # NOTE: With VC6, -O1 and -O2 used -Gf, not -GF.
   102   #
   103   ifeq ($(COMPILER_VERSION), VC6)
   104     # VC6 (6.2) msvc compiler (the way Tiger and early Mustang were built)
   105     # Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
   106     AUTOMATIC_PCH_OPTION =
   107     GX_OPTION = -GX
   108     ifeq ($(ARCH_DATA_MODEL), 32)
   109       CC_HIGHEST_OPT = -Ox -Gy -Os -GB
   110       CC_HIGHER_OPT  = -Ox -Gy -Os -GB
   111       CC_LOWER_OPT   = -Ox -Gy -Os -GB
   112     else
   113       CC_HIGHEST_OPT = -Ox -Gy -Op
   114       CC_HIGHER_OPT  = -Ox -Gy -Op
   115       CC_LOWER_OPT   = -Ox -Gy -Op
   116     endif
   117   endif
   118   ifeq ($(COMPILER_VERSION), VS2003)
   119     # Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
   120     AUTOMATIC_PCH_OPTION = -YX
   121     # Also known as VC7 compiler
   122     GX_OPTION = -GX
   123     ifeq ($(ARCH_DATA_MODEL), 32)
   124       # Lowered opt level to try and reduce footprint, dll size especially.
   125       #     Was: CC_HIGHEST_OPT = -O2 -G6
   126       #     Was: CC_HIGHER_OPT  = -O2
   127       CC_HIGHEST_OPT = -O2
   128       CC_HIGHER_OPT  = -O1
   129       CC_LOWER_OPT   = -O1
   130     else
   131       CC_HIGHEST_OPT = -O2 -Op
   132       CC_HIGHER_OPT  = -O2 -Op
   133       CC_LOWER_OPT   = -O1 -Op
   134     endif
   135   endif
   136   ifeq ($(COMPILER_VERSION), VS2005)
   137     # Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
   138     AUTOMATIC_PCH_OPTION =
   139     # VS2005 compiler, only with Platform SDK right now?
   140     GX_OPTION = -EHsc
   141     ifeq ($(ARCH_DATA_MODEL), 32)
   142       CC_HIGHEST_OPT = -O2
   143       CC_HIGHER_OPT  = -O1
   144       CC_LOWER_OPT   = -O1
   145     else
   146       CC_HIGHEST_OPT = -O2
   147       CC_HIGHER_OPT  = -O1
   148       CC_LOWER_OPT   = -O1
   149     endif
   150   endif
   151   CC_NO_OPT      = -Od
   152 else # CC_VERSION
   153   # GCC not supported, but left for historical reference...
   154   CC_HIGHEST_OPT = -O3
   155   CC_HIGHER_OPT  = -O2
   156   CC_LOWER_OPT   = -O2
   157   CC_NO_OPT      = 
   158 endif
   160 # If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off
   161 ifdef NO_OPTIMIZATIONS
   162   CC_HIGHEST_OPT = $(CC_NO_OPT)
   163   CC_HIGHER_OPT  = $(CC_NO_OPT)
   164   CC_LOWER_OPT   = $(CC_NO_OPT)
   165 endif
   167 ifeq ($(PRODUCT), java)
   168     _OPT = $(CC_HIGHER_OPT)
   169 else
   170     _OPT = $(CC_LOWER_OPT)
   171 endif
   173 # Select the runtime support library carefully, need to be consistent
   174 #
   175 # VS2003 compiler option definitions:
   176 #   -MD        Use dynamic multi-threaded runtime library
   177 #   -MDd       Use debug version (don't use, doesn't mix with -MD DLL's)
   178 #   -MT        Use static multi-threaded runtime library (-ML is going away)
   179 #   -MTd       Use static debug version (better than -MDd, no runtime issues)
   180 #   -D_DEBUG   Change use of malloc/free/etc to use special debug ones (-MTd)
   181 #
   182 #      NOTE: We also will use /D _STATIC_CPPLIB  so we don't need msvcp71.dll
   183 #
   184 ifeq ($(MS_RUNTIME_STATIC),true)
   185   MS_RUNTIME_OPTION=-MT
   186 else
   187   MS_RUNTIME_OPTION=-MD
   188 endif
   189 # The _DEBUG macro option (changes things like malloc to use debug version)
   190 MS_RUNTIME_DEBUG_OPTION=
   191 MS_RC_DEBUG_OPTION=
   192 # Externally set environment variable can force any build to use the debug vers
   193 ifeq ($(MFC_DEBUG), true)
   194   ifeq ($(MS_RUNTIME_STATIC),true)
   195     MS_RUNTIME_OPTION=-MTd
   196   else
   197     # This MS debugging flag forces a dependence on the debug
   198     #     version of the runtime library (MSVCRTD.DLL), as does -MDd.
   199     #     We cannot re-distribute this debug runtime.
   200     MS_RUNTIME_OPTION=-MDd
   201   endif
   202   MS_RUNTIME_DEBUG_OPTION= -D_DEBUG
   203   MS_RC_DEBUG_OPTION= -d _DEBUG
   204 endif
   206 # Always add _STATIC_CPPLIB definition
   207 STATIC_CPPLIB_OPTION = /D _STATIC_CPPLIB
   208 MS_RUNTIME_OPTION += $(STATIC_CPPLIB_OPTION)
   210 ifeq ($(CC_VERSION),msvc)
   211   # VS2003 compiler option definitions:
   212   #   -Zi      Cause *.pdb file to be created, full debug information
   213   #   -Z7      Full debug inside the .obj, no .pdb
   214   #   -Zd      Basic debug, no local variables? In the .obj
   215   #   -Zl      Don't add runtime library name to obj file?
   216   #   -Od      Turns off optimization and speeds compilation
   217   #   -YX -Fp/.../foobar.pch   Use precompiled headers (try someday?)
   218   #   -nologo  Don't print out startup message
   219   #   /D _STATIC_CPPLIB  
   220   #            Use static link for the C++ runtime (so msvcp71.dll not needed)
   221   #   
   222   CFLAGS_COMMON  += -Zi -nologo
   223   CFLAGS_OPT      = $(POPT)
   224   CFLAGS_DBG      = -Od $(MS_RUNTIME_DEBUG_OPTION)
   226   # Starting from VS2005 the wchar_t is handled as a built-in C/C++ data type
   227   # by default. However, we expect the wchar_t to be a typedef to the
   228   # unsigned short data type. The -Zc:wchar_t- option restores the old
   229   # behavior (as seen in VS2003) to avoid massive code modifications.
   230   # When/if our code will be "C/C++ Standard"-compliant (at least in the area
   231   # of handling the wchar_t type), the option won't be necessary.
   232   ifeq ($(ARCH_DATA_MODEL), 32)
   233     CFLAGS_VS2005 += -Zc:wchar_t-
   234   else
   235     # The 64bit Platform SDK we use (April 2005) doesn't like this option
   236     ifneq ($(CC_VER), 14.00.40310.41)
   237       CFLAGS_VS2005 += -Zc:wchar_t-
   238     endif
   239   endif
   241   # All builds get the same runtime setting
   242   CFLAGS_COMMON += $(MS_RUNTIME_OPTION) $(CFLAGS_$(COMPILER_VERSION))
   245   LDEBUG = /debug
   247   ifeq ($(VTUNE_SUPPORT), true)
   248     OTHER_CFLAGS = -Z7 -Ox 
   249     LDEBUG += /pdb:NONE
   250   endif
   252   # The new Platform SDK and VS2005 has /GS as a default and requires 
   253   #    bufferoverflowU.lib on the link command line, otherwise 
   254   #    we get missing __security_check_cookie externals at link time. 
   255   BUFFEROVERFLOWLIB = bufferoverflowU.lib
   256   # Always add bufferoverflowU.lib to VS2005 link commands (pack uses LDDFLAGS)
   257   LFLAGS_VS2005 = $(BUFFEROVERFLOWLIB)
   259   # LFLAGS are the flags given to $(LINK) and used to build the actual DLL file
   260   BASELFLAGS = -nologo /opt:REF /incremental:no
   261   LFLAGS = $(BASELFLAGS) $(LDEBUG) $(EXTRA_LFLAGS) $(LFLAGS_$(COMPILER_VERSION))
   262   LDDFLAGS += $(LFLAGS_$(COMPILER_VERSION))
   264 endif
   266 #
   267 # Preprocessor macro definitions
   268 #
   269 CPPFLAGS_COMMON = -DWIN32 -DIAL -D_LITTLE_ENDIAN
   270 ifeq ($(ARCH), amd64)
   271   CPPFLAGS_COMMON += -D_AMD64_ -Damd64
   272 else
   273   CPPFLAGS_COMMON += -DWIN32 -D_X86_ -Dx86 
   274 endif
   275 CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN
   277 #
   278 # Output options (use specific filenames to avoid parallel compile errors)
   279 #
   280 CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map
   282 #
   283 # Add warnings and extra on 64bit issues
   284 #
   285 ifeq ($(ARCH_DATA_MODEL), 64)
   286   CFLAGS_COMMON += -Wp64 
   287 endif
   288 CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL)
   290 #
   291 # Treat compiler warnings as errors, if requested
   292 #
   293 ifeq ($(COMPILER_WARNINGS_FATAL),true)
   294   CFLAGS_COMMON += -WX
   295 endif
   297 CPPFLAGS_OPT    = 
   298 CPPFLAGS_DBG    = -DDEBUG -DLOGGING
   300 CXXFLAGS_COMMON = $(CFLAGS_COMMON)
   301 CXXFLAGS_OPT    = $(CFLAGS_OPT)
   302 CXXFLAGS_DBG    = $(CFLAGS_DBG)
   304 ifneq ($(LIBRARY),fdlibm)
   305   EXTRA_LIBS += advapi32.lib
   306 endif
   308 #
   309 # Path and option to link against the VM, if you have to. 
   310 #
   311 JVMLIB	= $(BOOTDIR)/lib/jvm.lib
   312 JAVALIB =
   314 ifeq ($(CC_VERSION), msvc)
   315   CC_DEPEND        = -FD
   316   CC_DEPEND_FILTER = 
   317 else # CC_VERSION
   318 # not supported, but left for historical reference...
   319   CC_DEPEND        = -MM
   320   CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)&!g'
   321 endif # CC_VERSION
   323 LIBRARY_SUFFIX = dll
   324 LIB_SUFFIX     = lib
   326 # Settings for the VERSIONINFO tap on windows. 
   327 VERSIONINFO_RESOURCE = $(TOPDIR)/src/windows/resource/version.rc
   329 RC_FLAGS = /l 0x409 /r
   331 ifeq ($(VARIANT), OPT)
   332   RC_FLAGS += -d NDEBUG 
   333 else
   334   RC_FLAGS += $(MS_RC_DEBUG_OPTION)
   335 endif 
   337 ifndef COPYRIGHT_YEAR
   338     COPYRIGHT_YEAR = 2007 
   339 endif
   341 RC_FLAGS += -d "J2SE_BUILD_ID=$(FULL_VERSION)" \
   342             -d "J2SE_COMPANY=$(COMPANY_NAME)" \
   343             -d "J2SE_COMPONENT=$(PRODUCT_NAME) Platform SE binary" \
   344             -d "J2SE_VER=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(J2SE_UPDATE_VER).$(COOKED_BUILD_NUMBER)" \
   345             -d "J2SE_COPYRIGHT=Copyright \xA9 $(COPYRIGHT_YEAR)" \
   346             -d "J2SE_NAME=$(PRODUCT_NAME) Platform SE $(JDK_MINOR_VERSION) $(J2SE_UPDATE_META_TAG)" \
   347             -d "J2SE_FVER=$(JDK_VERSION)"

mercurial