1## -*-makefile-*-
2## Cygwin64/MinGW64 specific setup
3## Copyright (c) 2012-2013, International Business Machines Corporation and
4## others. All Rights Reserved.
5
6# TODO: Finish the rest of this port. This platform port is incomplete.
7
8# This file is similar to mh-mingw
9# Any changes made here may also need to be made in mh-mingw
10
11# We install sbin tools into the same bin directory because
12# pkgdata needs some of the tools in sbin, and we can't always depend on
13# icu-config working on Windows.
14sbindir=$(bindir)
15
16## Commands to generate dependency files
17GEN_DEPS.c=	$(CC) -E -MM $(DEFS) $(CPPFLAGS)
18GEN_DEPS.cc=	$(CXX) -E -MM $(DEFS) $(CPPFLAGS)
19
20## Flags to create/use a static library
21ifneq ($(ENABLE_SHARED),YES)
22## Make sure that the static libraries can be built and used
23CPPFLAGS += -DU_STATIC_IMPLEMENTATION
24else
25## Make sure that the static libraries can be built
26STATICCPPFLAGS = -DU_STATIC_IMPLEMENTATION
27endif
28
29## Flags for position independent code
30SHAREDLIBCFLAGS = 
31SHAREDLIBCXXFLAGS = 
32SHAREDLIBCPPFLAGS = -DPIC
33
34## Additional flags when building libraries and with threads
35THREADSCFLAGS = -mthreads
36THREADSCXXFLAGS = -mthreads
37LIBCPPFLAGS =
38
39# Commands to link. Link with C++ in case static libraries are used.
40LINK.c=       $(CXX) $(CXXFLAGS) $(LDFLAGS)
41#LINK.cc=      $(CXX) $(CXXFLAGS) $(LDFLAGS)
42
43## Shared library options
44LD_SOOPTIONS= -Wl,-Bsymbolic
45
46## Commands to make a shared library
47SHLIB.c=	$(CC) $(CFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS) -Wl,--enable-auto-import -Wl,--out-implib=$(dir $@)$(notdir $(@:$(SO_TARGET_VERSION_MAJOR).$(SO)=))$(IMPORT_LIB_EXT)#M#
48SHLIB.cc=	$(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS) -Wl,--enable-auto-import -Wl,--out-implib=$(dir $@)$(notdir $(@:$(SO_TARGET_VERSION_MAJOR).$(SO)=))$(IMPORT_LIB_EXT)#M#
49
50## Compiler switch to embed a runtime search path
51LD_RPATH=	
52LD_RPATH_PRE=	-Wl,-rpath,
53
54## Compiler switch to embed a library name
55LD_SONAME = 
56
57## Shared object suffix
58SO = dll
59## Non-shared intermediate object suffix
60STATIC_O = ao
61
62ifeq ($(ENABLE_SHARED),YES)
63SO_TARGET_VERSION_SUFFIX = $(SO_TARGET_VERSION_MAJOR)
64else
65SO_TARGET_VERSION_SUFFIX = 
66endif
67
68# Static library prefix and file extension
69LIBSICU = lib$(LIBPREFIX)$(STATIC_PREFIX)$(ICUPREFIX)
70A = a
71
72## An import library is needed for z/OS and MSVC
73IMPORT_LIB_EXT = .dll.a
74
75LIBPREFIX=
76
77# Change the stubnames so that poorly working FAT disks and installation programs can work.
78# This is also for backwards compatibility.
79DATA_STUBNAME = dt
80I18N_STUBNAME = in
81LIBICU = $(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)
82
83# The #M# is used to delete lines for icu-config
84# Current full path directory.
85#CURR_FULL_DIR=$(shell pwd -W)#M# for MSYS
86CURR_FULL_DIR?=$(subst \,/,$(shell cmd /c cd))#M# for Cygwin shell
87# Current full path directory for use in source code in a -D compiler option.
88#CURR_SRCCODE_FULL_DIR=$(subst /,\\\\,$(shell pwd -W))#M# for MSYS
89CURR_SRCCODE_FULL_DIR=$(subst \,/,$(shell cmd /c cd))#M# for Cygwin shell
90
91## Compilation rules
92%.$(STATIC_O): $(srcdir)/%.c
93	$(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $<
94%.o: $(srcdir)/%.c
95	$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $<
96
97%.$(STATIC_O): $(srcdir)/%.cpp
98	$(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $<
99%.o: $(srcdir)/%.cpp
100	$(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $<
101
102
103## Dependency rules
104%.d: $(srcdir)/%.c
105	@echo "generating dependency information for $<"
106	@echo -n "$@ " > $@
107	@$(GEN_DEPS.c) $< >> $@ || (rm -f $@ && FALSE)
108
109%.d: $(srcdir)/%.cpp
110	@echo "generating dependency information for $<"
111	@echo -n "$@ " > $@
112	@$(GEN_DEPS.cc) $< >> $@ || (rm -f $@ && FALSE)
113
114## Versioned target for a shared library.
115## Since symbolic links don't work the same way on Windows,
116## we only use the version major number.
117#FINAL_SO_TARGET=$(basename $(SO_TARGET))$(SO_TARGET_VERSION).$(SO)
118FINAL_SO_TARGET=$(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO)
119MIDDLE_SO_TARGET=$(FINAL_SO_TARGET)
120
121FINAL_IMPORT_LIB = $(dir $(SO_TARGET))$(notdir $(basename $(SO_TARGET)))$(IMPORT_LIB_EXT)#M#
122IMPORT_LIB = $(FINAL_IMPORT_LIB)#M#
123MIDDLE_IMPORT_LIB = $(FINAL_IMPORT_LIB)#M#
124
125## Special pkgdata information that is needed
126PKGDATA_VERSIONING = -r $(SO_TARGET_VERSION_MAJOR)
127#ICUPKGDATA_INSTALL_DIR = $(shell cygpath -dma $(DESTDIR)$(ICUPKGDATA_DIR))#M#
128#ICUPKGDATA_INSTALL_LIBDIR = $(shell cygpath -dma $(DESTDIR)$(libdir))#M#
129
130## Versioned libraries rules
131#%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
132#	$(RM) $@ && cp ${<F} $@
133%.$(SO): %$(SO_TARGET_VERSION_MAJOR).$(SO)
134	@echo -n
135
136# Environment variable to set a runtime search path
137LDLIBRARYPATH_ENVVAR = PATH
138
139# The type of assembly to write for generating an object file
140GENCCODE_ASSEMBLY=-a gcc-mingw64
141
142# These are needed to allow the pkgdata GNU make files to work
143PKGDATA_DEFS = -DU_MAKE=\"$(MAKE)\"
144
145## End Cygwin64/MinGW64 specific setup
146
147