195 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
## -*-makefile-*-
 | 
						|
## Copyright (C) 2016 and later: Unicode, Inc. and others.
 | 
						|
## License & terms of use: http://www.unicode.org/copyright.html
 | 
						|
## Cygwin64/MinGW64 specific setup
 | 
						|
## Copyright (c) 2012-2014, International Business Machines Corporation and
 | 
						|
## others. All Rights Reserved.
 | 
						|
 | 
						|
# TODO: Finish the rest of this port. This platform port is incomplete.
 | 
						|
 | 
						|
# On Windows we generally have the DLLs in the bin directory rather than the lib directory.
 | 
						|
# This setting moves the ICU DLLs into the bin folder for MinGW/MSYS2 when "make install" is run.
 | 
						|
# If you prefer to have the DLLs in the lib folder, then set this to NO instead.
 | 
						|
MINGW_MOVEDLLSTOBINDIR = YES
 | 
						|
 | 
						|
# This file is similar to mh-mingw
 | 
						|
# Any changes made here may also need to be made in mh-mingw
 | 
						|
 | 
						|
# 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=
 | 
						|
 | 
						|
## 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 = lib$(LIBPREFIX)$(STATIC_PREFIX)$(ICUPREFIX)
 | 
						|
A = a
 | 
						|
 | 
						|
## An import library is needed for z/OS and MSVC
 | 
						|
IMPORT_LIB_EXT = .dll.a
 | 
						|
 | 
						|
LIBPREFIX=
 | 
						|
 | 
						|
# 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)"
 | 
						|
ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)"
 | 
						|
ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)"
 | 
						|
ICULIBS_LX="-l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(LAYOUTEX_STUBNAME)$(ICULIBSUFFIX)"
 | 
						|
ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)"
 | 
						|
ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)"
 | 
						|
ICULIBS_CTESTFW="-l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(CTESTFW_STUBNAME)$(ICULIBSUFFIX)"
 | 
						|
ICULIBS_TOOLUTIL="-l$(ICUPREFIX)tu$(ICULIBSUFFIX)"
 | 
						|
#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)
 | 
						|
 | 
						|
## 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-mingw64
 | 
						|
 | 
						|
# These are needed to allow the pkgdata GNU make files to work
 | 
						|
PKGDATA_DEFS = -DU_MAKE=\"$(MAKE)\"
 | 
						|
 | 
						|
## End Cygwin64/MinGW64 specific setup
 | 
						|
 |