mirror of
https://github.com/libssh2/libssh2.git
synced 2025-11-03 22:13:11 +03:00
win32/GNUmakefile: make it support non-Windows builds [ci skip]
With 20-ish extra lines, make this Makefile support all GCC-like
toolchains.
The temporary directory becomes `<triplet>-{release|debug}` from
the former `{release|debug}`.
Also change the lib directory name in the `dist` package from
`win32` to `lib`, to match other packages and build tools.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#########################################################################
|
||||
#
|
||||
# Makefile for building libssh2 (Windows version - GNU Make)
|
||||
# Makefile for building libssh2 with GCC-like toolchains.
|
||||
# Use: make -f GNUmakefile [help|all|clean|dist|distclean|dll|objclean|test|testclean]
|
||||
#
|
||||
# Hacked by: Guenter Knauf
|
||||
@@ -46,16 +46,31 @@ else
|
||||
TRIPLET ?= $(shell $(CC) -dumpmachine)
|
||||
endif
|
||||
|
||||
ifneq ($(findstring -w,$(TRIPLET)),)
|
||||
WIN32 := 1
|
||||
BIN_EXT := .exe
|
||||
DYN_EXT := .dll
|
||||
endif
|
||||
|
||||
CPPFLAGS += -I$(PROOT)/win32 -I$(PROOT)/include
|
||||
RCFLAGS += -I$(PROOT)/include
|
||||
|
||||
OBJ_DIR := $(TRIPLET)
|
||||
|
||||
# examples, tests
|
||||
|
||||
LIBSSH2_LDFLAGS_BIN += -L$(PROOT)/win32
|
||||
LIBS_BIN := -lssh2 -lws2_32
|
||||
LIBS_BIN := -lssh2
|
||||
ifdef WIN32
|
||||
LIBS_BIN += -lws2_32
|
||||
endif
|
||||
|
||||
ifdef DYN
|
||||
libssh2_DEPENDENCIES := $(PROOT)/win32/libssh2.dll.a
|
||||
ifdef WIN32
|
||||
libssh2_DEPENDENCIES := $(PROOT)/win32/libssh2.dll.a
|
||||
else
|
||||
libssh2_DEPENDENCIES := $(PROOT)/win32/libssh2$(DYN_EXT)
|
||||
endif
|
||||
LIBSSH2_LDFLAGS_BIN += -shared
|
||||
else
|
||||
libssh2_DEPENDENCIES := $(PROOT)/win32/libssh2.a
|
||||
@@ -68,9 +83,9 @@ endif
|
||||
DB ?= NDEBUG
|
||||
CPPFLAGS += -D$(DB)
|
||||
ifeq ($(DB),NDEBUG)
|
||||
OBJ_DIR := release
|
||||
OBJ_DIR := $(OBJ_DIR)-release
|
||||
else
|
||||
OBJ_DIR := debug
|
||||
OBJ_DIR := $(OBJ_DIR)-debug
|
||||
CFLAGS += -g
|
||||
CPPFLAGS += -DLIBSSH2DEBUG
|
||||
endif
|
||||
@@ -101,7 +116,7 @@ else ifdef MBEDTLS_PATH
|
||||
_LDFLAGS += -L"$(MBEDTLS_PATH)/lib"
|
||||
_LIBS += -lmbedtls -lmbedx509 -lmbedcrypto
|
||||
include $(PROOT)/Makefile.mbedTLS.inc
|
||||
else
|
||||
else ifdef WIN32
|
||||
CPPFLAGS += -DLIBSSH2_WINCNG
|
||||
include $(PROOT)/Makefile.WinCNG.inc
|
||||
endif
|
||||
@@ -113,7 +128,9 @@ ifdef ZLIB_PATH
|
||||
_LIBS += -lz
|
||||
endif
|
||||
|
||||
_LIBS += -lws2_32 -lcrypt32 -lbcrypt
|
||||
ifdef WIN32
|
||||
_LIBS += -lws2_32 -lcrypt32 -lbcrypt
|
||||
endif
|
||||
|
||||
LIBSSH2_LDFLAGS_LIB += $(_LDFLAGS)
|
||||
LIBS_LIB += $(_LIBS)
|
||||
@@ -159,10 +176,15 @@ DISTDIR ?= $(TARGET)-$(LIBSSH2_VERSION_STR)-bin-$(word 1,$(subst -, ,$(TRIPLET))
|
||||
DISTARC := $(DISTDIR).zip
|
||||
|
||||
LIBSSH2_DLL_SUFFIX ?=
|
||||
libssh2_dll_LIBRARY := $(TARGET)$(LIBSSH2_DLL_SUFFIX).dll
|
||||
libssh2_dll_a_LIBRARY := $(TARGET).dll.a
|
||||
libssh2_dll_LIBRARY := $(TARGET)$(LIBSSH2_DLL_SUFFIX)$(DYN_EXT)
|
||||
OBJS_dll := $(OBJS)
|
||||
ifdef WIN32
|
||||
libssh2_dll_a_LIBRARY := $(TARGET).dll.a
|
||||
OBJS_dll += $(OBJ_DIR)/$(TARGET).res
|
||||
LIBSSH2_LDFLAGS_LIB += -Wl,--output-def,$(libssh2_dll_LIBRARY:$(DYN_EXT)=.def),--out-implib,$(libssh2_dll_a_LIBRARY)
|
||||
endif
|
||||
|
||||
TARGETS_EXAMPLES := $(patsubst %.c,%.exe,$(strip $(wildcard $(PROOT)/example/*.c)))
|
||||
TARGETS_EXAMPLES := $(patsubst %.c,%$(BIN_EXT),$(strip $(wildcard $(PROOT)/example/*.c)))
|
||||
|
||||
all: lib dll
|
||||
|
||||
@@ -174,19 +196,20 @@ prebuild: $(OBJ_DIR) $(OBJ_DIR)/version.inc
|
||||
|
||||
test: $(TARGETS_EXAMPLES)
|
||||
|
||||
%.exe: %.c $(libssh2_DEPENDENCIES)
|
||||
%$(BIN_EXT): %.c $(libssh2_DEPENDENCIES)
|
||||
$(CC) -W -Wall $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(LIBSSH2_LDFLAGS_BIN) $< -o $@ $(LIBS) $(LIBS_BIN)
|
||||
|
||||
$(OBJ_DIR)/%.o: %.c
|
||||
$(CC) -W -Wall $(CFLAGS) $(CPPFLAGS) -c $< -o $@
|
||||
|
||||
$(libssh2_dll_LIBRARY) $(libssh2_dll_a_LIBRARY): $(OBJS) $(OBJ_DIR)/$(TARGET).res
|
||||
$(libssh2_dll_LIBRARY) $(libssh2_dll_a_LIBRARY): $(OBJS_dll)
|
||||
@$(call DEL, $@)
|
||||
$(CC) $(LDFLAGS) -shared $(LIBSSH2_LDFLAGS_LIB) $^ -o $@ $(LIBS) $(LIBS_LIB) \
|
||||
-Wl,--output-def,$(libssh2_dll_LIBRARY:.dll=.def),--out-implib,$(libssh2_dll_a_LIBRARY)
|
||||
$(CC) $(LDFLAGS) -shared $(LIBSSH2_LDFLAGS_LIB) $^ -o $@ $(LIBS) $(LIBS_LIB)
|
||||
|
||||
ifdef WIN32
|
||||
$(OBJ_DIR)/%.res: %.rc
|
||||
$(RC) -O coff $(RCFLAGS) -i $< -o $@
|
||||
endif
|
||||
|
||||
$(TARGET).a: $(OBJS)
|
||||
@$(call DEL, $@)
|
||||
@@ -198,14 +221,14 @@ $(OBJ_DIR)/version.inc: $(PROOT)/get_ver.awk $(PROOT)/include/libssh2.h $(OBJ_DI
|
||||
dist: all $(DISTDIR) $(DISTDIR)/readme.txt
|
||||
@$(call MKDIR, $(DISTDIR)/bin)
|
||||
@$(call MKDIR, $(DISTDIR)/include)
|
||||
@$(call MKDIR, $(DISTDIR)/win32)
|
||||
@$(call MKDIR, $(DISTDIR)/lib)
|
||||
@$(call COPY, $(PROOT)/COPYING, $(DISTDIR))
|
||||
@$(call COPY, $(PROOT)/README, $(DISTDIR))
|
||||
@$(call COPY, $(PROOT)/RELEASE-NOTES, $(DISTDIR))
|
||||
@$(call COPY, $(libssh2_dll_LIBRARY), $(DISTDIR)/bin)
|
||||
@$(call COPY, $(PROOT)/include/*.h, $(DISTDIR)/include)
|
||||
@$(call COPY, libssh2_config.h, $(DISTDIR)/include)
|
||||
@$(call COPY, *.a, $(DISTDIR)/win32)
|
||||
@$(call COPY, *.a, $(DISTDIR)/lib)
|
||||
@echo Creating... $(DISTARC)
|
||||
@$(ZIP) $(DISTARC) $(DISTDIR)/* < $(DISTDIR)/readme.txt
|
||||
|
||||
@@ -220,7 +243,7 @@ testclean: clean
|
||||
$(call DEL, $(TARGETS_EXAMPLES))
|
||||
|
||||
clean:
|
||||
$(call DEL, $(libssh2_dll_LIBRARY) $(libssh2_dll_LIBRARY:.dll=.def) $(TARGET).a $(libssh2_dll_a_LIBRARY))
|
||||
$(call DEL, $(libssh2_dll_LIBRARY) $(libssh2_dll_LIBRARY:$(DYN_EXT)=.def) $(TARGET).a $(libssh2_dll_a_LIBRARY))
|
||||
$(call RMDIR, $(OBJ_DIR))
|
||||
|
||||
$(OBJ_DIR):
|
||||
@@ -231,7 +254,7 @@ $(DISTDIR):
|
||||
|
||||
$(DISTDIR)/readme.txt: GNUmakefile
|
||||
@echo Creating... $@
|
||||
@echo $(DL)This is a binary distribution for Windows.$(DL) > $@
|
||||
@echo $(DL)This is a binary distribution for $(TRIPLET).$(DL) > $@
|
||||
@echo $(DL)libssh2 version $(LIBSSH2_VERSION_STR)$(DL) >> $@
|
||||
@echo $(DL)Please download the complete libssh2 package for$(DL) >> $@
|
||||
@echo $(DL)any further documentation:$(DL) >> $@
|
||||
|
||||
Reference in New Issue
Block a user