Move the sources to trunk
[opencv] / _make / make_module_ms.mak
1 #
2 # This is helper makefile that can build DLL or EXE for i386, amd64 or ia64 platform.
3 # User of the makefile should specify the following symbols:
4 #    * PLATFORM (I386/AMD64/IA64) - the target platform (I386 by default)
5 #    * DEBUG (1/0) - iff a debug version of the binary should be build (0 by default)
6 #    * TARGET - base name of the binary (ex.: cxcore, cv, ml, cvtest etc.)
7 #    * BINTYPE (DLL/CONSOLE/APP) - the type of application (dll/console app/app with gui), dll by default
8 #    * ROOT - the relative path to the root opencv directory
9 #    * OBJS - the list of object files, each file must be preceded with $(OBJPATH)\
10 #    * INCS - the list of include files
11 #    * CXX - the compiler to be used (cl by default)
12 #    * CXXFLAGS_PROJ - the initial compiler options
13 #           (some project-specific defines and the list of include directories)
14 #    * LIBS_PROJ - the initial linker options
15 #           (the list of linked libraries + path to the libraries)
16 #    * RES_FILE - resource file, if any
17 #    * PDBNAME - temporary pdb filename (e.g. vc60.pdb for MSVC6)
18 #
19
20 !ifndef MY_CXX
21 MY_CXX = cl
22 !endif
23
24 CXX = "$(MY_CXX)"
25
26 !ifndef MY_LINK
27 MY_LINK = link
28 !endif
29
30 LINK = "$(MY_LINK)"
31
32 !ifndef PDBNAME
33 PDBNAME = vc60.pdb
34 !endif
35
36 !ifndef SRCPATH
37 SRCPATH = .
38 !endif
39
40 # Analyze binary type
41
42 !ifndef BINTYPE
43 BINTYPE = DLL
44 !endif
45
46 !if "$(BINTYPE)"=="DLL"
47
48 !ifndef VER
49 VER = 100
50 !endif
51
52 EXT = .dll
53 CXXFLAGS_DLL = /D "CVAPI_EXPORTS"
54 LINKFLAGS_DLL = /subsystem:windows /dll /implib:$(OUTLIB)
55
56 !else
57
58 EXT = .exe
59 CXXFLAGS_DLL =
60
61 !if "$(BINTYPE)"=="CONSOLE"
62 LINKFLAGS_DLL = /subsystem:console
63 !else if "$(BINTYPE)"=="APP"
64 LINKFLAGS_DLL = /subsystem:windows
65 !endif
66
67 !endif
68
69 # Check debug/release
70
71 !ifndef DEBUG
72 DEBUG = 0
73 !endif
74
75 !if $(DEBUG)
76
77 CXXFLAGS_DBG = /D "_DEBUG" /MDd /Gm $(DBG_CHECK) /Od
78 TEMP_DBG_SUFFIX = _Dbg
79 DBG = d
80
81 !else
82
83 CXXFLAGS_DBG = /D "NDEBUG" /MD /O2 /Ob2
84 TEMP_DBG_SUFFIX = _Rls
85 DBG = 
86
87 !endif
88
89
90 # Analyze platform
91
92 !ifndef PLATFORM
93 PLATFORM = I386
94 !endif
95
96 !if "$(PLATFORM)" == "I386"
97
98 CXXFLAGS_P =
99 TEMP_P_SUFFIX =
100 OUT_P_SUFFIX =
101 DBG_CHECK = /GZ
102
103 !else if "$(PLATFORM)" == "AMD64"
104
105 CXXFLAGS_P = /D "WIN64" /D "EM64T"
106 TEMP_P_SUFFIX = .64
107 OUT_P_SUFFIX = _64
108 DBG_CHECK = 
109
110 !else if "$(PLATFORM)" == "IA64"
111
112 CXXFLAGS_P = /D "WIN64"
113 TEMP_P_SUFFIX = .i7
114 OUT_P_SUFFIX = _i7
115 DBG_CHECK = 
116
117 !else
118 !error Unknown platform
119 !endif
120
121 !ifndef PCH
122 PCH_TARGET =
123 PCH_OBJ =
124 CXXFLAGS_PCH =
125 !else
126 !ifndef PCH_STARTER
127 PCH_STARTER = precomp
128 !endif
129 PCH_TARGET = "$(OBJPATH)\$(TARGET).pch"
130 PCH_OBJ = $(OBJPATH)\$(PCH_STARTER).obj
131 CXXFLAGS_PCH = /Fp$(PCH_TARGET) /Yu"$(PCH)"
132 !endif
133
134 OBJPATH = $(ROOT)\_temp\$(TARGET)$(TEMP_DBG_SUFFIX)$(TEMP_P_SUFFIX)
135 OUTBIN = $(ROOT)\bin\$(TARGET)$(VER)$(DBG)$(OUT_P_SUFFIX)$(EXT)
136 OUTPDB = $(ROOT)\bin\$(TARGET)$(VER)$(DBG)$(OUT_P_SUFFIX).pdb
137 OUTLIB = $(ROOT)\lib\$(TARGET)$(DBG)$(OUT_P_SUFFIX).lib
138 TEMPPDB = $(OBJPATH)\$(PDBNAME)
139 DEF_LIBS = kernel32.lib user32.lib gdi32.lib advapi32.lib 
140
141 I=/I
142 LIBPATH=/libpath:
143
144 CXXFLAGS = /nologo /W4 /D "WIN32" /D"_WINDOWS" $(CXXFLAGS_P) $(CXXFLAGS_DBG) $(CXXFLAGS_DLL) /EHsc /Zi /FD $(CXXFLAGS_PCH) $(CXXFLAGS_PROJ) /Fd"$(TEMPPDB)" $(MY_CXXFLAGS) /c /Fo
145 LINKFLAGS = /nologo /machine:$(PLATFORM) /pdb:$(OUTPDB) /debug /out:$(OUTBIN) $(LINKFLAGS_DLL) $(DEF_LIBS) $(MY_LINKFLAGS)
146
147 $(OUTBIN): $(PCH_TARGET) $(OBJS)
148     @echo ********* Linking $(TARGET) ...
149     @-mkdir $(ROOT)\bin 2> nul
150     @-mkdir $(ROOT)\lib 2> nul
151     @$(LINK) $(LINKFLAGS) $(LIBS_PROJ) $(PCH_OBJ) $(OBJS)
152
153 !ifdef PCH
154
155 $(PCH_TARGET): $(PCH_STARTER).cpp
156     @-mkdir $(OBJPATH) 2> nul
157     @$(CXX) $(CXXFLAGS)$(PCH_OBJ) /Yc"$(PCH)" $(PCH_STARTER).cpp
158
159 !endif
160
161 {$(SRCPATH)}.cpp{$(OBJPATH)}.obj:
162     @-mkdir $(OBJPATH) 2> nul
163     @$(CXX) $(CXXFLAGS)"$@" $<
164
165 {$(SRCPATH)}.c{$(OBJPATH)}.obj:
166     @-mkdir $(OBJPATH) 2> nul
167     @$(CXX) $(CXXFLAGS)$@ $<
168
169 all:
170     $(OUTBIN)
171
172 clean:
173     @-del $(OUTBIN) 2> nul
174     @-del $(OUTPDB) 2> nul
175     @-del $(OUTLIB) 2> nul
176     @-rmdir /s /q $(OBJPATH) 2> nul
177
178 $(OBJS): $(PCH_TARGET) $(INCS)