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 ROOTCONFIG := root-config
11 ARCH := $(shell $(ROOTCONFIG) --arch)
12 PLATFORM := $(shell $(ROOTCONFIG) --platform)
19 OutPutOpt = -o # keep whitespace after "-o"
21 ROOTCFLAGS := $(shell $(ROOTCONFIG) --cflags)
22 ROOTLDFLAGS := $(shell $(ROOTCONFIG) --ldflags)
23 ROOTLIBS := $(shell $(ROOTCONFIG) --libs)
24 ROOTGLIBS := $(shell $(ROOTCONFIG) --glibs)
25 HASTHREAD := $(shell $(ROOTCONFIG) --has-thread)
28 # Linux with egcs, gcc 2.9x, gcc 3.x (>= RedHat 5.2)
31 #CXXFLAGS = -O9 -Wall -fPIC
33 #CXXFLAGS = -O9 -Wall -fPIC -g
35 CXXFLAGS = -O9 -g -Wall
43 ifeq ($(ARCH),hpuxacc)
52 ifeq ($(ARCH),hpuxia64acc)
53 # HP-UX 11i 1.5 (IA-64) with aCC
55 CXXFLAGS = +DD64 -O +Z
61 ifeq ($(ARCH),hpuxgcc)
67 SOFLAGS = -fPIC -shared
70 ifeq ($(ARCH),hurddeb)
73 CXXFLAGS = -O2 -Wall -fPIC
107 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
110 ifeq ($(ARCH),solaris)
112 CXX = /opt/SUNWspro/bin/CC
114 LD = /opt/SUNWspro/bin/CC
119 ifeq ($(ARCH),solarisCC5)
128 ifeq ($(ARCH),solarisgcc)
137 ifeq ($(ARCH),solariskcc)
139 CXX = KCC --one_instantiation_per_object
146 ifeq ($(ARCH),solarisx86)
147 # Solaris CC on Intel
157 CXX = CC -n32 -I/usr/include/CC.sgi
159 LD = CC -n32 -LANG:std -I/usr/include/CC.sgi
164 ifeq ($(ARCH),sgicc64)
166 CXX = CC -64 -I/usr/include/CC.sgi
168 LD = CC -64 -LANG:std -I/usr/include/CC.sgi
173 ifeq ($(ARCH),sgigcc)
176 CXXFLAGS = -O -Wall -fPIC
178 LDFLAGS = -O -Wl,-u,__builtin_new -Wl,-u,__builtin_delete -Wl,-u,__nw__FUiPv
182 ifeq ($(ARCH),sgin32gcc)
183 # SGI 6.x with gcc for n32 ABI
185 CXXFLAGS = -O -Wall -fPIC
187 LDFLAGS = -O -L/usr/lib32 -Wl,-woff,134 -lgen
191 ifeq ($(ARCH),sgikcc)
193 CXX = KCC -n32 --one_instantiation_per_object
200 ifeq ($(ARCH),alphagcc)
203 CXXFLAGS = -O2 -Wall -fPIC
206 SOFLAGS = -Wl,-expect_unresolved,* -shared
209 ifeq ($(ARCH),alphakcc)
210 # Alpha/OSF with kai compiler (not yet valid)
211 CXX = KCC --one_instantiation_per_object
215 SOFLAGS = -Wl,-expect_unresolved,* -shared
218 ifeq ($(ARCH),alphacxx6)
219 # Alpha/OSF with cxx6
224 SOFLAGS = -shared -nocxxstd -Wl,-expect_unresolved,*,-msym
227 ifeq ($(ARCH),linuxrh51)
228 # Linux with gcc 2.7.2.x
230 CXXFLAGS = -O2 -Wall -fPIC
236 ifeq ($(ARCH),linuxrh42)
237 # Linux with gcc 2.7.2.x (RedHat 4.2)
239 CXXFLAGS = -O2 -Wall -fPIC
245 ifeq ($(ARCH),linuxdeb)
246 # Linux with gcc 2.7.2.x
248 CXXFLAGS = -O1 -Wall -fPIC
254 ifeq ($(ARCH),linuxdeb2ppc)
255 # Debian/Linux on the PowerPC
257 CXXFLAGS = -O2 -Wall -fPIC
263 ifeq ($(ARCH),linuxsuse6)
264 # Linux with gcc 2.7.2.x
266 CXXFLAGS = -O2 -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 $(ROOTCONFIG) --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),linuxppcgcc)
300 # MkLinux with gcc and 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),linuxalphagcc)
372 # Alpha Linux with gcc
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)
409 CXXFLAGS += -W -Wall -fPIC
411 SOFLAGS = -shared -Wl,-x
414 ifeq ($(ARCH),freebsd5)
416 CXXFLAGS += -W -Wall -fPIC
420 ifeq ($(ARCH),openbsd)
423 CXXFLAGS = -O -pipe -W -Wall -fPIC
426 SOFLAGS = -shared -Wl,-x
429 ifeq ($(ARCH),macosx)
430 # MacOS X with cc (GNU cc 2.95.2 and gcc 3.3)
431 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
433 CXXFLAGS = -O2 -pipe -Wall -W -Woverloaded-virtual
434 LDFLAGS = -O2 -bind_at_load
435 # The SOFLAGS will be used to create the .dylib,
436 # the .so will be created separately
438 ifeq ($(MACOSX_MINOR),4)
439 UNDEFOPT = dynamic_lookup
440 LD = MACOSX_DEPLOYMENT_TARGET=10.4 c++
442 ifeq ($(MACOSX_MINOR),3)
443 UNDEFOPT = dynamic_lookup
444 LD = MACOSX_DEPLOYMENT_TARGET=10.3 c++
450 SOFLAGS = -dynamiclib -single_module -undefined $(UNDEFOPT)
453 ifeq ($(ARCH),macosxicc)
454 # MacOS X with Intel icc compiler
455 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
457 CXXFLAGS = -O -fPIC -wd1476
459 # The SOFLAGS will be used to create the .dylib,
460 # the .so will be created separately
462 ifeq ($(MACOSX_MINOR),4)
463 LD = MACOSX_DEPLOYMENT_TARGET=10.4 icpc
465 SOFLAGS = -dynamiclib -single_module -Xlinker -undefined dynamic_lookup
468 ifeq ($(ARCH),macosx64)
469 # MacOS X >= 10.4 with gcc 64 bit mode (GNU gcc 4.*)
470 # Only specific option (-m64) comes from root-config
471 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
473 CXXFLAGS = -O2 -pipe -Wall -W -Woverloaded-virtual
474 LDFLAGS = -O2 -bind_at_load
475 # The SOFLAGS will be used to create the .dylib,
476 # the .so will be created separately
478 LD = MACOSX_DEPLOYMENT_TARGET=10.4 c++
479 SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup
482 ifeq ($(ARCH),macosxxlc)
483 # MacOS X with IBM xlC compiler
484 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
487 LDFLAGS = -O -Wl,-bind_at_load
488 # The SOFLAGS will be used to create the .dylib,
489 # the .so will be created separately
491 ifeq ($(MACOSX_MINOR),4)
492 UNDEFOPT = dynamic_lookup
493 LD = MACOSX_DEPLOYMENT_TARGET=10.4 xlC
495 ifeq ($(MACOSX_MINOR),3)
496 UNDEFOPT = dynamic_lookup
497 LD = MACOSX_DEPLOYMENT_TARGET=10.3 xlC
503 SOFLAGS = -qmkshrobj -single_module -undefined $(UNDEFOPT)
507 # Windows with the VC++ compiler
508 VC_MAJOR := $(shell unset VS_UNICODE_OUTPUT; cl.exe 2>&1 | awk '{ if (NR==1) print $$8 }' | \
518 CXXFLAGS = $(CXXOPT) -nologo -I$(shell $(ROOTCONFIG) --incdir) -FIw32pragma.h
522 LDFLAGS = $(LDOPT) -pdb:none -nologo
525 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
528 ifeq ($(ARCH),win32old)
529 # Windows with the VC++ compiler
538 CXXFLAGS = $(CXXOPT) -G5 -GR -GX -MD -DWIN32 -D_WINDOWS -nologo \
539 -DVISUAL_CPLUSPLUS -D_X86_=1 -D_DLL
543 LDFLAGS = $(LDOPT) -pdb:none -nologo
546 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
549 ifeq ($(ARCH),win32gcc)
554 CXXFLAGS = -O -pipe -Wall -Woverloaded-virtual -I/usr/X11R6/include
556 LDFLAGS = -O -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc \
558 SOFLAGS = -shared -D_DLL -Wl,--export-all-symbols
559 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
563 $(error $(ARCH) invalid architecture)
566 CXXFLAGS += $(ROOTCFLAGS)
567 LDFLAGS += $(ROOTLDFLAGS)
568 LIBS = $(ROOTLIBS) $(SYSLIBS)
569 GLIBS = $(ROOTGLIBS) $(SYSLIBS)
571 GLIBS = $(ROOTGLIBS) $(SYSLIBS)