Merge branch 'PolynomialDivision-feature/add_workflow'
[olsrd.git] / make / Makefile.win32
1 # The olsr.org Optimized Link-State Routing daemon (olsrd)
2 #
3 # (c) by the OLSR project
4 #
5 # See our Git repository to find out who worked on this file
6 # and thus is a copyright holder on it.
7 #
8 # All rights reserved.
9 #
10 # Redistribution and use in source and binary forms, with or without
11 # modification, are permitted provided that the following conditions
12 # are met:
13 #
14 # * Redistributions of source code must retain the above copyright
15 #   notice, this list of conditions and the following disclaimer.
16 # * Redistributions in binary form must reproduce the above copyright
17 #   notice, this list of conditions and the following disclaimer in
18 #   the documentation and/or other materials provided with the
19 #   distribution.
20 # * Neither the name of olsr.org, olsrd nor the names of its
21 #   contributors may be used to endorse or promote products derived
22 #   from this software without specific prior written permission.
23 #
24 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 # POSSIBILITY OF SUCH DAMAGE.
36 #
37 # Visit http://www.olsr.org for more information.
38 #
39 # If you find this software useful feel free to make a donation
40 # to the project. For more information see the website or contact
41 # the copyright holders.
42 #
43
44 #
45 # WINDOWS32 SPECIFIC CONFIGURATION
46 #
47
48 DESTDIR ?=
49 EXENAME = olsrd.exe
50
51 SRCS +=         $(sort $(wildcard src/win32/*.c))
52 HDRS +=         $(sort $(wildcard src/win32/*.h))
53
54 CPPFLAGS +=     -D_WIN32_WINNT=0x0600
55 LIBS +=         -lws2_32 -liphlpapi
56 CPPFLAGS +=     -I$(TOPDIR)/src/win32
57
58 PLUGIN_SONAME ?= $(PLUGIN_NAME)
59 PLUGIN_FULLNAME ?= $(PLUGIN_NAME).dll
60 INSTALL_LIB =   mkdir -p $(LIBDIR);cp $(PLUGIN_FULLNAME) $(LIBDIR)/$(PLUGIN_FULLNAME)
61 UNINSTALL_LIB = del /F $(LIBDIR)/$(PLUGIN_FULLNAME)
62
63 ifdef OLSRD_PLUGIN
64 LDFLAGS +=      -L$(TOPDIR)
65 #LIBS +=        $(TOPDIR)/src/win32/compat.o
66 LIBS +=         -lolsrd
67 endif
68
69 OS_LIB_PTHREAD =
70 OS_CFLAG_PTHREAD =
71 OS_LIB_DYNLOAD =
72
73
74 # Notes for compiling olsrd.exe under Windows using MinGW
75 # ----------------------------------------------------
76 # You can build olsrd.exe using MinGW on either Windows or GNU/Linux.
77 # For MinGW on Windows, run this in the msys shell:
78 #
79 #   cd olsrd
80 #   make clean_all
81 #   make build_all OS=win32
82 #
83 # MinGW also runs on GNU/Linux so you can build Windows binaries on
84 # any GNU/Linux machine.  It is especially easy on a
85 # Debian/Ubuntu/Mint system:
86 #
87 #   sudo apt-get install mingw32 flex bison make
88 #   cd olsrd
89 #   make clean_all
90 #   CC=i586-mingw32msvc-gcc make build_all OS=win32
91
92 MINGW_VERSION = $(shell "$(TOPDIR)/make/getmingwversion.bash" "$(CC)")
93
94 MINGW_VERSION_OK := $(shell expr "$(MINGW_VERSION)" \>= 40600)
95 ifneq "$(MINGW_VERSION_OK)" "1"
96   CFLAGS += -I$(TOPDIR)/src/win32/compat
97 endif
98
99 CFLAGS += -DMINGW_VERSION=$(MINGW_VERSION)
100
101 # Notes for compiling olsrd.exe under Windows using Cygwin
102 # ----------------------------------------------------
103 # You need at least Cygwin installed. Start the Cygwin setup and select
104 # flex,bison,make,mingw-core. Then run "make all libs" to compile olsrd.exe
105 # and the plugin DLLs. To compile the GUI, you need MSVC6, PlatformSDK and
106 # the NSIS installer. Adapt the path names below and run "make win32setup".
107 # Alternatively, set environment vars e.g. in the Windows registry under
108 # HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment e.g.
109 #
110 # set PATH=C:\PROGRA~1\MICROS~4\VC98\BIN;C:\PROGRA~1\MIFD68~1\BIN;C:\PROGRA~1\NSIS;%PATH%
111 # set LIB=C:\PROGRA~1\MIFD68~1\LIB;C:\PROGRA~1\MICROS~4\VC98\LIB;C:\PROGRA~1\MICROS~4\VC98\MFC\LIB
112 # set INCLUDE=C:\PROGRA~1\MIFD68~1\INCLUDE;C:\PROGRA~1\MICROS~4\VC98\INCLUDE;C:\PROGRA~1\MICROS~4\VC98\MFC\INCLUDE
113 #
114 # You can install Cygwin under Wine. Then "wineconsole make all libs win32lib"
115 # does it's job (slowly), but there may be issues while re-invoking MSVC from
116 # bash.exe during "wineconsole win32setup". Note, that Wine on EXT2/EXT3 prevents
117 # the Cygwin "!<symlink>" files from working somehow. You may need to install Cygwin
118 # under Windows to get a correct gcc/mingw setup, then copy to your Linux
119 # box, then replace all "!<symlink>" files by real symlinks, e.g.
120 #
121 # cd ~/.wine/drive_c/Programme/cygwin
122 # for src in $(grep '!<symlink>' . -rl 2>&-);do
123 #  if [ $(stat -c "%s" $src) -lt 100 ];then
124 #   dst=$(sed -e's/^\!<symlink>//' $src)
125 #   echo "ln -sf $dst $src"
126 #  fi
127 # done
128 #
129 # Required software versions:
130 # MSVC6 GUI (with MFC!) runs under Wine (copy MFC42.DLL & MSVCP60.DLL)
131 # Platform SDK, search for "February 2003 SDK"
132 # Cygwin 1.5.x and Wine-1.1.0 or above
133
134 PROGDIR = c:/Programme
135 PROGCYG = /cygdrive/c/Programme
136 PSDKDIR = $(PROGDIR)/Microsoft SDK
137 PSDKCYG = $(PROGCYG)/Microsoft\ SDK
138 MSVCDIR = $(PROGDIR)/Microsoft Visual Studio
139 MSVCCYG = $(PROGCYG)/Microsoft\ Visual\ Studio
140 NSISDIR = $(PROGDIR)/NSIS
141 NSISCYG = $(PROGCYG)/NSIS
142
143 # Necessary for running cygwin under wine. Both the "-C" option and MAKELEVEL>0 will oops...
144 MAKE := sh -c 'cmd=$$0;while [ 0 -lt $$\# ];do case $$1 in -C) cmd="cd $$2 && $$cmd";shift 2;; *) cmd="$$cmd \"$$1\"";shift;;esac;done;sh -c "export MAKELEVEL=0 && $$cmd"' $(MAKE)
145
146 gui/win32/Shim/Release/shim.obj: gui/win32/Shim/shim.c
147                 test -d $(dir $@) || mkdir -p $(dir $@)
148                 PATH=$(MSVCCYG)/VC98/Bin:$$PATH && CL.EXE \
149                         /I"$(PSDKDIR)/Include" /I"$(MSVCDIR)/VC98/Include" \
150                         /nologo /ML /W3 /GX /O2 /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" \
151                         /Fp"$(dir $@)/Shim.pch" /YX /Fo"$(dir $@)/" /Fd"$(dir $@)/" /FD /c "$<"
152
153 gui/win32/Shim/Release/Shim.exe: gui/win32/Shim/Release/shim.obj
154                 PATH=$(MSVCCYG)/VC98/Bin:$$PATH && LINK.EXE \
155                         /LIBPATH:"$(PSDKDIR)/Lib" /LIBPATH:"$(MSVCDIR)/VC98/Lib" \
156                         kernel32.lib user32.lib \
157                         /nologo /subsystem:console /incremental:no /machine:I386 /out:"$@" "$^"
158
159 WIN32FILES+=Frontend
160 WIN32FILES+=FrontendDlg
161 WIN32FILES+=HnaEntry
162 WIN32FILES+=MidEntry
163 WIN32FILES+=MprEntry
164 WIN32FILES+=MyDialog1
165 WIN32FILES+=MyDialog2
166 WIN32FILES+=MyDialog3
167 WIN32FILES+=MyDialog4
168 WIN32FILES+=MyEdit
169 WIN32FILES+=MyTabCtrl
170 WIN32FILES+=NodeEntry
171 WIN32FILES+=StdAfx
172 WIN32FILES+=TrayIcon
173
174 WIN32CPPFILES=$(addprefix gui/win32/Main/, $(addsuffix .cpp,  $(WIN32FILES)))
175 WIN32OBJFILES=$(addprefix gui/win32/Main/Release/, $(addsuffix .obj,  $(WIN32FILES)))
176
177 gui/win32/Main/Release/Frontend.res: gui/win32/Main/Frontend.rc
178                 test -d $(dir $@) || mkdir -p $(dir $@)
179                 PATH=$(PSDKCYG)/Bin:$(MSVCCYG)/Common/MSDev98/Bin:$$PATH && RC.EXE \
180                         /l 0x407 /i"$(PSDKDIR)/Include" /i"$(MSVCDIR)/VC98/MFC/Include" /fo"$@" /d NDEBUG "$<"
181
182 gui/win32/Main/Release/Switch.exe: gui/win32/Main/olsrd_cfgparser.lib gui/win32/Main/Release/Frontend.res $(WIN32CPPFILES)
183                 test -d $(dir $@) || mkdir -p $(dir $@)
184                 PATH=$(MSVCCYG)/VC98/Bin:$$PATH && CL.EXE \
185                         /I"$(PSDKDIR)/Include" /I"$(MSVCDIR)/VC98/Include" /I"$(MSVCDIR)/VC98/MFC/Include" /I"src" \
186                         /nologo /MT /W4 /GX /O2 /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" \
187                         /Fp"$(dir $@)/Frontend.pch" /YX"stdafx.h" /Fo"$(dir $@)/" /Fd"$(dir $@)/" /FD /c \
188                         $(WIN32CPPFILES)
189                 PATH=$(MSVCCYG)/VC98/Bin:$$PATH && LINK.EXE \
190                         /LIBPATH:"$(PSDKDIR)/Lib" /LIBPATH:"$(MSVCDIR)/VC98/Lib" /LIBPATH:"$(MSVCDIR)/VC98/MFC/Lib" \
191                         ws2_32.lib iphlpapi.lib \
192                         gui/win32/Main/olsrd_cfgparser.lib gui/win32/Main/Release/Frontend.res \
193                         /nologo /subsystem:windows /incremental:no /machine:I386 /out:"$@" \
194                         $(WIN32OBJFILES)
195
196 win32setup: gui/win32/Inst/installer.nsi default_target libs gui/win32/Shim/Release/Shim.exe gui/win32/Main/Release/Switch.exe
197                 PATH=$(NSISCYG):$$PATH && makensis.exe $<
198
199 win32lib: gui/win32/Main/olsrd_cfgparser.lib
200
201 gui/win32/Main/olsrd_cfgparser.lib: cfgparser
202                 @# Using the cygwin dlltool does not work (missing functions hooks)
203                 @# dlltool --input-def src/cfgparser/olsrd_cfgparser.def --dllname src/cfgparser/olsrd_cfgparser.dll --output-lib $@
204                 @# Use the Microsoft Lib Tool instead
205                 PATH=$(MSVCCYG)/VC98/Bin:$$PATH && LIB.EXE \
206                         /machine:i386 /def:src/cfgparser/olsrd_cfgparser.def /out:gui/win32/Main/olsrd_cfgparser.lib
207
208 # Local Variables:
209 # mode: makefile
210 # End: