Merge pull request #2216 from jwillemsen/jwi-cxxversionchecks
[ACE_TAO.git] / ACE / include / makeinclude / platform_win32_msvc.GNU
blobafae982419ec3592caacf84b05a98ae68da31c80
1 # -*- Makefile -*-
3 # TODO:
4 # - per-source-file flag_overrides (gnu.mpd)
6 # Include this file from platform_macros.GNU to build with sh and GNU make
7 # and the Visual C++ compiler and linker.
8 # Tested with the MSYS shell and make from msysCORE-1.0.11-20080826.tar.gz and
9 # the Visual C++ 9 toolchain (Visual C++ 2008 Express Edition) - SP1.
11 # Assuming the msysCORE archive is extracted to c:\msys...
12 # Start the Visual C++ Command Prompt
13 # Set ACE_ROOT (TAO_ROOT, DDS_ROOT)
14 # Add C:\msys\bin to PATH along with %ACE_ROOT%\lib and %ACE_ROOT%\bin
15 # If necessary, generate GNUmakefiles with MPC (set MPC_ROOT, use -type gnuace)
16 # Run "make"
18 # - library naming
19 #   - dynamic: ACE.dll, ACE.lib is the "import library"
20 #   - static:  ACE.lib
21 #   - no "s" suffix added for static, so static and dynamic can't coexist
22 #   - no other modifiers are added to the name (no ACEd.dll, ACEmfc.dll)
23 # - user-customizable make variables
24 #   - everything in the "Defaults" section (plus inline)
25 #   - SUBSYSTEM: defaults to CONSOLE for exes, WINDOWS for libs
26 #   - CRT_TYPE: defaults to D (dynamic) for shared libs, T (static) for static
28 # Defaults
29 debug       ?= 1
30 optimize    ?= 0
31 #inline determined below, defaults to !debug
32 CPU         ?= X86
33 winnt       ?= 1
34 winregistry ?= 1
35 wfmo        ?= 1
36 qos         ?= 1
38 # Programs
39 CC  = cl
40 CXX = $(CC)
41 RC  = rc
42 LD  = link
43 DLD = $(LD)
44 AR  = $(LD)
46 # File naming
47 EXEEXT = .exe
48 SOEXT  = dll
49 OBJEXT = obj
50 LIBEXT = lib
51 LIB_PREFIX =
52 versioned_so = 0
54 # Need forward slashes for paths going through sh.exe
55 ACE_ROOT := $(subst \,/,$(ACE_ROOT))
57 # Options
58 PIC =
59 CC_OUTPUT_FLAG = -Fo
60 CC_OUTPUT_FLAG_SEP =
61 CPPFLAGS += -DWIN32 -D_WINDOWS -D_CRT_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
62 CFLAGS += -Zc:wchar_t -nologo -W3 -EHsc -GR -wd4355 -Fd$(INTDIR)
63 ARFLAGS = -lib -nologo -machine:$(CPU)
64 MSVC_LDFLAGS = -incremental:no -nologo -subsystem:$(SUBSYSTEM) -machine:$(CPU)
65 ifeq (,$(BIN_UNCHECKED))
66   SUBSYSTEM ?= WINDOWS
67 else
68   SUBSYSTEM ?= CONSOLE
69   REALCLEAN_FILES += $(BIN).manifest $(BIN_UNCHECKED).pdb
70 endif
71 ifeq (1,$(optimize))
72   CFLAGS += -O2
73 else
74   CFLAGS += -Ob0
75 endif
76 ifeq (1,$(static_libs_only))
77   static_libs = 1
78 endif
79 ifeq (1,$(static_libs))
80   shared_libs = 0
81   shared_libs_only = 0
82   CRT_TYPE ?= T
83   INTDIR = $(VDIR)
84 else
85   static_libs = 0
86   static_libs_only = 0
87   CRT_TYPE ?= D
88   ifneq (,$(BIN_UNCHECKED))
89     INTDIR = $(VDIR)
90   else
91     INTDIR = $(VSHDIR)
92   endif
93   MSVC_IMPLIB = $(LIB_NAME).lib
94   MSVC_DLLFLAGS += -dll -implib:$(MSVC_IMPLIB)
95   REALCLEAN_FILES += $(LIB_NAME).dll $(INSLIB)/$(LIB_NAME).dll $(LIB_NAME).exp
96   REALCLEAN_FILES += $(LIB_NAME).dll.manifest
97 endif
98 ifneq (,$(LIB_NAME))
99   REALCLEAN_FILES += $(LIB_NAME).lib $(INSLIB)/$(LIB_NAME).lib $(LIB_NAME).pdb
100 endif
101 ifeq (1,$(debug))
102   CPPFLAGS += -D_DEBUG
103   CFLAGS += -Zi -M$(CRT_TYPE)d -Gy -Gm
104   inline ?= 0
105   MSVC_LDFLAGS += -DEBUG
106   MSVC_DLLFLAGS += -pdb:$(subst dll,pdb,$@)
107   MSVC_EXEFLAGS += -pdb:$(subst exe,pdb,$@)
108 else
109   CPPFLAGS += -DNDEBUG
110   CFLAGS += -M$(CRT_TYPE)
111   inline ?= 1
112 endif
113 CCFLAGS = $(CFLAGS)
114 CXXFLAGS = $(CFLAGS)
115 RC_INCLUDE_FLAG = -I
116 RC_OUTPUT_FLAG = -fo
117 SYSTEMLIBS += advapi32.lib user32.lib iphlpapi.lib
118 MSVC_LINK = $(LD) $(SYSTEMLIBS) $(MSVC_LDFLAGS) $(patsubst %\,%,$(patsubst -L%,-libpath:%, $(subst /,\,$(LDFLAGS)))) $(patsubst -l%,%.lib,$(ACE_SHLIBS)) $(LIBS) -out:$@
119 define SOLINK.cc.override
120 $(MSVC_LINK) $(MSVC_DLLFLAGS) $^
121         mt -nologo -manifest $@.manifest -outputresource:$@\;2
122         @if test . != $(INSLIB) -a $(call PWD) != $(INSLIB) -a -r $(MSVC_IMPLIB) ; then \
123                 cp $(MSVC_IMPLIB) $(INSLIB) ; \
124         fi
125 endef
126 define LINK.cc.override
127 $(MSVC_LINK) $(MSVC_EXEFLAGS) $(filter-out %.lib,$(filter-out %.a,$^)) $(patsubst -l%,%.lib,$(VLDLIBS)) $(POSTLINK)
128         @if test -r $@.manifest ; then \
129                 mt -nologo -manifest $@.manifest -outputresource:$@\;1 ; \
130         fi
131 endef
132 AR.cc.override = $(AR) $(ARFLAGS) -out:$@ $^ $(AREXTRA)
134 #this is not mingw32, but the makefiles in ACE should act like it is
135 mingw32 = 1