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)
30 #CXXFLAGS = -O9 -Wall -fPIC
32 #CXXFLAGS = -O9 -Wall -fPIC -g
40 ifeq ($(ARCH),hpuxacc)
49 ifeq ($(ARCH),hpuxia64acc)
50 # HP-UX 11i 1.5 (IA-64) with aCC
52 CXXFLAGS = +DD64 -O +Z
58 ifeq ($(ARCH),hpuxgcc)
64 SOFLAGS = -fPIC -shared
67 ifeq ($(ARCH),hurddeb)
70 CXXFLAGS = -O2 -Wall -fPIC
104 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
107 ifeq ($(ARCH),solaris)
109 CXX = /opt/SUNWspro/bin/CC
111 LD = /opt/SUNWspro/bin/CC
116 ifeq ($(ARCH),solarisCC5)
125 ifeq ($(ARCH),solarisgcc)
134 ifeq ($(ARCH),solariskcc)
136 CXX = KCC --one_instantiation_per_object
143 ifeq ($(ARCH),solarisx86)
144 # Solaris CC on Intel
154 CXX = CC -n32 -I/usr/include/CC.sgi
156 LD = CC -n32 -LANG:std -I/usr/include/CC.sgi
161 ifeq ($(ARCH),sgicc64)
163 CXX = CC -64 -I/usr/include/CC.sgi
165 LD = CC -64 -LANG:std -I/usr/include/CC.sgi
170 ifeq ($(ARCH),sgigcc)
173 CXXFLAGS = -O -Wall -fPIC
175 LDFLAGS = -O -Wl,-u,__builtin_new -Wl,-u,__builtin_delete -Wl,-u,__nw__FUiPv
179 ifeq ($(ARCH),sgin32gcc)
180 # SGI 6.x with gcc for n32 ABI
182 CXXFLAGS = -O -Wall -fPIC
184 LDFLAGS = -O -L/usr/lib32 -Wl,-woff,134 -lgen
188 ifeq ($(ARCH),sgikcc)
190 CXX = KCC -n32 --one_instantiation_per_object
197 ifeq ($(ARCH),alphagcc)
200 CXXFLAGS = -O2 -Wall -fPIC
203 SOFLAGS = -Wl,-expect_unresolved,* -shared
206 ifeq ($(ARCH),alphakcc)
207 # Alpha/OSF with kai compiler (not yet valid)
208 CXX = KCC --one_instantiation_per_object
212 SOFLAGS = -Wl,-expect_unresolved,* -shared
215 ifeq ($(ARCH),alphacxx6)
216 # Alpha/OSF with cxx6
221 SOFLAGS = -shared -nocxxstd -Wl,-expect_unresolved,*,-msym
224 ifeq ($(ARCH),linuxrh51)
225 # Linux with gcc 2.7.2.x
227 CXXFLAGS = -O2 -Wall -fPIC
233 ifeq ($(ARCH),linuxrh42)
234 # Linux with gcc 2.7.2.x (RedHat 4.2)
236 CXXFLAGS = -O2 -Wall -fPIC
242 ifeq ($(ARCH),linuxdeb)
243 # Linux with gcc 2.7.2.x
245 CXXFLAGS = -O1 -Wall -fPIC
251 ifeq ($(ARCH),linuxdeb2ppc)
252 # Debian/Linux on the PowerPC
254 CXXFLAGS = -O2 -Wall -fPIC
260 ifeq ($(ARCH),linuxsuse6)
261 # Linux with gcc 2.7.2.x
263 CXXFLAGS = -O2 -Wall -fPIC
269 ifeq ($(ARCH),linuxkcc)
270 # Linux with the KAI compiler
271 CXX = KCC --one_instantiation_per_object
272 CXXFLAGS = -O -fPIC +K0
274 LDFLAGS = -O $(shell $(ROOTCONFIG) --cflags)
278 ifeq ($(ARCH),linuxicc)
279 # Linux with Intel icc compiler
280 ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
282 ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
285 CXXFLAGS = -O -fPIC -wd1476
289 ifeq ($(ICC_MAJOR),8)
290 ifneq ($(ICC_MINOR),0)
296 ifeq ($(ARCH),linuxppcgcc)
297 # MkLinux with gcc and glibc
299 CXXFLAGS = -O2 -Wall -fPIC
305 ifeq ($(ARCH),linuxia64gcc)
306 # Itanium Linux with gcc 2.9x
308 CXXFLAGS = -O2 -Wall -fPIC
314 ifeq ($(ARCH),linuxia64sgi)
315 # Itanium Linux with sgiCC
317 CXXFLAGS = -O -Wall -fPIC
323 ifeq ($(ARCH),linuxia64ecc)
324 # Itanium Linux with Intel icc (was ecc)
325 ICC_MAJOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
327 ICC_MINOR := $(shell icc -v 2>&1 | awk '{ if (NR==1) print $$2 }' | \
330 CXXFLAGS = -O -fPIC -wd1476
334 ifeq ($(ICC_MAJOR),8)
335 ifneq ($(ICC_MINOR),0)
341 ifeq ($(ARCH),linuxx8664gcc)
342 # AMD Opteron and Intel EM64T (64 bit mode) Linux with gcc 3.x
344 CXXFLAGS = -O2 -Wall -fPIC
350 ifeq ($(ARCH),linuxppc64gcc)
351 # PPC64 Linux with gcc 3.x
353 CXXFLAGS = -O -Wall -fPIC
359 ifeq ($(ARCH),linuxx8664icc)
360 # AMD Opteron and Intel EM64T (64 bit mode) Linux with Intel icc compiler
362 CXXFLAGS = -O -fPIC -wd1476 -wd1572
368 ifeq ($(ARCH),linuxalphagcc)
369 # Alpha Linux with gcc
371 CXXFLAGS = -O2 -Wall -fPIC
377 ifeq ($(ARCH),linuxarm)
378 # ARM Linux with egcs
380 CXXFLAGS = -O -Wall -fPIC
386 ifeq ($(ARCH),mklinux)
389 CXXFLAGS = -O2 -Wall -fPIC
395 ifeq ($(ARCH),freebsd)
398 CXXFLAGS = -O -pipe -W -Wall -fPIC
401 SOFLAGS = -shared -Wl,-x
404 ifeq ($(ARCH),freebsd4)
406 CXXFLAGS += -W -Wall -fPIC
408 SOFLAGS = -shared -Wl,-x
411 ifeq ($(ARCH),freebsd5)
413 CXXFLAGS += -W -Wall -fPIC
417 ifeq ($(ARCH),openbsd)
420 CXXFLAGS = -O -pipe -W -Wall -fPIC
423 SOFLAGS = -shared -Wl,-x
426 ifeq ($(ARCH),macosx)
427 # MacOS X with cc (GNU cc 2.95.2 and gcc 3.3)
428 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
430 CXXFLAGS = -O2 -pipe -Wall -W -Woverloaded-virtual
431 LDFLAGS = -O2 -bind_at_load
432 # The SOFLAGS will be used to create the .dylib,
433 # the .so will be created separately
435 ifeq ($(MACOSX_MINOR),4)
436 UNDEFOPT = dynamic_lookup
437 LD = MACOSX_DEPLOYMENT_TARGET=10.4 c++
439 ifeq ($(MACOSX_MINOR),3)
440 UNDEFOPT = dynamic_lookup
441 LD = MACOSX_DEPLOYMENT_TARGET=10.3 c++
447 SOFLAGS = -dynamiclib -single_module -undefined $(UNDEFOPT)
450 ifeq ($(ARCH),macosxicc)
451 # MacOS X with Intel icc compiler
452 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
454 CXXFLAGS = -O -fPIC -wd1476
456 # The SOFLAGS will be used to create the .dylib,
457 # the .so will be created separately
459 ifeq ($(MACOSX_MINOR),4)
460 LD = MACOSX_DEPLOYMENT_TARGET=10.4 icpc
462 SOFLAGS = -dynamiclib -single_module -Xlinker -undefined dynamic_lookup
465 ifeq ($(ARCH),macosx64)
466 # MacOS X >= 10.4 with gcc 64 bit mode (GNU gcc 4.*)
467 # Only specific option (-m64) comes from root-config
468 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
470 CXXFLAGS = -O2 -pipe -Wall -W -Woverloaded-virtual
471 LDFLAGS = -O2 -bind_at_load
472 # The SOFLAGS will be used to create the .dylib,
473 # the .so will be created separately
475 LD = MACOSX_DEPLOYMENT_TARGET=10.4 c++
476 SOFLAGS = -dynamiclib -single_module -undefined dynamic_lookup
479 ifeq ($(ARCH),macosxxlc)
480 # MacOS X with IBM xlC compiler
481 MACOSX_MINOR := $(shell sw_vers | sed -n 's/ProductVersion://p' | cut -d . -f 2)
484 LDFLAGS = -O -Wl,-bind_at_load
485 # The SOFLAGS will be used to create the .dylib,
486 # the .so will be created separately
488 ifeq ($(MACOSX_MINOR),4)
489 UNDEFOPT = dynamic_lookup
490 LD = MACOSX_DEPLOYMENT_TARGET=10.4 xlC
492 ifeq ($(MACOSX_MINOR),3)
493 UNDEFOPT = dynamic_lookup
494 LD = MACOSX_DEPLOYMENT_TARGET=10.3 xlC
500 SOFLAGS = -qmkshrobj -single_module -undefined $(UNDEFOPT)
504 # Windows with the VC++ compiler
505 VC_MAJOR := $(shell unset VS_UNICODE_OUTPUT; cl.exe 2>&1 | awk '{ if (NR==1) print $$8 }' | \
515 CXXFLAGS = $(CXXOPT) -nologo -I$(shell $(ROOTCONFIG) --incdir) -FIw32pragma.h
519 LDFLAGS = $(LDOPT) -pdb:none -nologo
522 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
525 ifeq ($(ARCH),win32old)
526 # Windows with the VC++ compiler
535 CXXFLAGS = $(CXXOPT) -G5 -GR -GX -MD -DWIN32 -D_WINDOWS -nologo \
536 -DVISUAL_CPLUSPLUS -D_X86_=1 -D_DLL
540 LDFLAGS = $(LDOPT) -pdb:none -nologo
543 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
546 ifeq ($(ARCH),win32gcc)
551 CXXFLAGS = -O -pipe -Wall -Woverloaded-virtual -I/usr/X11R6/include
553 LDFLAGS = -O -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc \
555 SOFLAGS = -shared -D_DLL -Wl,--export-all-symbols
556 EXPLLINKLIBS = $(ROOTLIBS) $(ROOTGLIBS)
560 $(error $(ARCH) invalid architecture)
563 CXXFLAGS += $(ROOTCFLAGS)
564 LDFLAGS += $(ROOTLDFLAGS)
565 LIBS = $(ROOTLIBS) $(SYSLIBS)
566 GLIBS = $(ROOTGLIBS) $(SYSLIBS)
568 GLIBS = $(ROOTGLIBS) $(SYSLIBS)