2 # Include user definition
5 # TO suppress recursive includes
12 NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
15 # - Only set if not specified on the command line or inherited from the environment.
16 # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
17 # http://stackoverflow.com/questions/4029274/mingw-and-make-variables
18 # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
19 ifeq ($(origin CC),default)
21 # Change the default compile to clang on Mac OSX.
22 # http://stackoverflow.com/questions/714100/os-detecting-makefile
23 UNAME_S := $(shell uname -s)
24 ifeq ($(UNAME_S),Darwin)
29 # Default Fortran compiler (FC) is selected by f_check.
32 include $(TOPDIR)/Makefile.rule
34 include $(TOPDIR)/$(MAKEFILE_RULE)
38 # Beginning of system configuration
46 GETARCH_FLAGS := -DFORCE_$(TARGET)
49 # Force fallbacks for 32bit
52 ifeq ($(TARGET), HASWELL)
53 GETARCH_FLAGS := -DFORCE_NEHALEM
55 ifeq ($(TARGET), SANDYBRIDGE)
56 GETARCH_FLAGS := -DFORCE_NEHALEM
58 ifeq ($(TARGET), BULLDOZER)
59 GETARCH_FLAGS := -DFORCE_BARCELONA
61 ifeq ($(TARGET), PILEDRIVER)
62 GETARCH_FLAGS := -DFORCE_BARCELONA
67 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
70 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
73 # Force fallbacks for 32bit
76 ifeq ($(TARGET_CORE), HASWELL)
77 GETARCH_FLAGS := -DFORCE_NEHALEM
79 ifeq ($(TARGET_CORE), SANDYBRIDGE)
80 GETARCH_FLAGS := -DFORCE_NEHALEM
82 ifeq ($(TARGET_CORE), BULLDOZER)
83 GETARCH_FLAGS := -DFORCE_BARCELONA
85 ifeq ($(TARGET_CORE), PILEDRIVER)
86 GETARCH_FLAGS := -DFORCE_BARCELONA
94 ifneq ($(INTERFACE64), 0)
95 GETARCH_FLAGS += -DUSE64BITINT
99 ifndef GEMM_MULTITHREAD_THRESHOLD
100 GEMM_MULTITHREAD_THRESHOLD=4
102 GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
105 GETARCH_FLAGS += -DNO_AVX
109 GETARCH_FLAGS += -DNO_AVX
116 ifeq ($(QUIET_MAKE), 1)
120 ifndef NO_PARALLEL_MAKE
123 GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
125 ifeq ($(HOSTCC), loongcc)
126 GETARCH_FLAGS += -static
129 #if don't use Fortran, it will only compile CBLAS.
130 ifeq ($(ONLY_CBLAS), 1)
136 # This operation is expensive, so execution should be once.
137 ifndef GOTOBLAS_MAKEFILE
138 export GOTOBLAS_MAKEFILE = 1
140 # Generating Makefile.conf and config.h
141 DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) all)
144 include $(TOPDIR)/Makefile.conf
146 include $(TOPDIR)/Makefile_kernel.conf
152 NUM_THREADS = $(NUM_CORES)
155 ifeq ($(NUM_THREADS), 1)
156 override USE_THREAD = 0
160 ifeq ($(USE_THREAD), 0)
166 ifeq ($(NUM_THREAD), 1)
179 AR = $(CROSS_SUFFIX)ar
180 AS = $(CROSS_SUFFIX)as
181 LD = $(CROSS_SUFFIX)ld
182 RANLIB = $(CROSS_SUFFIX)ranlib
183 NM = $(CROSS_SUFFIX)nm
184 DLLWRAP = $(CROSS_SUFFIX)dllwrap
187 # OS dependent settings
190 ifeq ($(OSNAME), Darwin)
191 export MACOSX_DEPLOYMENT_TARGET=10.2
195 ifeq ($(OSNAME), FreeBSD)
199 ifeq ($(OSNAME), NetBSD)
203 ifeq ($(OSNAME), Linux)
208 ifeq ($(OSNAME), AIX)
212 ifeq ($(OSNAME), WINNT)
216 EXTRALIB += -defaultlib:advapi32
222 ifeq ($(C_COMPILER), CLANG)
223 CCOMMON_OPT += -DMS_ABI
226 ifeq ($(C_COMPILER), GCC)
227 #Test for supporting MS_ABI
228 GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
229 GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
230 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
231 ifeq ($(GCCVERSIONGT4), 1)
232 # GCC Majar version > 4
233 # It is compatible with MSVC ABI.
234 CCOMMON_OPT += -DMS_ABI
237 ifeq ($(GCCVERSIONGTEQ4), 1)
238 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
240 # It is compatible with MSVC ABI.
241 CCOMMON_OPT += -DMS_ABI
246 # Ensure the correct stack alignment on Win32
247 # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
249 CCOMMON_OPT += -mincoming-stack-boundary=2
250 FCOMMON_OPT += -mincoming-stack-boundary=2
255 ifeq ($(OSNAME), Interix)
259 INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
262 ifeq ($(OSNAME), CYGWIN_NT)
267 ifneq ($(OSNAME), WINNT)
268 ifneq ($(OSNAME), CYGWIN_NT)
269 ifneq ($(OSNAME), Interix)
271 EXTRALIB += -lpthread
278 ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
283 CCOMMON_OPT += -DQUAD_PRECISION
288 ifneq ($(ARCH), x86_64)
294 CCOMMON_OPT += -DUTEST_CHECK
299 CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
303 # Architecture dependent settings
310 ifndef NO_EXPRECISION
311 ifeq ($(F_COMPILER), GFORTRAN)
312 # ifeq logical or. GCC or LSB
313 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
315 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
316 FCOMMON_OPT += -m128bit-long-double
318 ifeq ($(C_COMPILER), CLANG)
320 CCOMMON_OPT += -DEXPRECISION
321 FCOMMON_OPT += -m128bit-long-double
327 ifeq ($(ARCH), x86_64)
328 ifndef NO_EXPRECISION
329 ifeq ($(F_COMPILER), GFORTRAN)
330 # ifeq logical or. GCC or LSB
331 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
333 CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
334 FCOMMON_OPT += -m128bit-long-double
336 ifeq ($(C_COMPILER), CLANG)
338 CCOMMON_OPT += -DEXPRECISION
339 FCOMMON_OPT += -m128bit-long-double
345 ifeq ($(C_COMPILER), INTEL)
346 CCOMMON_OPT += -wd981
349 ifeq ($(USE_OPENMP), 1)
350 # ifeq logical or. GCC or LSB
351 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
352 CCOMMON_OPT += -fopenmp
355 ifeq ($(C_COMPILER), CLANG)
356 $(error OpenBLAS: Clang didn't support OpenMP yet.)
357 CCOMMON_OPT += -fopenmp
360 ifeq ($(C_COMPILER), INTEL)
361 CCOMMON_OPT += -openmp
364 ifeq ($(C_COMPILER), PGI)
368 ifeq ($(C_COMPILER), OPEN64)
370 CEXTRALIB += -lstdc++
373 ifeq ($(C_COMPILER), PATHSCALE)
379 ifeq ($(DYNAMIC_ARCH), 1)
381 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
382 CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
385 ifeq ($(ARCH), x86_64)
386 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
388 DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER HASWELL
401 ifeq ($(F_COMPILER), GFORTRAN)
402 ifeq ($(C_COMPILER), GCC)
404 # CCOMMON_OPT += -DEXPRECISION
409 ifeq ($(ARCH), mips64)
413 ifeq ($(ARCH), alpha)
423 ifeq ($(ARCH), arm64)
432 # C Compiler dependent settings
436 # ifeq logical or. GCC or CLANG or LSB
437 # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
438 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
440 COMMON_PROF += -fno-inline
441 NO_UNINITIALIZED_WARN = -Wno-uninitialized
443 ifeq ($(QUIET_MAKE), 1)
444 CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
449 ifeq ($(ARCH), mips64)
451 CCOMMON_OPT += -mabi=64
453 CCOMMON_OPT += -mabi=n32
458 ifeq ($(CORE), LOONGSON3A)
459 CCOMMON_OPT += -march=mips64
460 FCOMMON_OPT += -march=mips64
463 ifeq ($(CORE), LOONGSON3B)
464 CCOMMON_OPT += -march=mips64
465 FCOMMON_OPT += -march=mips64
468 ifeq ($(OSNAME), AIX)
474 ifndef BINARY_DEFINED
484 ifeq ($(C_COMPILER), PGI)
486 CCOMMON_OPT += -tp p7-64
488 CCOMMON_OPT += -tp p7
492 ifeq ($(C_COMPILER), PATHSCALE)
501 # Fortran Compiler dependent settings
504 ifeq ($(F_COMPILER), G77)
505 CCOMMON_OPT += -DF_INTERFACE_G77
507 ifndef NO_BINARY_MODE
516 ifeq ($(F_COMPILER), G95)
517 CCOMMON_OPT += -DF_INTERFACE_G95
519 ifndef NO_BINARY_MODE
528 ifeq ($(F_COMPILER), GFORTRAN)
529 CCOMMON_OPT += -DF_INTERFACE_GFORT
531 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
532 ifneq ($(NO_LAPACK), 1)
533 EXTRALIB += -lgfortran
536 ifeq ($(ARCH), mips64)
538 FCOMMON_OPT += -mabi=64
540 FCOMMON_OPT += -mabi=n32
547 ifneq ($(INTERFACE64), 0)
548 FCOMMON_OPT += -fdefault-integer-8
556 FCOMMON_OPT += -fopenmp
560 ifeq ($(F_COMPILER), INTEL)
561 CCOMMON_OPT += -DF_INTERFACE_INTEL
563 ifneq ($(INTERFACE64), 0)
568 FCOMMON_OPT += -openmp
572 ifeq ($(F_COMPILER), FUJITSU)
573 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
575 FCOMMON_OPT += -openmp
579 ifeq ($(F_COMPILER), IBM)
580 CCOMMON_OPT += -DF_INTERFACE_IBM
581 # FCOMMON_OPT += -qarch=440
585 ifneq ($(INTERFACE64), 0)
586 FCOMMON_OPT += -qintsize=8
593 FCOMMON_OPT += -openmp
597 ifeq ($(F_COMPILER), PGI)
598 CCOMMON_OPT += -DF_INTERFACE_PGI
599 COMMON_PROF += -DPGICOMPILER
602 ifneq ($(INTERFACE64), 0)
606 FCOMMON_OPT += -tp p7-64
608 FCOMMON_OPT += -tp p7
615 ifeq ($(F_COMPILER), PATHSCALE)
616 CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
619 ifneq ($(INTERFACE64), 0)
625 ifneq ($(ARCH), mips64)
633 FCOMMON_OPT += -mabi=64
635 FCOMMON_OPT += -mabi=n32
644 ifeq ($(F_COMPILER), OPEN64)
645 CCOMMON_OPT += -DF_INTERFACE_OPEN64
648 ifneq ($(INTERFACE64), 0)
654 ifeq ($(ARCH), mips64)
660 ifeq ($(CORE), LOONGSON3A)
661 FCOMMON_OPT += -loongson3 -static
664 ifeq ($(CORE), LOONGSON3B)
665 FCOMMON_OPT += -loongson3 -static
677 FEXTRALIB += -lstdc++
682 ifeq ($(C_COMPILER), OPEN64)
684 ifeq ($(ARCH), mips64)
690 ifeq ($(CORE), LOONGSON3A)
691 CCOMMON_OPT += -loongson3 -static
694 ifeq ($(CORE), LOONGSON3B)
695 CCOMMON_OPT += -loongson3 -static
708 ifeq ($(C_COMPILER), SUN)
717 ifeq ($(F_COMPILER), SUN)
718 CCOMMON_OPT += -DF_INTERFACE_SUN
725 FCOMMON_OPT += -xopenmp=parallel
729 ifeq ($(F_COMPILER), COMPAQ)
730 CCOMMON_OPT += -DF_INTERFACE_COMPAQ
732 FCOMMON_OPT += -openmp
738 ifneq ($(INTERFACE64), 0)
745 ifeq ($(NEED_PIC), 1)
746 ifeq ($(C_COMPILER), IBM)
747 CCOMMON_OPT += -qpic=large
751 ifeq ($(F_COMPILER), SUN)
758 ifeq ($(DYNAMIC_ARCH), 1)
759 CCOMMON_OPT += -DDYNAMIC_ARCH
762 ifeq ($(NO_LAPACK), 1)
763 CCOMMON_OPT += -DNO_LAPACK
764 #Disable LAPACK C interface
768 ifeq ($(NO_LAPACKE), 1)
769 CCOMMON_OPT += -DNO_LAPACKE
773 CCOMMON_OPT += -DNO_AVX
777 CCOMMON_OPT += -DNO_AVX
781 CCOMMON_OPT += -DSMP_SERVER
783 ifeq ($(ARCH), mips64)
784 ifneq ($(CORE), LOONGSON3B)
785 USE_SIMPLE_THREADED_LEVEL3 = 1
789 ifeq ($(USE_OPENMP), 1)
790 # USE_SIMPLE_THREADED_LEVEL3 = 1
792 CCOMMON_OPT += -DUSE_OPENMP
797 ifeq ($(NO_WARMUP), 1)
798 CCOMMON_OPT += -DNO_WARMUP
801 ifeq ($(CONSISTENT_FPCSR), 1)
802 CCOMMON_OPT += -DCONSISTENT_FPCSR
805 # Only for development
806 # CCOMMON_OPT += -DPARAMTEST
807 # CCOMMON_OPT += -DPREFETCHTEST
808 # CCOMMON_OPT += -DNO_SWITCHING
812 CCOMMON_OPT += -DUSE_PAPI
813 EXTRALIB += -lpapi -lperfctr
816 ifdef DYNAMIC_THREADS
817 CCOMMON_OPT += -DDYNAMIC_THREADS
820 CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
822 ifdef USE_SIMPLE_THREADED_LEVEL3
823 CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
827 LIBPREFIX = libopenblas
829 LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
832 KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
834 include $(TOPDIR)/Makefile.$(ARCH)
836 CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
838 ifeq ($(CORE), PPC440)
839 CCOMMON_OPT += -DALLOC_QALLOC
842 ifeq ($(CORE), PPC440FP2)
843 STATIC_ALLOCATION = 1
846 ifneq ($(OSNAME), Linux)
850 ifneq ($(ARCH), x86_64)
852 ifneq ($(CORE), LOONGSON3B)
859 CCOMMON_OPT += -DNO_AFFINITY
862 ifdef FUNCTION_PROFILE
863 CCOMMON_OPT += -DFUNCTION_PROFILE
866 ifdef HUGETLB_ALLOCATION
867 CCOMMON_OPT += -DALLOC_HUGETLB
870 ifdef HUGETLBFILE_ALLOCATION
871 CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
874 ifdef STATIC_ALLOCATION
875 CCOMMON_OPT += -DALLOC_STATIC
878 ifdef DEVICEDRIVER_ALLOCATION
879 CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
882 ifdef MIXED_MEMORY_ALLOCATION
883 CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
886 ifeq ($(OSNAME), SunOS)
902 REVISION = -r$(VERSION)
903 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
914 override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
915 override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
917 override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
918 override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
921 #For LAPACK Fortran codes.
922 #Disable -fopenmp for LAPACK Fortran codes on Windows.
924 LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
925 LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
927 LAPACK_FFLAGS := $(FFLAGS)
928 LAPACK_FPFLAGS := $(FPFLAGS)
931 LAPACK_CFLAGS = $(CFLAGS)
932 LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
934 ifneq ($(INTERFACE64), 0)
935 LAPACK_CFLAGS += -DLAPACK_ILP64
940 LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
942 ifeq ($(C_COMPILER), LSB)
943 LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
958 ifneq ($(DYNAMIC_ARCH), 1)
960 LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
961 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
963 LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
964 LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
968 LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
969 LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
971 LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
972 LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
977 LIBDLLNAME = $(LIBPREFIX).dll
978 LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
979 LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
980 LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
981 LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
982 LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
984 LIBS = $(TOPDIR)/$(LIBNAME)
985 LIBS_P = $(TOPDIR)/$(LIBNAME_P)
988 LIB_COMPONENTS = BLAS
989 ifneq ($(NO_CBLAS), 1)
990 LIB_COMPONENTS += CBLAS
993 ifneq ($(NO_LAPACK), 1)
994 LIB_COMPONENTS += LAPACK
995 ifneq ($(NO_LAPACKE), 1)
996 LIB_COMPONENTS += LAPACKE
1000 ifeq ($(ONLY_CBLAS), 1)
1001 LIB_COMPONENTS = CBLAS
1014 export NEED2UNDERSCORES
1019 export MAKEFILE_RULE
1048 export FUNCTION_PROFILE
1051 export SGEMM_UNROLL_M
1052 export SGEMM_UNROLL_N
1053 export DGEMM_UNROLL_M
1054 export DGEMM_UNROLL_N
1055 export QGEMM_UNROLL_M
1056 export QGEMM_UNROLL_N
1057 export CGEMM_UNROLL_M
1058 export CGEMM_UNROLL_N
1059 export ZGEMM_UNROLL_M
1060 export ZGEMM_UNROLL_N
1061 export XGEMM_UNROLL_M
1062 export XGEMM_UNROLL_N
1063 export CGEMM3M_UNROLL_M
1064 export CGEMM3M_UNROLL_N
1065 export ZGEMM3M_UNROLL_M
1066 export ZGEMM3M_UNROLL_N
1067 export XGEMM3M_UNROLL_M
1068 export XGEMM3M_UNROLL_N
1078 .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
1081 $(FC) $(FFLAGS) -c $< -o $(@F)
1084 $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
1088 PATHSCALEPATH = /opt/pathscale/lib/3.1
1089 PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
1091 PATHSCALEPATH = /opt/pathscale/lib/3.1/32
1092 PGIPATH = /opt/pgi/linux86/7.1-5/lib
1095 ACMLPATH = /opt/acml/4.3.0
1096 ifneq ($(OSNAME), Darwin)
1097 MKLPATH = /opt/intel/mkl/10.2.2.025/lib
1099 MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
1101 ATLASPATH = /opt/atlas/3.9.17/opteron
1102 FLAMEPATH = $(HOME)/flame/lib
1103 ifneq ($(OSNAME), SunOS)
1104 SUNPATH = /opt/sunstudio12.1
1106 SUNPATH = /opt/SUNWspro