b2170e4773
The Azure DevOps VM images that are used in the CI builds recently updated the version of MSYS that is installed, which is causing the MSYS builds to fail. It seems that this new version has issues with using the shell cmd method in the makefiles to obtain the current path. However, we can avoid this entirely by using the cygpath utility, which also avoids the overhead of launching a new cmd instance just to get the path. Unfortunately, it seems that older versions of MSYS don't have this utility program included by default, though versions of MSYS 2 and up do have it included by default. We can continue using the old approach for the older versions and use the cygpath approach for new versions.
186 lines
6.4 KiB
Makefile
186 lines
6.4 KiB
Makefile
## -*-makefile-*-
|
|
## Copyright (C) 2016 and later: Unicode, Inc. and others.
|
|
## License & terms of use: http://www.unicode.org/copyright.html
|
|
## Cygwin/MinGW specific setup
|
|
## Copyright (c) 2001-2014, International Business Machines Corporation and
|
|
## others. All Rights Reserved.
|
|
|
|
# TODO: Finish the rest of this port. This platform port is incomplete.
|
|
|
|
# This file is similar to mh-mingw64
|
|
# Any changes made here may also need to be made in mh-mingw64
|
|
|
|
# We install sbin tools into the same bin directory because
|
|
# pkgdata needs some of the tools in sbin, and we can't always depend on
|
|
# icu-config working on Windows.
|
|
sbindir=$(bindir)
|
|
|
|
## Commands to generate dependency files
|
|
GEN_DEPS.c= $(CC) -E -MM $(DEFS) $(CPPFLAGS)
|
|
GEN_DEPS.cc= $(CXX) -E -MM $(DEFS) $(CPPFLAGS)
|
|
|
|
## Flags to create/use a static library
|
|
ifneq ($(ENABLE_SHARED),YES)
|
|
## Make sure that the static libraries can be built and used
|
|
CPPFLAGS += -DU_STATIC_IMPLEMENTATION
|
|
else
|
|
## Make sure that the static libraries can be built
|
|
STATICCPPFLAGS = -DU_STATIC_IMPLEMENTATION
|
|
endif
|
|
|
|
## ICU requires a minimum target of Windows 7, and MinGW does not set this by default.
|
|
## https://msdn.microsoft.com/en-us/library/aa383745.aspx
|
|
CPPFLAGS += -DWINVER=0x0601 -D_WIN32_WINNT=0x0601
|
|
|
|
## Flags for position independent code
|
|
SHAREDLIBCFLAGS =
|
|
SHAREDLIBCXXFLAGS =
|
|
SHAREDLIBCPPFLAGS = -DPIC
|
|
|
|
## Additional flags when building libraries and with threads
|
|
THREADSCFLAGS = -mthreads
|
|
THREADSCXXFLAGS = -mthreads
|
|
LIBCPPFLAGS =
|
|
|
|
## Add 'd' suffix to the names of binary files with Debug configuration
|
|
ifeq ($(ENABLE_DEBUG),1)
|
|
ICULIBSUFFIX:=$(ICULIBSUFFIX)d#M#
|
|
endif
|
|
|
|
# Commands to link. Link with C++ in case static libraries are used.
|
|
LINK.c= $(CXX) $(CXXFLAGS) $(LDFLAGS)
|
|
#LINK.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS)
|
|
|
|
## Shared library options
|
|
LD_SOOPTIONS= -Wl,-Bsymbolic
|
|
|
|
## Commands to make a shared library
|
|
SHLIB.c= $(CC) $(CFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS) -Wl,--enable-auto-import -Wl,--out-implib=$(dir $@)lib$(notdir $(@:$(SO_TARGET_VERSION_MAJOR).$(SO)=))$(IMPORT_LIB_EXT)#M#
|
|
SHLIB.cc= $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS) -Wl,--enable-auto-import -Wl,--out-implib=$(dir $@)lib$(notdir $(@:$(SO_TARGET_VERSION_MAJOR).$(SO)=))$(IMPORT_LIB_EXT)#M#
|
|
|
|
## Compiler switch to embed a runtime search path
|
|
LD_RPATH=
|
|
LD_RPATH_PRE= -Wl,-rpath,
|
|
|
|
## Compiler switch to embed a library name
|
|
LD_SONAME =
|
|
|
|
## Shared object suffix
|
|
SO = dll
|
|
## Non-shared intermediate object suffix
|
|
STATIC_O = ao
|
|
|
|
ifeq ($(ENABLE_SHARED),YES)
|
|
SO_TARGET_VERSION_SUFFIX = $(SO_TARGET_VERSION_MAJOR)
|
|
else
|
|
SO_TARGET_VERSION_SUFFIX =
|
|
endif
|
|
|
|
# Static library prefix and file extension
|
|
LIBSICU = $(LIBPREFIX)$(STATIC_PREFIX)$(ICUPREFIX)
|
|
A = a
|
|
|
|
## An import library is needed for z/OS and MSVC
|
|
IMPORT_LIB_EXT = .dll.a
|
|
|
|
LIBPREFIX=lib
|
|
|
|
# Change the stubnames so that poorly working FAT disks and installation programs can work.
|
|
# This is also for backwards compatibility.
|
|
DATA_STUBNAME = dt
|
|
I18N_STUBNAME = in
|
|
LIBICU = $(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)
|
|
|
|
#SH### copied from Makefile.inc
|
|
#SH## for icu-config to test with
|
|
#SH#ICULIBS_COMMON_LIB_NAME="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}${ICULIBSUFFIX_VERSION}.${SO}"
|
|
#SH#ICULIBS_COMMON_LIB_NAME_A="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}.${A}"
|
|
|
|
#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
|
#SH#ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
|
#SH#
|
|
#SH## ICULIBS is the set of libraries your application should link
|
|
#SH## with usually. Many applications will want to add ${ICULIBS_I18N} as well.
|
|
#SH#ICULIBS="${ICULIBS_BASE} ${ICULIBS_I18N} ${ICULIBS_COMMON} ${ICULIBS_DATA} "
|
|
|
|
# Note: The #M# is used to delete lines for icu-config
|
|
MSYS_VERSION ?= $(if $(findstring Msys, $(shell uname -o)),$(word 1, $(subst ., ,$(shell uname -r))),0)#M#
|
|
$(info Detected MSYS version: $(MSYS_VERSION))
|
|
|
|
ifeq ($(MSYS_VERSION),$(filter $(MSYS_VERSION),0 1))
|
|
# Older versions of MSYS don't have cygpath by default. #M#
|
|
|
|
# Current full path directory. #M#
|
|
#CURR_FULL_DIR=$(shell pwd -W)#M# for MSYS
|
|
CURR_FULL_DIR?=$(subst \,/,$(shell cmd /c cd))#M# for Cygwin shell
|
|
|
|
# Current full path directory for use in source code in a -D compiler option. #M#
|
|
#CURR_SRCCODE_FULL_DIR=$(subst /,\\\\,$(shell pwd -W))#M# for MSYS
|
|
CURR_SRCCODE_FULL_DIR=$(subst \,/,$(shell cmd /c cd))#M# for Cygwin shell
|
|
else
|
|
# MSYS2 and up have cygpath by default #M#
|
|
|
|
# Current full path directory. #M#
|
|
CURR_FULL_DIR?=$(shell cygpath . -a -m)#M#
|
|
|
|
# Current full path directory for use in source code in a -D compiler option. #M#
|
|
CURR_SRCCODE_FULL_DIR=$(shell cygpath . -a -m)#M#
|
|
endif
|
|
|
|
## Compilation rules
|
|
%.$(STATIC_O): $(srcdir)/%.c
|
|
$(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $<
|
|
%.o: $(srcdir)/%.c
|
|
$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $<
|
|
|
|
%.$(STATIC_O): $(srcdir)/%.cpp
|
|
$(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $<
|
|
%.o: $(srcdir)/%.cpp
|
|
$(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $<
|
|
|
|
|
|
## Dependency rules
|
|
%.d: $(srcdir)/%.c
|
|
@echo "generating dependency information for $<"
|
|
@echo -n "$@ " > $@
|
|
@$(GEN_DEPS.c) $< >> $@ || (rm -f $@ && FALSE)
|
|
|
|
%.d: $(srcdir)/%.cpp
|
|
@echo "generating dependency information for $<"
|
|
@echo -n "$@ " > $@
|
|
@$(GEN_DEPS.cc) $< >> $@ || (rm -f $@ && FALSE)
|
|
|
|
## Versioned target for a shared library.
|
|
## Since symbolic links don't work the same way on Windows,
|
|
## we only use the version major number.
|
|
#FINAL_SO_TARGET=$(basename $(SO_TARGET))$(SO_TARGET_VERSION).$(SO)
|
|
FINAL_SO_TARGET=$(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO)
|
|
MIDDLE_SO_TARGET=$(FINAL_SO_TARGET)
|
|
|
|
FINAL_IMPORT_LIB = $(dir $(SO_TARGET))lib$(notdir $(basename $(SO_TARGET)))$(IMPORT_LIB_EXT)#M#
|
|
IMPORT_LIB = $(FINAL_IMPORT_LIB)#M#
|
|
MIDDLE_IMPORT_LIB = $(FINAL_IMPORT_LIB)#M#
|
|
|
|
## Special pkgdata information that is needed
|
|
PKGDATA_VERSIONING = -r $(SO_TARGET_VERSION_MAJOR)
|
|
#ICUPKGDATA_INSTALL_DIR = $(shell cygpath -dma $(DESTDIR)$(ICUPKGDATA_DIR))#M#
|
|
#ICUPKGDATA_INSTALL_LIBDIR = $(shell cygpath -dma $(DESTDIR)$(libdir))#M#
|
|
|
|
## Versioned libraries rules
|
|
#%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
|
|
# $(RM) $@ && cp ${<F} $@
|
|
%.$(SO): %$(SO_TARGET_VERSION_MAJOR).$(SO)
|
|
@echo -n
|
|
|
|
# Environment variable to set a runtime search path
|
|
LDLIBRARYPATH_ENVVAR = PATH
|
|
|
|
# The type of assembly to write for generating an object file
|
|
GENCCODE_ASSEMBLY=-a gcc-cygwin
|
|
|
|
# These are needed to allow the pkgdata GNU make files to work
|
|
PKGDATA_DEFS = -DU_MAKE=\"$(MAKE)\"
|
|
|
|
## End Cygwin/MinGW specific setup
|
|
|