summaryrefslogtreecommitdiffstats
path: root/intl/icu/source/config/mh-mingw
blob: 30f6e5be81a8b65f32037d263d60a0d6dfb5661c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
## -*-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

# 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

# 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 = $(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)"
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-cygwin

# These are needed to allow the pkgdata GNU make files to work
PKGDATA_DEFS = -DU_MAKE=\"$(MAKE)\"

## End Cygwin/MinGW specific setup