blob: 77df3a068628f4153570e08b336cd0059fd9afa7 [file] [log] [blame]
David Ghandehari9e5b5872016-07-28 09:50:04 -07001#!/bin/sh
Kaido Kert04cd6fa2021-04-16 11:38:35 -07002# Copyright (C) 2016 and later: Unicode, Inc. and others.
3# License & terms of use: http://www.unicode.org/copyright.html
Andrew Topc2b40892017-01-19 14:03:49 -08004# Copyright (c) 1999-2015, International Business Machines Corporation and
David Ghandehari9e5b5872016-07-28 09:50:04 -07005# others. All Rights Reserved.
6
7# runConfigureICU: This script will run the "configure" script for the appropriate platform
8# Only supported platforms are recognized
9
10me=`basename $0`
11OPTS=
12
13usage()
14{
15 ec=0$1
16 if test $ec -eq 0
17 then
18 uletter=U
19 else
20 uletter=u
21 fi
22
23 echo "${uletter}sage: $me [ -h, --help ] [ --enable-debug | --disable-release ] platform [ configurearg ... ]"
24 if test $ec -eq 0
25 then
26 cat <<EOE
27
28Options: -h, --help Print this message and exit
29 --enable-debug Enable support for debugging
30 --disable-release Disable presetting optimization flags
31
Andrew Topc2b40892017-01-19 14:03:49 -080032If you want to add custom CFLAGS or CXXFLAGS or similar, provide them _before_
33the runConfigureICU command:
34
35 CXXFLAGS=xyz path/to/runConfigureICU --enable-debug ...
36
David Ghandehari9e5b5872016-07-28 09:50:04 -070037The following names can be supplied as the argument for platform:
38
39 AIX Use the IBM Visual Age xlc_r/xlC_r compilers on AIX
40 AIX/GCC Use the GNU gcc/g++ compilers on AIX
41 Cygwin Use the GNU gcc/g++ compilers on Cygwin
42 Cygwin/MSVC Use the Microsoft Visual C++ compiler on Cygwin
43 Cygwin/MSVC2005 Use the Microsoft Visual C++ 2005 compiler on Cygwin
44 Cygwin/ICL Use the Intel C++ compiler on Cygwin
Andrew Topc2b40892017-01-19 14:03:49 -080045 FreeBSD Use the clang/clang++ or GNU gcc/g++ compilers on FreeBSD
David Ghandehari9e5b5872016-07-28 09:50:04 -070046 HP-UX/ACC Use the HP ANSI C/Advanced C++ compilers on HP-UX 11
47 IBMi Use the iCC compilers on IBM i, i5/OS, OS/400
Andrew Topc2b40892017-01-19 14:03:49 -080048 Linux Use the clang/clang++ or GNU gcc/g++ compilers on Linux
49 Linux/gcc Use the GNU gcc/g++ compilers on Linux
David Ghandehari9e5b5872016-07-28 09:50:04 -070050 Linux/ECC Use the Intel ECC compiler on Linux
51 Linux/ICC Use the Intel ICC compiler on Linux
52 Linux/VA Use the IBM Visual Age compiler on Power PC Linux
Andrew Topc2b40892017-01-19 14:03:49 -080053 MacOSX Use the default compilers on MacOS X (Darwin)
54 MacOSX/GCC Use the GNU gcc/g++ compilers on MacOSX (Darwin)
55 MinGW Use the GNU gcc/g++ compilers on MinGW
56 MSYS/MSVC Use the Microsoft Visual C++ computer on MSYS
David Ghandehari9e5b5872016-07-28 09:50:04 -070057 QNX Use the QNX QCC compiler on QNX/Neutrino
58 Solaris Use the Sun cc/CC compilers on Solaris
59 Solaris/GCC Use the GNU gcc/g++ compilers on Solaris
60 SolarisX86 Use the Sun cc/CC compilers on Solaris x86
61 TRU64V5.1/CXX Use the Compaq cxx compiler on Tru64 (OSF)
62 zOS Use the IBM cxx compiler on z/OS (os/390)
63 zOSV1R2 Use the IBM cxx compiler for z/OS 1.2
64EOE
65 fi
66
67 exit $ec
68}
69
70# Parse arguments
71
72platform=
73debug=0
74release=1
75
76while test $# -ne 0
77do
78 case "$1" in
79 -h|--help)
80 usage 0
81 ;;
82 --enable-debug)
83 debug=1
84 OPTS="$OPTS --enable-debug"
85 ;;
86 --disable-release)
87 release=0
88 OPTS="$OPTS --disable-release"
89 ;;
90 *)
91 platform="$1"
92 shift
93 break
94 ;;
95 esac
96 shift
97done
98
99if test x$platform = x
100then
101 usage 1
102fi
103
104# Go.
105
106rm -f config.cache
107rm -f config.log
108rm -f config.status
109
110DEBUG_CFLAGS='-g'
111DEBUG_CXXFLAGS='-g'
112
113if test x$configure = x
114then
115 if test -f ./configure
116 then
117 configuredir=.
118 else
119 configuredir=`echo $0 | sed 's,[^/]*$,,'`
120 if test x$configuredir = x$0
121 then
122 configuredir=.
123 fi
124 fi
125
126 if test x$configuredir = x
127 then
128 configuredir=.
129 fi
130
131 configure=$configuredir/configure
132fi
133
134case $platform in
135 AIX)
136 THE_OS=AIX
137 THE_COMP="xlC_r"
138 CC=`which xlc_r`; export CC
139 if [ ! -x $CC ]; then
140 echo "ERROR: xlc_r was not found, please check the PATH to make sure it is correct."; exit 1
141 fi
142 CXX=`which xlC_r`; export CXX
143 if [ ! -x $CXX ]; then
144 echo "ERROR: xlC_r was not found, please check the PATH to make sure it is correct."; exit 1
145 fi
146 RELEASE_CFLAGS="-O2 -qmaxmem=-1"
147 RELEASE_CXXFLAGS="-O2 -qmaxmem=-1"
148 ;;
149 AIX/GCC)
150 THE_OS=AIX
151 THE_COMP="the GNU C++"
152 CC=gcc; export CC
153 CXX=g++; export CXX
154 DEBUG_CFLAGS='-g -O0'
Andrew Topc2b40892017-01-19 14:03:49 -0800155 DEBUG_CXXFLAGS='-g -O0'
David Ghandehari9e5b5872016-07-28 09:50:04 -0700156 ;;
157 Solaris)
158 THE_OS=SOLARIS
159 THE_COMP="Sun's CC"
160 CC=`which cc`; export CC
161 CXX=`which CC`; export CXX
Andrew Topc2b40892017-01-19 14:03:49 -0800162 RELEASE_CFLAGS="-xO1 -xlibmil"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700163 RELEASE_CXXFLAGS="-O4 -xlibmil"
164 ;;
165 Solaris/GCC)
166 THE_OS=SOLARIS
167 THE_COMP="the GNU C++"
168 CC=gcc; export CC
169 CXX=g++; export CXX
170 RELEASE_CFLAGS=-O1
Andrew Topc2b40892017-01-19 14:03:49 -0800171 RELEASE_CXXFLAGS=-O2
David Ghandehari9e5b5872016-07-28 09:50:04 -0700172 ;;
173 SolarisX86)
174 THE_OS="SOLARIS X86"
175 THE_COMP="Sun's CC"
176 CC=`which cc`; export CC
177 CXX=`which CC`; export CXX
Andrew Topc2b40892017-01-19 14:03:49 -0800178 LDFLAGS="${LDFLAGS} -lCrun";export LDFLAGS
David Ghandehari9e5b5872016-07-28 09:50:04 -0700179 RELEASE_CFLAGS=-xO3
180 RELEASE_CXXFLAGS=-O3
181 ;;
182 HP-UX/ACC)
183 THE_OS="HP-UX 11"
184 THE_COMP="aCC"
185 CC=cc; export CC
186 CXX=aCC; export CXX
187 RELEASE_CFLAGS='+O2 +Ofltacc'
188 RELEASE_CXXFLAGS='+O2 +Ofltacc'
189 ;;
190 IBMi)
191 THE_OS="IBM i"
192 THE_COMP="the iCC C++"
Andrew Topc2b40892017-01-19 14:03:49 -0800193 CC=icc; export CC
194 CXX=icc; export CXX
David Ghandehari9e5b5872016-07-28 09:50:04 -0700195 CPP="$CC -c -qpponly"; export CPP
Andrew Topc2b40892017-01-19 14:03:49 -0800196 MAKE=gmake; export MAKE
197 U_MAKE=gmake; export U_MAKE
198 # gmake is a .pgm and may not be on the path. Don't use a full path, just use gmake.
199 ac_cv_path_U_MAKE=gmake; export ac_cv_path_U_MAKE
David Ghandehari9e5b5872016-07-28 09:50:04 -0700200 RELEASE_CFLAGS='-O4'
201 RELEASE_CXXFLAGS='-O4'
202 ;;
203 Linux/ECC)
204 THE_OS="Linux"
205 THE_COMP="Intel ECC 7.1"
206 CC=ecc; export CC
207 CXX=ecpc; export CXX
208 RELEASE_CFLAGS='-O2'
209 RELEASE_CXXFLAGS='-O2'
210 ;;
211 Linux/ICC)
212 THE_OS="Linux"
213 CC=`which icc`; export CC
214 CXX=`which icpc`; export CXX
215 ICC_VER=`${CC} -v 2>&1`
216 RELEASE_CFLAGS='-O'
217 RELEASE_CXXFLAGS='-O'
218 export CFLAGS="-fp-model precise"
219 export CXXFLAGS="-fp-model precise"
220 if [ "${ICC_VER}" = "Version 9.0 " ]; then
221 RELEASE_CFLAGS=''
222 RELEASE_CXXFLAGS=''
223 export CFLAGS="${CFLAGS} -O0"
224 export CXXFLAGS="${CXXFLAGS} -O0"
225 echo "ICC 9.0 does not work with optimization- disabling optimizations"
226 fi
227 THE_COMP="Intel ${ICC_VER}"
228 ;;
229 Linux/VA)
230 THE_OS="Linux"
231 THE_COMP="IBM Visual Age C++ Compiler"
232 CC=`which xlc_r`; export CC
233 CXX=`which xlC_r`; export CXX
234 RELEASE_CFLAGS="-O2 -qmaxmem=-1"
235 RELEASE_CXXFLAGS="-O2 -qmaxmem=-1"
236 ;;
Andrew Topc2b40892017-01-19 14:03:49 -0800237 Linux/gcc)
David Ghandehari9e5b5872016-07-28 09:50:04 -0700238 THE_OS="Linux"
239 THE_COMP="the GNU C++"
240 CC=gcc; export CC
241 CXX=g++; export CXX
Andrew Topc2b40892017-01-19 14:03:49 -0800242 RELEASE_CFLAGS='-O3'
243 RELEASE_CXXFLAGS='-O3'
244 DEBUG_CFLAGS='-g'
245 DEBUG_CXXFLAGS='-g'
246 ;;
247 Linux*)
248 THE_OS="Linux"
249 THE_COMP="the clang or else GNU C++"
250 RELEASE_CFLAGS='-O3'
251 RELEASE_CXXFLAGS='-O3'
252 DEBUG_CFLAGS='-g'
253 DEBUG_CXXFLAGS='-g'
David Ghandehari9e5b5872016-07-28 09:50:04 -0700254 ;;
255 Cygwin)
256 THE_OS="Cygwin"
257 THE_COMP="the GNU C++"
258 RELEASE_CFLAGS='-O3'
259 RELEASE_CXXFLAGS='-O3'
260 ;;
261 Cygwin/MSVC)
262 THE_OS="Windows with Cygwin"
263 THE_COMP="Microsoft Visual C++"
264 CC=cl; export CC
265 CXX=cl; export CXX
Andrew Topc2b40892017-01-19 14:03:49 -0800266 RELEASE_CFLAGS='-Gy -MD'
267 RELEASE_CXXFLAGS='-Gy -MD'
Kaido Kert04cd6fa2021-04-16 11:38:35 -0700268 DEBUG_CFLAGS='-FS -Zi -MDd'
269 DEBUG_CXXFLAGS='-FS -Zi -MDd'
Andrew Topc2b40892017-01-19 14:03:49 -0800270 DEBUG_LDFLAGS='-DEBUG'
David Ghandehari9e5b5872016-07-28 09:50:04 -0700271 ;;
272 Cygwin/MSVC2005)
273 THE_OS="Windows with Cygwin"
274 THE_COMP="Microsoft Visual C++ 2005"
275 CC=cl; export CC
276 CXX=cl; export CXX
277 RELEASE_CFLAGS='/Gy /MD'
278 RELEASE_CXXFLAGS='/Gy /MD'
279 DEBUG_CFLAGS='/Zi /MDd'
280 DEBUG_CXXFLAGS='/Zi /MDd'
281 DEBUG_LDFLAGS='/DEBUG'
282 ;;
283 Cygwin/ICL)
284 THE_OS="Windows with Cygwin"
285 THE_COMP="Intel C++"
286 CC=icl; export CC
287 CXX=icl; export CXX
288 # The Intel compiler has optimization bugs. So we disable optimization.
289 RELEASE_CFLAGS='/Od'
290 RELEASE_CXXFLAGS='/Od'
291 DEBUG_CFLAGS='/Zi'
292 DEBUG_CXXFLAGS='/Zi'
293 DEBUG_LDFLAGS='/DEBUG'
294 ;;
295 MacOSX)
296 THE_OS="MacOS X (Darwin)"
Andrew Topc2b40892017-01-19 14:03:49 -0800297 THE_COMP="the default"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700298 RELEASE_CFLAGS='-O2'
299 RELEASE_CXXFLAGS='-O2'
300 DEBUG_CFLAGS='-g -O0'
301 DEBUG_CXXFLAGS='-g -O0'
302 ;;
Andrew Topc2b40892017-01-19 14:03:49 -0800303 MacOSX/GCC)
304 THE_OS="MacOS X (Darwin)"
305 THE_COMP="the GNU C++"
306 RELEASE_CFLAGS='-O2'
307 RELEASE_CXXFLAGS='-O2'
308 DEBUG_CFLAGS='-g -O0'
309 DEBUG_CXXFLAGS='-g -O0'
310 CC=gcc; export CC
311 CXX=g++; export CXX
312 ;;
313 MinGW)
314 THE_OS="MinGW"
315 THE_COMP="the GNU C++"
316 RELEASE_CFLAGS='-O3'
317 RELEASE_CXXFLAGS='-O3'
Andrew Topc2b40892017-01-19 14:03:49 -0800318 export CXXFLAGS
319 ;;
320 MSYS/MSVC)
321 THE_OS="MSYS"
322 THE_COMP="Microsoft Visual C++"
323 CC=cl; export CC
324 CXX=cl; export CXX
325 RELEASE_CFLAGS='-Gy -MD'
326 RELEASE_CXXFLAGS='-Gy -MD'
Kaido Kert04cd6fa2021-04-16 11:38:35 -0700327 DEBUG_CFLAGS='-FS -Zi -MDd'
328 DEBUG_CXXFLAGS='-FS -Zi -MDd'
Andrew Topc2b40892017-01-19 14:03:49 -0800329 DEBUG_LDFLAGS='-DEBUG'
330 ;;
David Ghandehari9e5b5872016-07-28 09:50:04 -0700331 *BSD)
332 THE_OS="BSD"
333 THE_COMP="the GNU C++"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700334 DEBUG_CFLAGS='-g -O0'
Andrew Topc2b40892017-01-19 14:03:49 -0800335 DEBUG_CXXFLAGS='-g -O0'
David Ghandehari9e5b5872016-07-28 09:50:04 -0700336 ;;
337 TRU64V5.1/CXX)
338 THE_OS="OSF1"
339 THE_COMP="Compaq cxx"
340 CC=cc; export CC
341 CXX=cxx; export CXX
342 ;;
343 QNX)
344 THE_OS="QNX"
345 THE_COMP="QNX cc"
346 CC=qcc; export CC
347 CXX=QCC; export CXX
348 ;;
349 zOS)
350 THE_OS="z/OS (OS/390)"
351 THE_COMP="z/OS C/C++"
Andrew Topc2b40892017-01-19 14:03:49 -0800352 CC=xlc; export CC
353 CXX=xlC; export CXX
354 RELEASE_CFLAGS="-O2 -Wc,'inline(AUTO,NOREPORT,1000,8000)'"
355 RELEASE_CXXFLAGS="-O2 -Wc,'inline(AUTO,NOREPORT,1000,8000)'"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700356 ;;
357 zOSV1R2)
358 THE_OS="z/OS 1.2"
359 THE_COMP="z/OS 1.2 C/C++"
360 CC=cc; export CC
361 CXX=cxx; export CXX
362 export COMPILE_LINK_ENVVAR='_CXX_CICC_VER}=0x41020000 _C89_CVERSION=0x41020000 _CC_CVERSION=0x41020000 _CXX_PVERSION=0x41020000 _C89_PVERSION=0x41020000 _CC_PVERSION=0x41020000'
363 export _CXX_CVERSION=0x41020000 _C89_CVERSION=0x41020000 _CC_CVERSION=0x41020000 _CXX_PVERSION=0x41020000 _C89_PVERSION=0x41020000 _CC_PVERSION=0x41020000
364 export LDFLAGS="-Wl,'compat=pm3'"
365 export CFLAGS="-Wc,'target(zOSV1R2)'"
366 export CXXFLAGS="-Wc,'target(zOSV1R2)'"
367 RELEASE_CFLAGS="-2 -Wc,'inline(auto,noreport,500,4000)'"
368 RELEASE_CXXFLAGS="-2 -Wc,'inline(auto,noreport,500,4000)'"
369 ;;
370 *)
371 >&2 echo "$me: unrecognized platform \"$platform\" (use --help for help)"
372 exit 1;;
373esac
374
375
376# Tweak flags
377
378if test $release -eq 1
379then
380 if test "$RELEASE_CFLAGS" = ""
381 then
382 case $CC in
383 gcc|*/gcc|*-gcc-*|*/*-gcc-*)
384 RELEASE_CFLAGS=-O3
385 ;;
386 esac
387 fi
388 if test "$RELEASE_CFLAGS" != ""
389 then
Andrew Topc2b40892017-01-19 14:03:49 -0800390 CFLAGS="$RELEASE_CFLAGS $CFLAGS"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700391 fi
392 if test "$RELEASE_CXXFLAGS" = ""
393 then
394 case $CXX in
395 g++|*/g++|*-g++-*|*/*-g++-*)
396 RELEASE_CXXFLAGS=-O3
397 ;;
398 esac
399 fi
400 if test "$RELEASE_CXXFLAGS" != ""
401 then
Andrew Topc2b40892017-01-19 14:03:49 -0800402 CXXFLAGS="$RELEASE_CXXFLAGS $CXXFLAGS"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700403 fi
404 if test "$RELEASE_LDFLAGS" != ""
405 then
Andrew Topc2b40892017-01-19 14:03:49 -0800406 LDFLAGS="$RELEASE_LDFLAGS $LDFLAGS"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700407 fi
408fi
409
410if test $debug -eq 1
411then
412 if test "$DEBUG_CFLAGS" != ""
413 then
Andrew Topc2b40892017-01-19 14:03:49 -0800414 CFLAGS="$DEBUG_CFLAGS $CFLAGS"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700415 fi
416 if test "$DEBUG_CXXFLAGS" != ""
417 then
Andrew Topc2b40892017-01-19 14:03:49 -0800418 CXXFLAGS="$DEBUG_CXXFLAGS $CXXFLAGS"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700419 fi
420 if test "$DEBUG_LDFLAGS" != ""
421 then
Andrew Topc2b40892017-01-19 14:03:49 -0800422 LDFLAGS="$DEBUG_LDFLAGS $LDFLAGS"
David Ghandehari9e5b5872016-07-28 09:50:04 -0700423 fi
424fi
425
426export CFLAGS
427export CXXFLAGS
428export LDFLAGS
429
430# Run configure
431
432echo "export CPP=$CPP CC=$CC CXX=$CXX CPPFLAGS=$CPPFLAGS CFLAGS=$CFLAGS CXXFLAGS=$CXXFLAGS LDFLAGS=$LDFLAGS MAKE=$MAKE"
433echo "Running ./configure $OPTS $@ for $THE_OS using $THE_COMP compiler"
434echo
435if $configure $OPTS $@
436then
437 echo
438 echo If the result of the above commands looks okay to you, go to the directory
439 echo source in the ICU distribution to build ICU. Please remember that ICU needs
440 echo GNU make to build properly...
441else
442 echo $0: ./configure failed
443 exit 1
444fi