13157ba21SRui Paulo# Makefile for Microsoft nmake to build wpa_supplicant
23157ba21SRui Paulo
33157ba21SRui Paulo# This can be run in Visual Studio 2005 Command Prompt
43157ba21SRui Paulo
53157ba21SRui Paulo# Note: Make sure that cl.exe is configured to include Platform SDK
63157ba21SRui Paulo# include and lib directories (vsvars32.bat)
73157ba21SRui Paulo
83157ba21SRui Pauloall: wpa_supplicant.exe wpa_cli.exe wpa_passphrase.exe wpasvc.exe win_if_list.exe
93157ba21SRui Paulo
103157ba21SRui Paulo# Root directory for WinPcap developer's pack
113157ba21SRui Paulo# (http://www.winpcap.org/install/bin/WpdPack_3_1.zip)
123157ba21SRui PauloWINPCAPDIR=C:\dev\WpdPack
133157ba21SRui Paulo
143157ba21SRui Paulo# Root directory for OpenSSL
153157ba21SRui Paulo# (http://www.openssl.org/source/openssl-0.9.8a.tar.gz)
163157ba21SRui Paulo# Build and installed following instructions in INSTALL.W32
173157ba21SRui Paulo# Note: If EAP-FAST is included in the build, OpenSSL needs to be patched to
183157ba21SRui Paulo# support it (openssl-tls-extensions.patch)
193157ba21SRui Paulo# Alternatively, see README-Windows.txt for information about binary
203157ba21SRui Paulo# installation package for OpenSSL.
213157ba21SRui PauloOPENSSLDIR=C:\dev\openssl
223157ba21SRui Paulo
233157ba21SRui PauloCC = cl
243157ba21SRui PauloOBJDIR = objs
253157ba21SRui Paulo
263157ba21SRui PauloCFLAGS = /DCONFIG_NATIVE_WINDOWS
273157ba21SRui PauloCFLAGS = $(CFLAGS) /DCONFIG_NDIS_EVENTS_INTEGRATED
283157ba21SRui PauloCFLAGS = $(CFLAGS) /DCONFIG_ANSI_C_EXTRA
293157ba21SRui PauloCFLAGS = $(CFLAGS) /DCONFIG_WINPCAP
303157ba21SRui PauloCFLAGS = $(CFLAGS) /DIEEE8021X_EAPOL
313157ba21SRui PauloCFLAGS = $(CFLAGS) /DPKCS12_FUNCS
323157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_MD5
333157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_TLS
343157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_MSCHAPv2
353157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_PEAP
363157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_TTLS
373157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_GTC
383157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_OTP
393157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_SIM
403157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_LEAP
413157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_PSK
423157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_AKA
433157ba21SRui Paulo#CFLAGS = $(CFLAGS) /DEAP_FAST
443157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_PAX
453157ba21SRui PauloCFLAGS = $(CFLAGS) /DEAP_TNC
463157ba21SRui PauloCFLAGS = $(CFLAGS) /DPCSC_FUNCS
473157ba21SRui PauloCFLAGS = $(CFLAGS) /DCONFIG_CTRL_IFACE
483157ba21SRui PauloCFLAGS = $(CFLAGS) /DCONFIG_CTRL_IFACE_NAMED_PIPE
493157ba21SRui PauloCFLAGS = $(CFLAGS) /DCONFIG_DRIVER_NDIS
50e28a4053SRui PauloCFLAGS = $(CFLAGS) /I..\src /I..\src\utils
51e28a4053SRui PauloCFLAGS = $(CFLAGS) /I.
523157ba21SRui PauloCFLAGS = $(CFLAGS) /DWIN32
533157ba21SRui PauloCFLAGS = $(CFLAGS) /Fo$(OBJDIR)\\ /c
543157ba21SRui PauloCFLAGS = $(CFLAGS) /W3
553157ba21SRui Paulo
563157ba21SRui Paulo#CFLAGS = $(CFLAGS) /WX
573157ba21SRui Paulo
583157ba21SRui Paulo# VS 2005 complains about lot of deprecated string functions; let's ignore them
593157ba21SRui Paulo# at least for now since snprintf and strncpy can be used in a safe way
603157ba21SRui PauloCFLAGS = $(CFLAGS) /D_CRT_SECURE_NO_DEPRECATE
613157ba21SRui Paulo
623157ba21SRui PauloOBJS = \
633157ba21SRui Paulo	$(OBJDIR)\os_win32.obj \
643157ba21SRui Paulo	$(OBJDIR)\eloop_win.obj \
653157ba21SRui Paulo	$(OBJDIR)\sha1.obj \
66e28a4053SRui Paulo	$(OBJDIR)\sha1-tlsprf.obj \
67e28a4053SRui Paulo	$(OBJDIR)\sha1-pbkdf2.obj \
683157ba21SRui Paulo	$(OBJDIR)\md5.obj \
69e28a4053SRui Paulo	$(OBJDIR)\aes-cbc.obj \
70e28a4053SRui Paulo	$(OBJDIR)\aes-ctr.obj \
71e28a4053SRui Paulo	$(OBJDIR)\aes-eax.obj \
72e28a4053SRui Paulo	$(OBJDIR)\aes-encblock.obj \
73e28a4053SRui Paulo	$(OBJDIR)\aes-omac1.obj \
74e28a4053SRui Paulo	$(OBJDIR)\aes-unwrap.obj \
75e28a4053SRui Paulo	$(OBJDIR)\aes-wrap.obj \
763157ba21SRui Paulo	$(OBJDIR)\common.obj \
773157ba21SRui Paulo	$(OBJDIR)\wpa_debug.obj \
783157ba21SRui Paulo	$(OBJDIR)\wpabuf.obj \
793157ba21SRui Paulo	$(OBJDIR)\wpa_supplicant.obj \
803157ba21SRui Paulo	$(OBJDIR)\wpa.obj \
813157ba21SRui Paulo	$(OBJDIR)\wpa_common.obj \
823157ba21SRui Paulo	$(OBJDIR)\wpa_ie.obj \
833157ba21SRui Paulo	$(OBJDIR)\preauth.obj \
843157ba21SRui Paulo	$(OBJDIR)\pmksa_cache.obj \
853157ba21SRui Paulo	$(OBJDIR)\eapol_supp_sm.obj \
863157ba21SRui Paulo	$(OBJDIR)\eap.obj \
873157ba21SRui Paulo	$(OBJDIR)\eap_common.obj \
883157ba21SRui Paulo	$(OBJDIR)\chap.obj \
893157ba21SRui Paulo	$(OBJDIR)\eap_methods.obj \
903157ba21SRui Paulo	$(OBJDIR)\eap_md5.obj \
913157ba21SRui Paulo	$(OBJDIR)\eap_tls.obj \
923157ba21SRui Paulo	$(OBJDIR)\eap_tls_common.obj \
933157ba21SRui Paulo	$(OBJDIR)\eap_mschapv2.obj \
943157ba21SRui Paulo	$(OBJDIR)\mschapv2.obj \
953157ba21SRui Paulo	$(OBJDIR)\eap_peap.obj \
963157ba21SRui Paulo	$(OBJDIR)\eap_peap_common.obj \
973157ba21SRui Paulo	$(OBJDIR)\eap_ttls.obj \
983157ba21SRui Paulo	$(OBJDIR)\eap_gtc.obj \
993157ba21SRui Paulo	$(OBJDIR)\eap_otp.obj \
1003157ba21SRui Paulo	$(OBJDIR)\eap_leap.obj \
1013157ba21SRui Paulo	$(OBJDIR)\eap_sim.obj \
1023157ba21SRui Paulo	$(OBJDIR)\eap_sim_common.obj \
1033157ba21SRui Paulo	$(OBJDIR)\eap_aka.obj \
1043157ba21SRui Paulo	$(OBJDIR)\eap_pax.obj \
1053157ba21SRui Paulo	$(OBJDIR)\eap_pax_common.obj \
1063157ba21SRui Paulo	$(OBJDIR)\eap_psk.obj \
1073157ba21SRui Paulo	$(OBJDIR)\eap_psk_common.obj \
1083157ba21SRui Paulo	$(OBJDIR)\eap_tnc.obj \
1093157ba21SRui Paulo	$(OBJDIR)\tncc.obj \
1103157ba21SRui Paulo	$(OBJDIR)\base64.obj \
1113157ba21SRui Paulo	$(OBJDIR)\ctrl_iface.obj \
1123157ba21SRui Paulo	$(OBJDIR)\ctrl_iface_named_pipe.obj \
1133157ba21SRui Paulo	$(OBJDIR)\driver_ndis.obj \
1143157ba21SRui Paulo	$(OBJDIR)\driver_ndis_.obj \
1153157ba21SRui Paulo	$(OBJDIR)\scan_helpers.obj \
1163157ba21SRui Paulo	$(OBJDIR)\events.obj \
117*c1d255d3SCy Schubert	$(OBJDIR)\bssid_ignore.obj \
1183157ba21SRui Paulo	$(OBJDIR)\scan.obj \
1193157ba21SRui Paulo	$(OBJDIR)\wpas_glue.obj \
120e28a4053SRui Paulo	$(OBJDIR)\eap_register.obj \
1213157ba21SRui Paulo	$(OBJDIR)\config.obj \
1223157ba21SRui Paulo	$(OBJDIR)\l2_packet_winpcap.obj \
1233157ba21SRui Paulo	$(OBJDIR)\tls_openssl.obj \
1243157ba21SRui Paulo	$(OBJDIR)\ms_funcs.obj \
1253157ba21SRui Paulo	$(OBJDIR)\crypto_openssl.obj \
126e28a4053SRui Paulo	$(OBJDIR)\fips_prf_openssl.obj \
1273157ba21SRui Paulo	$(OBJDIR)\pcsc_funcs.obj \
128e28a4053SRui Paulo	$(OBJDIR)\notify.obj \
1293157ba21SRui Paulo	$(OBJDIR)\ndis_events.obj
1303157ba21SRui Paulo
1313157ba21SRui Paulo# OBJS = $(OBJS) $(OBJDIR)\eap_fast.obj
1323157ba21SRui Paulo
1333157ba21SRui PauloOBJS_t = $(OBJS) \
1343157ba21SRui Paulo	$(OBJDIR)\eapol_test.obj \
1353157ba21SRui Paulo	$(OBJDIR)\radius.obj \
1363157ba21SRui Paulo	$(OBJDIR)\radius_client.obj \
1373157ba21SRui Paulo	$(OBJDIR)\config_file.obj $(OBJDIR)\base64.obj
1383157ba21SRui Paulo
1393157ba21SRui PauloOBJS_t2 = $(OBJS) \
1403157ba21SRui Paulo	$(OBJDIR)\preauth_test.obj \
1413157ba21SRui Paulo	$(OBJDIR)\config_file.obj $(OBJDIR)\base64.obj
1423157ba21SRui Paulo
1433157ba21SRui PauloOBJS2 = $(OBJDIR)\drivers.obj \
1443157ba21SRui Paulo	$(OBJDIR)\config_file.obj \
1453157ba21SRui Paulo	$(OBJS2) $(OBJDIR)\main.obj
1463157ba21SRui Paulo
1473157ba21SRui PauloOBJS3 = $(OBJDIR)\drivers.obj \
1483157ba21SRui Paulo	$(OBJDIR)\config_winreg.obj \
1493157ba21SRui Paulo	$(OBJS3) $(OBJDIR)\main_winsvc.obj
1503157ba21SRui Paulo
1513157ba21SRui PauloOBJS_c = \
1523157ba21SRui Paulo	$(OBJDIR)\os_win32.obj \
1533157ba21SRui Paulo	$(OBJDIR)\wpa_cli.obj \
1543157ba21SRui Paulo	$(OBJDIR)\wpa_ctrl.obj \
1553157ba21SRui Paulo	$(OBJDIR)\common.obj
1563157ba21SRui Paulo
1573157ba21SRui PauloOBJS_p = \
1583157ba21SRui Paulo	$(OBJDIR)\os_win32.obj \
1593157ba21SRui Paulo	$(OBJDIR)\common.obj \
160e28a4053SRui Paulo	$(OBJDIR)\wpa_debug.obj \
161e28a4053SRui Paulo	$(OBJDIR)\wpabuf.obj \
1623157ba21SRui Paulo	$(OBJDIR)\sha1.obj \
1633157ba21SRui Paulo	$(OBJDIR)\md5.obj \
1643157ba21SRui Paulo	$(OBJDIR)\crypto_openssl.obj \
165e28a4053SRui Paulo	$(OBJDIR)\sha1-pbkdf2.obj \
1663157ba21SRui Paulo	$(OBJDIR)\wpa_passphrase.obj
1673157ba21SRui Paulo
1683157ba21SRui PauloLIBS = wbemuuid.lib libcmt.lib kernel32.lib uuid.lib ole32.lib oleaut32.lib \
1693157ba21SRui Paulo	ws2_32.lib Advapi32.lib Crypt32.lib Winscard.lib \
1703157ba21SRui Paulo	Packet.lib wpcap.lib \
1713157ba21SRui Paulo	libeay32.lib ssleay32.lib
1723157ba21SRui Paulo# If using Win32 OpenSSL binary installation from Shining Light Productions,
1733157ba21SRui Paulo# replace the last line with this for dynamic libraries
1743157ba21SRui Paulo#	libeay32MT.lib ssleay32MT.lib
1753157ba21SRui Paulo# and this for static libraries
1763157ba21SRui Paulo#	libeay32MT.lib ssleay32MT.lib Gdi32.lib User32.lib
1773157ba21SRui Paulo
1783157ba21SRui PauloCFLAGS = $(CFLAGS) /I"$(WINPCAPDIR)/Include" /I"$(OPENSSLDIR)\include"
1793157ba21SRui PauloLFLAGS = /libpath:"$(WINPCAPDIR)\Lib" /libpath:"$(OPENSSLDIR)\lib"
1803157ba21SRui Paulo
1813157ba21SRui Paulowpa_supplicant.exe: $(OBJDIR) $(OBJS) $(OBJS2)
1823157ba21SRui Paulo	link.exe /out:wpa_supplicant.exe $(LFLAGS) $(OBJS) $(OBJS2) $(LIBS)
1833157ba21SRui Paulo
1843157ba21SRui Paulowpasvc.exe: $(OBJDIR) $(OBJS) $(OBJS3)
1853157ba21SRui Paulo	link.exe /out:wpasvc.exe $(LFLAGS) $(OBJS) $(OBJS3) $(LIBS)
1863157ba21SRui Paulo
1873157ba21SRui Paulowpa_cli.exe: $(OBJDIR) $(OBJS_c)
1883157ba21SRui Paulo	link.exe /out:wpa_cli.exe $(LFLAGS) $(OBJS_c) $(LIBS)
1893157ba21SRui Paulo
1903157ba21SRui Paulowpa_passphrase.exe: $(OBJDIR) $(OBJS_p)
1913157ba21SRui Paulo	link.exe /out:wpa_passphrase.exe $(LFLAGS) $(OBJS_p) $(LIBS)
1923157ba21SRui Paulo
1933157ba21SRui Pauloeapol_test.exe: $(OBJDIR) $(OBJS_t)
1943157ba21SRui Paulo	link.exe /out:eapol_test.exe $(LFLAGS) $(OBJS_t) $(LIBS)
1953157ba21SRui Paulo
1963157ba21SRui Paulopreauth_test.exe: $(OBJDIR) $(OBJS_t2)
1973157ba21SRui Paulo	link.exe /out:preauth_test.exe $(LFLAGS) $(OBJS_t2) $(LIBS)
1983157ba21SRui Paulo
1993157ba21SRui Paulowin_if_list.exe: $(OBJDIR) $(OBJDIR)\win_if_list.obj
2003157ba21SRui Paulo	link.exe /out:win_if_list.exe $(LFLAGS) $(OBJDIR)\win_if_list.obj $(LIBS)
2013157ba21SRui Paulo
2023157ba21SRui Paulo
2033157ba21SRui Paulo{..\src\utils}.c{$(OBJDIR)}.obj::
2043157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2053157ba21SRui Paulo
2063157ba21SRui Paulo{..\src\common}.c{$(OBJDIR)}.obj::
2073157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2083157ba21SRui Paulo
2093157ba21SRui Paulo{..\src\rsn_supp}.c{$(OBJDIR)}.obj::
2103157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2113157ba21SRui Paulo
2123157ba21SRui Paulo{..\src\eapol_supp}.c{$(OBJDIR)}.obj::
2133157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2143157ba21SRui Paulo
2153157ba21SRui Paulo{..\src\crypto}.c{$(OBJDIR)}.obj::
2163157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2173157ba21SRui Paulo
2183157ba21SRui Paulo{..\src\eap_peer}.c{$(OBJDIR)}.obj::
2193157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2203157ba21SRui Paulo
2213157ba21SRui Paulo{..\src\eap_common}.c{$(OBJDIR)}.obj::
2223157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2233157ba21SRui Paulo
2243157ba21SRui Paulo{..\src\drivers}.c{$(OBJDIR)}.obj::
2253157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2263157ba21SRui Paulo
2273157ba21SRui Paulo{..\src\l2_packet}.c{$(OBJDIR)}.obj::
2283157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2293157ba21SRui Paulo
2303157ba21SRui Paulo{.\}.c{$(OBJDIR)}.obj::
2313157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2323157ba21SRui Paulo
2333157ba21SRui Paulo{.\}.cpp{$(OBJDIR)}.obj::
2343157ba21SRui Paulo	$(CC) $(CFLAGS) $<
2353157ba21SRui Paulo
2363157ba21SRui Paulo$(OBJDIR):
2373157ba21SRui Paulo	if not exist "$(OBJDIR)" mkdir "$(OBJDIR)"
2383157ba21SRui Paulo
2393157ba21SRui Pauloclean:
2403157ba21SRui Paulo	erase $(OBJDIR)\*.obj wpa_supplicant.exe
241