1 # -*- mode: makefile -*-
3 # Makefile containing platform dependencies for ROOT based projects.
5 # Copyright (c) 2000 Rene Brun and Fons Rademakers
7 # Author: Fons Rademakers, 29/2/2000
9 ARCH := $(shell root-config --arch)
10 PLATFORM := $(shell root-config --platform)
17 OutPutOpt = -o # keep whitespace after "-o"
19 ROOTCFLAGS := $(shell root-config --cflags)
20 ROOTLDFLAGS := $(shell root-config --ldflags)
21 ROOTLIBS := $(shell root-config --libs)
22 ROOTGLIBS := $(shell root-config --glibs)
23 HASTHREAD := $(shell root-config --has-thread)
25 ifeq ($(ARCH),hpuxacc)
34 ifeq ($(ARCH),hpuxia64acc)
35 # HP-UX 11i 1.5 (IA-64) with aCC
37 CXXFLAGS = +DD64 -O +Z
43 ifeq ($(ARCH),hpuxegcs)
49 SOFLAGS = -fPIC -shared
52 ifeq ($(ARCH),hurddeb)
55 CXXFLAGS = -O2 -Wall -fPIC
68 ROOTLIBS := $(shell root-config --nonew --libs)
69 ROOTGLIBS := $(shell root-config --nonew --glibs)
79 ROOTLIBS := $(shell root-config --nonew --libs)
80 ROOTGLIBS := $(shell root-config --nonew --glibs)
83 ifeq ($(ARCH),aixegcs)
92 ifeq ($(ARCH),solaris)
94 CXX = /opt/SUNWspro/bin/CC
96 LD = /opt/SUNWspro/bin/CC
101 ifeq ($(ARCH),solarisCC5)
110 ifeq ($(ARCH),solarisgcc)
119 ifeq ($(ARCH),solariskcc)
121 CXX = KCC --one_instantiation_per_object
128 ifeq ($(ARCH),solarisx86)
129 # Solaris CC on Intel
139 CXX = CC -n32 -I/usr/include/CC.sgi
141 LD = CC -n32 -LANG:std -I/usr/include/CC.sgi
146 ifeq ($(ARCH),sgicc64)
148 CXX = CC -64 -I/usr/include/CC.sgi
150 LD = CC -64 -LANG:std -I/usr/include/CC.sgi
155 ifeq ($(ARCH),sgiegcs)
158 CXXFLAGS = -O -Wall -fPIC
160 LDFLAGS = -O -Wl,-u,__builtin_new -Wl,-u,__builtin_delete -Wl,-u,__nw__FUiPv
164 ifeq ($(ARCH),sgin32egcs)
165 # SGI 6.x with EGCS for n32 ABI
167 CXXFLAGS = -O -Wall -fPIC
169 LDFLAGS = -O -L/usr/lib32 -Wl,-woff,134
173 ifeq ($(ARCH),sgikcc)
175 CXX = KCC -n32 --one_instantiation_per_object
182 ifeq ($(ARCH),alphaegcs)
183 # Alpha/OSF with egcs
185 CXXFLAGS = -O2 -Wall -fPIC
188 SOFLAGS = -Wl,-expect_unresolved,* -shared
191 ifeq ($(ARCH),alphakcc)
192 # Alpha/OSF with kai compiler (not yet valid)
193 CXX = KCC --one_instantiation_per_object
197 SOFLAGS = -Wl,-expect_unresolved,* -shared
200 ifeq ($(ARCH),alphacxx6)
201 # Alpha/OSF with cxx6
206 SOFLAGS = -shared -nocxxstd -Wl,-expect_unresolved,*,-msym
209 ifeq ($(ARCH),linuxrh51)
210 # Linux with gcc 2.7.2.x
212 CXXFLAGS = -O2 -Wall -fPIC
218 ifeq ($(ARCH),linuxrh42)
219 # Linux with gcc 2.7.2.x (RedHat 4.2)
221 CXXFLAGS = -O2 -Wall -fPIC
227 ifeq ($(ARCH),linuxdeb)
228 # Linux with gcc 2.7.2.x
230 CXXFLAGS = -O1 -Wall -fPIC
236 ifeq ($(ARCH),linuxdeb2)
237 # Linux with gcc 2.7.2.x
239 CXXFLAGS = -O2 -Wall -fPIC
245 ifeq ($(ARCH),linuxdeb2ppc)
246 # Debian/Linux on the PowerPC
248 CXXFLAGS = -O2 -Wall -fPIC
254 ifeq ($(ARCH),linuxsuse6)
255 # Linux with gcc 2.7.2.x
257 CXXFLAGS = -O2 -Wall -fPIC
264 # Linux with egcs, gcc 2.9x, gcc 3.x (>= RedHat 5.2)
266 CXXFLAGS = -O -Wall -fPIC
272 ifeq ($(ARCH),linuxkcc)
273 # Linux with the KAI compiler
274 CXX = KCC --one_instantiation_per_object
275 CXXFLAGS = -O -fPIC +K0
277 LDFLAGS = -O $(shell root-config --cflags)
281 ifeq ($(ARCH),linuxicc)
282 # Linux with Intel icc compiler
283 ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
285 ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
288 CXXFLAGS = -O -fPIC -wd1476
292 ifeq ($(ICC_MAJOR),8)
293 ifneq ($(ICC_MINOR),0)
299 ifeq ($(ARCH),linuxppcegcs)
300 # MkLinux with egcs/glibc
302 CXXFLAGS = -O2 -Wall -fPIC
308 ifeq ($(ARCH),linuxia64gcc)
309 # Itanium Linux with gcc 2.9x
311 CXXFLAGS = -O2 -Wall -fPIC
317 ifeq ($(ARCH),linuxia64sgi)
318 # Itanium Linux with sgiCC
320 CXXFLAGS = -O -Wall -fPIC
326 ifeq ($(ARCH),linuxia64ecc)
327 # Itanium Linux with Intel icc (was ecc)
328 ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
330 ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
333 CXXFLAGS = -O -fPIC -wd1476
337 ifeq ($(ICC_MAJOR),8)
338 ifneq ($(ICC_MINOR),0)
344 ifeq ($(ARCH),linuxx8664gcc)
345 # AMD Opteron and Intel EM64T (64 bit mode) Linux with gcc 3.x
347 CXXFLAGS = -O2 -Wall -fPIC
353 ifeq ($(ARCH),linuxppc64gcc)
354 # PPC64 Linux with gcc 3.x
356 CXXFLAGS = -O -Wall -fPIC
362 ifeq ($(ARCH),linuxx8664icc)
363 # AMD Opteron and Intel EM64T (64 bit mode) Linux with Intel icc compiler
365 CXXFLAGS = -O -fPIC -wd1476 -wd1572
371 ifeq ($(ARCH),linuxalphaegcs)
372 # Alpha Linux with egcs
374 CXXFLAGS = -O2 -Wall -fPIC
380 ifeq ($(ARCH),linuxarm)
381 # ARM Linux with egcs
383 CXXFLAGS = -O -Wall -fPIC
389 ifeq ($(ARCH),mklinux)
392 CXXFLAGS = -O2 -Wall -fPIC
398 ifeq ($(ARCH),freebsd)
401 CXXFLAGS = -O -pipe -W -Wall -fPIC
404 SOFLAGS = -shared -Wl,-x
407 ifeq ($(ARCH),freebsd4)
410 CXXFLAGS = -O -pipe -W -Wall -fPIC
413 SOFLAGS = -shared -Wl,-x
416 ifeq ($(ARCH),openbsd)
419 CXXFLAGS = -O -pipe -W -Wall -fPIC
422 SOFLAGS = -shared -Wl,-x
425 ifeq ($(ARCH),macosx)
426 # MacOS X with cc (GNU cc 2.95.2 and gcc 3.3)
427 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
429 CXXFLAGS = -O2 -pipe -Wall -W -Woverloaded-virtual
430 LDFLAGS = -O2 -bind_at_load
431 # The SOFLAGS will be used to create the .dylib,
432 # the .so will be created separately
434 ifeq ($(MACOSX_MINOR),4)
435 UNDEFOPT = dynamic_lookup
436 LD = MACOSX_DEPLOYMENT_TARGET=10.4 c++
438 ifeq ($(MACOSX_MINOR),3)
439 UNDEFOPT = dynamic_lookup
440 LD = MACOSX_DEPLOYMENT_TARGET=10.3 c++
446 SOFLAGS = -dynamiclib -single_module -undefined $(UNDEFOPT)
449 ifeq ($(ARCH),macosx64)
450 # MacOS X >= 10.4 with gcc 64 bit mode (GNU gcc 4.*)
451 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
453 CXXFLAGS = -m64 -O2 -pipe -Wall -W -Woverloaded-virtual
454 LDFLAGS = -m64 -O2 -bind_at_load
455 # The SOFLAGS will be used to create the .dylib,
456 # the .so will be created separately
458 LD = MACOSX_DEPLOYMENT_TARGET=10.4 c++
459 SOFLAGS = -m64 -dynamiclib -single_module -undefined dynamic_lookup
462 ifeq ($(ARCH),macosxxlc)
463 # MacOS X with IBM xlC compiler
464 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
467 LDFLAGS = -O -Wl,-bind_at_load
468 # The SOFLAGS will be used to create the .dylib,
469 # the .so will be created separately
471 ifeq ($(MACOSX_MINOR),4)
472 UNDEFOPT = dynamic_lookup
473 LD = MACOSX_DEPLOYMENT_TARGET=10.4 xlC
475 ifeq ($(MACOSX_MINOR),3)
476 UNDEFOPT = dynamic_lookup
477 LD = MACOSX_DEPLOYMENT_TARGET=10.3 xlC
483 SOFLAGS = -qmkshrobj -single_module -undefined $(UNDEFOPT)
487 # Windows with the VC++ compiler
496 CXXFLAGS = $(CXXOPT) -G5 -GR -GX -MD -DWIN32 -D_WINDOWS -nologo \
497 -DVISUAL_CPLUSPLUS -D_X86_=1 -D_DLL
501 LDFLAGS = $(LDOPT) -pdb:none -nologo
504 ROOTLIBS := $(shell root-config --nonew --libs)
505 ROOTGLIBS := $(shell root-config --nonew --glibs)
506 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
509 ifeq ($(ARCH),win32old)
510 # Windows with the VC++ compiler
519 CXXFLAGS = $(CXXOPT) -G5 -GR -GX -MD -DWIN32 -D_WINDOWS -nologo \
520 -DVISUAL_CPLUSPLUS -D_X86_=1 -D_DLL
524 LDFLAGS = $(LDOPT) -pdb:none -nologo
527 ROOTLIBS := $(shell root-config --nonew --libs)
528 ROOTGLIBS := $(shell root-config --nonew --glibs)
529 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
532 ifeq ($(ARCH),win32gcc)
537 CXXFLAGS = -O -pipe -Wall -Woverloaded-virtual -I/usr/X11R6/include
539 LDFLAGS = -O -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc \
541 SOFLAGS = -shared -D_DLL -Wl,--export-all-symbols
542 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
546 $(error $(ARCH) invalid architecture)
549 CXXFLAGS += $(ROOTCFLAGS)
550 LDFLAGS += $(ROOTLDFLAGS)
551 LIBS = $(ROOTLIBS) $(SYSLIBS)
552 GLIBS = $(ROOTGLIBS) $(SYSLIBS)