| ######################################################################### | |
| # | |
| ## Makefile for building libssh2 (Win32 version - gnu make) | |
| ## Use: make -f GNUmakefile [help|all|clean|dev|devclean|dist|distclean|dll|objclean] | |
| ## | |
| ## Hacked by: Guenter Knauf | |
| # | |
| ######################################################################### | |
| # Edit the path below to point to the base of your Zlib sources. | |
| ifndef ZLIB_PATH | |
| ZLIB_PATH = ../../zlib-1.2.8 | |
| endif | |
| # Edit the path below to point to the base of your OpenSSL package. | |
| ifndef OPENSSL_PATH | |
| OPENSSL_PATH = ../../openssl-1.0.2d | |
| endif | |
| # Edit the path below to point to your Distribution folder. | |
| ifndef DISTDIR | |
| DISTDIR = libssh2-$(LIBSSH2_VERSION_STR)-bin-$(ARCH) | |
| endif | |
| DISTARC = $(DISTDIR).zip | |
| # Edit the path below to point to your Development folder. | |
| ifndef DEVLDIR | |
| DEVLDIR = libssh2-$(LIBSSH2_VERSION_STR)-dev-$(ARCH) | |
| endif | |
| DEVLARC = $(DEVLDIR).zip | |
| # Project root | |
| PROOT = .. | |
| # Edit the vars below to change target settings. | |
| TARGET = libssh2 | |
| WWWURL = https://www.libssh2.org/ | |
| DESCR = libssh2 $(LIBSSH2_VERSION_STR) | |
| #STACK = 64000 | |
| # must be equal to DEBUG or NDEBUG | |
| ifndef DB | |
| DB = NDEBUG | |
| # DB = DEBUG | |
| endif | |
| # Optimization: -O<n> or debugging: -g | |
| ifeq ($(DB),NDEBUG) | |
| OPT = -O2 | |
| OBJDIR = release | |
| else | |
| OPT = -g | |
| OPT += -DLIBSSH2DEBUG | |
| OBJDIR = debug | |
| endif | |
| # Here you can find a native Win32 binary of the original awk: | |
| # http://www.gknw.net/development/prgtools/awk-20100523.zip | |
| AWK = awk | |
| ZIP = zip -qzr9 | |
| # Platform-dependent helper tool macros | |
| ifeq ($(findstring /sh,$(SHELL)),/sh) | |
| DEL = rm -f $1 | |
| RMDIR = rm -fr $1 | |
| MKDIR = mkdir -p $1 | |
| COPY = -cp -afv $1 $2 | |
| #COPYR = -cp -afr $1/* $2 | |
| COPYR = -rsync -aC $1/* $2 | |
| TOUCH = touch $1 | |
| CAT = cat | |
| ECHONL = echo "" | |
| DL = ' | |
| else | |
| ifeq "$(OS)" "Windows_NT" | |
| DEL = -del 2>NUL /q /f $(subst /,\,$1) | |
| RMDIR = -rd 2>NUL /q /s $(subst /,\,$1) | |
| else | |
| DEL = -del 2>NUL $(subst /,\,$1) | |
| RMDIR = -deltree 2>NUL /y $(subst /,\,$1) | |
| endif | |
| MKDIR = -md 2>NUL $(subst /,\,$1) | |
| COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2) | |
| COPYR = -xcopy 2>NUL /q /y /e $(subst /,\,$1) $(subst /,\,$2) | |
| TOUCH = copy 2>&1>NUL /b $(subst /,\,$1) +,, | |
| CAT = type | |
| ECHONL = $(ComSpec) /c echo. | |
| endif | |
| ifeq ($(LIBSSH2_CC),) | |
| LIBSSH2_CC := $(CROSSPREFIX)gcc | |
| endif | |
| ifeq ($(LIBSSH2_AR),) | |
| LIBSSH2_AR := $(CROSSPREFIX)ar | |
| endif | |
| ifeq ($(LIBSSH2_RANLIB),) | |
| LIBSSH2_RANLIB := $(CROSSPREFIX)ranlib | |
| endif | |
| ifeq ($(LIBSSH2_DLL_A_SUFFIX),) | |
| LIBSSH2_DLL_A_SUFFIX := dll | |
| endif | |
| libssh2_dll_LIBRARY = $(TARGET)$(LIBSSH2_DLL_SUFFIX).dll | |
| # The following line defines your compiler. | |
| ifdef METROWERKS | |
| CC = mwcc | |
| else | |
| CC = $(LIBSSH2_CC) | |
| endif | |
| # Set environment var ARCH to your architecture to override autodetection. | |
| ifndef ARCH | |
| ifeq ($(findstring gcc,$(CC)),gcc) | |
| ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64) | |
| ARCH = w64 | |
| else | |
| ARCH = w32 | |
| endif | |
| else | |
| ARCH = w32 | |
| endif | |
| endif | |
| # Include the version info retrieved from libssh2.h | |
| -include $(OBJDIR)/version.inc | |
| # Global flags for all compilers | |
| CFLAGS = $(LIBSSH2_CFLAG_EXTRAS) $(OPT) -D$(DB) -DLIBSSH2_WIN32 -DHAVE_WINDOWS_H # -DHAVE_CONFIG_H | |
| LDFLAGS = $(LIBSSH2_LDFLAG_EXTRAS) | |
| ifeq ($(CC),mwcc) | |
| LD = mwld | |
| RC = mwwinrc | |
| LDFLAGS += -nostdlib | |
| AR = $(LD) | |
| ARFLAGS = -nostdlib -library -o | |
| LIBEXT = lib | |
| #RANLIB = | |
| LIBPATH += -lr "$(METROWERKS)/MSL" -lr "$(METROWERKS)/Win32-x86 Support" | |
| LDLIBS += -lMSL_Runtime_x86.lib -lMSL_C_x86.lib -lMSL_Extras_x86.lib | |
| RCFLAGS = | |
| CFLAGS += -nostdinc -gccinc -msgstyle gcc -inline off -opt nointrinsics -proc 586 | |
| CFLAGS += -ir "$(METROWERKS)/MSL" -ir "$(METROWERKS)/Win32-x86 Support" | |
| CFLAGS += -w on,nounused,nounusedexpr # -ansi strict | |
| else | |
| LIBEXT = a | |
| LD = $(LIBSSH2_CC) | |
| RC = $(CROSSPREFIX)windres | |
| LDFLAGS += -s -shared -Wl,--output-def,$(libssh2_dll_LIBRARY:.dll=.def),--out-implib,$(TARGET)$(LIBSSH2_DLL_A_SUFFIX).$(LIBEXT) | |
| AR = $(LIBSSH2_AR) | |
| ARFLAGS = cru | |
| RANLIB = $(LIBSSH2_RANLIB) | |
| RCFLAGS = -I $(PROOT)/include -O coff | |
| CFLAGS += -fno-builtin | |
| CFLAGS += -fno-strict-aliasing | |
| CFLAGS += -Wall # -pedantic | |
| ifeq ($(ARCH),w64) | |
| CFLAGS += -m64 -D_AMD64_ | |
| LDFLAGS += -m64 | |
| RCFLAGS += -F pe-x86-64 | |
| else | |
| CFLAGS += -m32 | |
| LDFLAGS += -m32 | |
| RCFLAGS += -F pe-i386 | |
| endif | |
| endif | |
| INCLUDES = -I$(PROOT)/win32 -I$(PROOT)/include | |
| ifdef WITH_WINCNG | |
| CFLAGS += -DLIBSSH2_WINCNG | |
| LDLIBS += -lbcrypt -lcrypt32 | |
| else | |
| CFLAGS += -DLIBSSH2_OPENSSL | |
| ifndef OPENSSL_INCLUDE | |
| ifeq "$(wildcard $(OPENSSL_PATH)/outinc)" "$(OPENSSL_PATH)/outinc" | |
| OPENSSL_INCLUDE = $(OPENSSL_PATH)/outinc | |
| endif | |
| ifeq "$(wildcard $(OPENSSL_PATH)/include)" "$(OPENSSL_PATH)/include" | |
| OPENSSL_INCLUDE = $(OPENSSL_PATH)/include | |
| endif | |
| endif | |
| ifneq "$(wildcard $(OPENSSL_INCLUDE)/openssl/opensslv.h)" "$(OPENSSL_INCLUDE)/openssl/opensslv.h" | |
| $(error Invalid OPENSSL_PATH: $(OPENSSL_PATH)) | |
| endif | |
| INCLUDES += -I"$(OPENSSL_INCLUDE)" | |
| ifndef OPENSSL_LIBPATH | |
| OPENSSL_LIBS_STAT = crypto ssl | |
| ifeq "$(wildcard $(OPENSSL_PATH)/out)" "$(OPENSSL_PATH)/out" | |
| OPENSSL_LIBPATH = $(OPENSSL_PATH)/out | |
| OPENSSL_LIBS_DYN = eay32 ssl32 | |
| endif | |
| ifeq "$(wildcard $(OPENSSL_PATH)/lib)" "$(OPENSSL_PATH)/lib" | |
| OPENSSL_LIBPATH = $(OPENSSL_PATH)/lib | |
| OPENSSL_LIBS_DYN = crypto.dll ssl.dll | |
| endif | |
| endif | |
| ifdef LINK_OPENSSL_STATIC | |
| LDLIBS += $(patsubst %,$(OPENSSL_LIBPATH)/lib%.$(LIBEXT), $(OPENSSL_LIBS_STAT)) -lgdi32 | |
| else | |
| LDLIBS += $(patsubst %,$(OPENSSL_LIBPATH)/lib%.$(LIBEXT), $(OPENSSL_LIBS_DYN)) | |
| endif | |
| endif | |
| ifeq ($(CC),mwcc) | |
| LDLIBS += -lkernel32.lib -luser32.lib -lwsock32.lib | |
| else | |
| #LDLIBS += -lwsock32 | |
| LDLIBS += -lws2_32 | |
| endif | |
| ifdef WITH_ZLIB | |
| CFLAGS += -DLIBSSH2_HAVE_ZLIB | |
| INCLUDES += -I$(ZLIB_PATH) | |
| ifdef LINK_ZLIB_STATIC | |
| LDLIBS += $(ZLIB_PATH)/libz.$(LIBEXT) | |
| else | |
| LDLIBS += $(ZLIB_PATH)/libz.dll.$(LIBEXT) | |
| endif | |
| endif | |
| CFLAGS += $(INCLUDES) | |
| vpath %.c $(PROOT)/src | |
| ifdef WITH_WINCNG | |
| include $(PROOT)/Makefile.WinCNG.inc | |
| else | |
| include $(PROOT)/Makefile.OpenSSL.inc | |
| endif | |
| # include Makefile.inc to get CSOURCES define | |
| include $(PROOT)/Makefile.inc | |
| OBJECTS := $(patsubst %.c,%.o,$(CSOURCES)) | |
| OBJS := $(addprefix $(OBJDIR)/,$(OBJECTS)) | |
| OBJL = $(OBJS) $(OBJDIR)/$(TARGET).res | |
| all: lib dll | |
| dll: prebuild $(libssh2_dll_LIBRARY) | |
| lib: prebuild $(TARGET).$(LIBEXT) | |
| prebuild: $(OBJDIR) $(OBJDIR)/version.inc | |
| # libssh2_config.h | |
| test: all | |
| $(MAKE) -C test -f GNUmakefile | |
| $(OBJDIR)/%.o: %.c | |
| # @echo Compiling $< | |
| $(CC) $(CFLAGS) -c $< -o $@ | |
| $(OBJDIR)/version.inc: $(PROOT)/get_ver.awk $(PROOT)/include/libssh2.h $(OBJDIR) | |
| @echo Creating $@ | |
| @$(AWK) -f $^ > $@ | |
| dist: all $(DISTDIR) $(DISTDIR)/readme.txt | |
| @$(call MKDIR, $(DISTDIR)/bin) | |
| @$(call COPY, $(PROOT)/AUTHORS, $(DISTDIR)) | |
| @$(call COPY, $(PROOT)/COPYING, $(DISTDIR)) | |
| @$(call COPY, $(PROOT)/INSTALL, $(DISTDIR)) | |
| @$(call COPY, $(PROOT)/README, $(DISTDIR)) | |
| @$(call COPY, $(PROOT)/RELEASE-NOTES, $(DISTDIR)) | |
| @$(call COPY, $(libssh2_dll_LIBRARY), $(DISTDIR)/bin) | |
| @echo Creating $(DISTARC) | |
| @$(ZIP) $(DISTARC) $(DISTDIR)/* < $(DISTDIR)/readme.txt | |
| dev: all $(DEVLDIR) $(DEVLDIR)/readme.txt | |
| @$(call MKDIR, $(DEVLDIR)/bin) | |
| @$(call MKDIR, $(DEVLDIR)/include) | |
| @$(call MKDIR, $(DEVLDIR)/win32) | |
| @$(call COPY, $(PROOT)/AUTHORS, $(DEVLDIR)) | |
| @$(call COPY, $(PROOT)/COPYING, $(DEVLDIR)) | |
| @$(call COPY, $(PROOT)/INSTALL, $(DEVLDIR)) | |
| @$(call COPY, $(PROOT)/README, $(DEVLDIR)) | |
| @$(call COPY, $(PROOT)/RELEASE-NOTES, $(DEVLDIR)) | |
| @$(call COPY, $(libssh2_dll_LIBRARY), $(DEVLDIR)/bin) | |
| @$(call COPY, $(PROOT)/include/*.h, $(DEVLDIR)/include) | |
| @$(call COPY, libssh2_config.h, $(DEVLDIR)/include) | |
| @$(call COPY, *.$(LIBEXT), $(DEVLDIR)/win32) | |
| @echo Creating $(DEVLARC) | |
| @$(ZIP) $(DEVLARC) $(DEVLDIR)/* < $(DEVLDIR)/readme.txt | |
| distclean vclean: clean | |
| $(call RMDIR, $(DISTDIR)) | |
| $(call DEL, $(DISTARC)) | |
| devclean: clean | |
| $(call RMDIR, $(DEVLDIR)) | |
| $(call DEL, $(DEVLARC)) | |
| objclean: all | |
| $(call RMDIR, $(OBJDIR)) | |
| testclean: clean | |
| $(MAKE) -C test -f GNUmakefile clean | |
| clean: | |
| # $(call DEL, libssh2_config.h) | |
| $(call DEL, $(libssh2_dll_LIBRARY) $(libssh2_dll_LIBRARY:.dll=.def) $(TARGET).$(LIBEXT) $(TARGET)$(LIBSSH2_DLL_A_SUFFIX).$(LIBEXT)) | |
| $(call RMDIR, $(OBJDIR)) | |
| $(OBJDIR): | |
| @$(call MKDIR, $@) | |
| $(DISTDIR): | |
| @$(call MKDIR, $@) | |
| $(DEVLDIR): | |
| @$(call MKDIR, $@) | |
| $(TARGET).$(LIBEXT): $(OBJS) | |
| @echo Creating $@ | |
| @$(call DEL, $@) | |
| @$(AR) $(ARFLAGS) $@ $^ | |
| ifdef RANLIB | |
| @$(RANLIB) $@ | |
| endif | |
| $(libssh2_dll_LIBRARY) $(TARGET)$(LIBSSH2_DLL_A_SUFFIX).$(LIBEXT): $(OBJL) | |
| @echo Linking $@ | |
| @$(call DEL, $@) | |
| @$(LD) $(LDFLAGS) $^ -o $@ $(LIBPATH) $(LDLIBS) | |
| $(OBJDIR)/%.res: %.rc | |
| @echo Creating $@ | |
| @$(RC) $(RCFLAGS) -i $< -o $@ | |
| $(DISTDIR)/readme.txt: GNUmakefile | |
| @echo Creating $@ | |
| @echo $(DL)This is a binary distribution for Win32 platform.$(DL) > $@ | |
| @echo $(DL)libssh version $(LIBSSH2_VERSION_STR)$(DL) >> $@ | |
| @echo $(DL)Please download the complete libssh package for$(DL) >> $@ | |
| @echo $(DL)any further documentation:$(DL) >> $@ | |
| @echo $(DL)$(WWWURL)$(DL) >> $@ | |
| $(DEVLDIR)/readme.txt: GNUmakefile | |
| @echo Creating $@ | |
| @echo $(DL)This is a development distribution for Win32 platform.$(DL) > $@ | |
| @echo $(DL)libssh version $(LIBSSH2_VERSION_STR)$(DL) >> $@ | |
| @echo $(DL)Please download the complete libssh package for$(DL) >> $@ | |
| @echo $(DL)any further documentation:$(DL) >> $@ | |
| @echo $(DL)$(WWWURL)$(DL) >> $@ | |
| help: $(OBJDIR)/version.inc | |
| @echo $(DL)===========================================================$(DL) | |
| @echo $(DL)OpenSSL path = $(OPENSSL_PATH)$(DL) | |
| @echo $(DL)Zlib path = $(ZLIB_PATH)$(DL) | |
| @echo $(DL)===========================================================$(DL) | |
| @echo $(DL)libssh $(LIBSSH2_VERSION_STR) - available targets are:$(DL) | |
| @echo $(DL)$(MAKE) all$(DL) | |
| @echo $(DL)$(MAKE) dll$(DL) | |
| @echo $(DL)$(MAKE) lib$(DL) | |
| @echo $(DL)$(MAKE) clean$(DL) | |
| @echo $(DL)$(MAKE) dev$(DL) | |
| @echo $(DL)$(MAKE) devclean$(DL) | |
| @echo $(DL)$(MAKE) dist$(DL) | |
| @echo $(DL)$(MAKE) distclean$(DL) | |
| @echo $(DL)$(MAKE) objclean$(DL) | |
| @echo $(DL)$(MAKE) test$(DL) | |
| @echo $(DL)===========================================================$(DL) |