The march=cooperlake and march=sapphirerapids flags were never getting added when building with Clang targetting those architectures. Instead it was falling back to the skylake AVX512 implementation. Clang added support for these two architectures in Clang 9 and Clang 12, so introduce new checks for those versions to enable the appropriate march flag, and fallback to skylake otherwise.
295 lines
7.9 KiB
Makefile
295 lines
7.9 KiB
Makefile
# CCOMMON_OPT += -DFASTCPU
|
|
|
|
ifeq ($(OSNAME), SunOS)
|
|
ifdef BINARY64
|
|
ifeq ($(F_COMPILER), SUN)
|
|
FCOMMON_OPT += -m64
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
|
|
ifneq ($(DYNAMIC_ARCH),1)
|
|
ADD_CPUFLAGS = 1
|
|
else
|
|
ifdef TARGET_CORE
|
|
ADD_CPUFLAGS = 1
|
|
endif
|
|
endif
|
|
|
|
ifdef ADD_CPUFLAGS
|
|
ifdef HAVE_SSE3
|
|
CCOMMON_OPT += -msse3
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -msse3
|
|
endif
|
|
endif
|
|
ifdef HAVE_SSSE3
|
|
CCOMMON_OPT += -mssse3
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -mssse3
|
|
endif
|
|
endif
|
|
ifdef HAVE_SSE4_1
|
|
CCOMMON_OPT += -msse4.1
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -msse4.1
|
|
endif
|
|
endif
|
|
ifndef OLDGCC
|
|
ifdef HAVE_AVX
|
|
CCOMMON_OPT += -mavx
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -mavx
|
|
endif
|
|
endif
|
|
endif
|
|
ifndef NO_AVX2
|
|
ifdef HAVE_AVX2
|
|
CCOMMON_OPT += -mavx2
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -mavx2
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CORE), SKYLAKEX)
|
|
ifndef NO_AVX512
|
|
CCOMMON_OPT += -march=skylake-avx512
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=skylake-avx512
|
|
endif
|
|
ifeq ($(OSNAME), CYGWIN_NT)
|
|
CCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
FCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
endif
|
|
ifeq ($(OSNAME), WINNT)
|
|
ifeq ($(C_COMPILER), GCC)
|
|
CCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
FCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CORE), COOPERLAKE)
|
|
ifndef NO_AVX512
|
|
ifeq ($(C_COMPILER), GCC)
|
|
# cooperlake support was added in 10.1
|
|
ifeq ($(GCCVERSIONGTEQ10)$(GCCMINORVERSIONGTEQ1), 11)
|
|
CCOMMON_OPT += -march=cooperlake
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=cooperlake
|
|
endif
|
|
else # gcc not support, fallback to avx512
|
|
CCOMMON_OPT += -march=skylake-avx512
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=skylake-avx512
|
|
endif
|
|
endif
|
|
else ifeq ($(C_COMPILER), CLANG)
|
|
# cooperlake support was added in clang 9
|
|
ifeq ($(CLANGVERSIONGTEQ9), 1)
|
|
CCOMMON_OPT += -march=cooperlake
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=cooperlake
|
|
endif
|
|
else # not supported in clang, fallback to avx512
|
|
CCOMMON_OPT += -march=skylake-avx512
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=skylake-avx512
|
|
endif
|
|
endif
|
|
endif
|
|
ifeq ($(OSNAME), CYGWIN_NT)
|
|
CCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
FCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
endif
|
|
ifeq ($(OSNAME), WINNT)
|
|
ifeq ($(C_COMPILER), GCC)
|
|
CCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
FCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CORE), SAPPHIRERAPIDS)
|
|
ifndef NO_AVX512
|
|
ifeq ($(C_COMPILER), GCC)
|
|
# sapphire rapids support was added in 11
|
|
ifeq ($(GCCVERSIONGTEQ11), 1)
|
|
CCOMMON_OPT += -march=sapphirerapids
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=sapphirerapids
|
|
endif
|
|
else # gcc not support, fallback to avx512
|
|
CCOMMON_OPT += -march=skylake-avx512
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=skylake-avx512
|
|
endif
|
|
endif
|
|
else ifeq ($(C_COMPILER), CLANG)
|
|
# cooperlake support was added in clang 12
|
|
ifeq ($(CLANGVERSIONGTEQ12), 1)
|
|
CCOMMON_OPT += -march=cooperlake
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=cooperlake
|
|
endif
|
|
else # not supported in clang, fallback to avx512
|
|
CCOMMON_OPT += -march=skylake-avx512
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=skylake-avx512
|
|
endif
|
|
endif
|
|
endif
|
|
ifeq ($(OSNAME), CYGWIN_NT)
|
|
CCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
FCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
endif
|
|
ifeq ($(OSNAME), WINNT)
|
|
ifeq ($(C_COMPILER), GCC)
|
|
CCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
FCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(CORE), ZEN)
|
|
ifdef HAVE_AVX512VL
|
|
ifndef NO_AVX512
|
|
CCOMMON_OPT += -march=skylake-avx512
|
|
ifneq ($(F_COMPILER), NAG)
|
|
FCOMMON_OPT += -march=skylake-avx512
|
|
endif
|
|
ifeq ($(OSNAME), CYGWIN_NT)
|
|
CCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
FCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
endif
|
|
ifeq ($(OSNAME), WINNT)
|
|
ifeq ($(C_COMPILER), GCC)
|
|
CCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
FCOMMON_OPT += -fno-asynchronous-unwind-tables
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
|
|
ifdef HAVE_AVX2
|
|
ifndef NO_AVX2
|
|
ifeq ($(C_COMPILER), GCC)
|
|
# AVX2 support was added in 4.7.0
|
|
GCCVERSIONCHECK := $(GCCVERSIONGT4)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7)
|
|
ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
|
|
CCOMMON_OPT += -mavx2
|
|
endif
|
|
else
|
|
ifeq ($(C_COMPILER), CLANG)
|
|
CCOMMON_OPT += -mavx2
|
|
endif
|
|
endif
|
|
ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
|
|
ifeq ($(F_COMPILER), GFORTRAN)
|
|
# AVX2 support was added in 4.7.0
|
|
GCCVERSIONGTEQ4 := $(shell expr `$(FC) -dumpversion | cut -f1 -d.` \>= 4)
|
|
GCCVERSIONGTEQ5 := $(shell expr `$(FC) -dumpversion | cut -f1 -d.` \>= 5)
|
|
GCCMINORVERSIONGTEQ7 := $(shell expr `$(FC) -dumpversion | cut -f2 -d.` \>= 7)
|
|
GCCVERSIONCHECK := $(GCCVERSIONGTEQ5)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7)
|
|
ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
|
|
FCOMMON_OPT += -mavx2
|
|
endif
|
|
else
|
|
ifeq ($(F_COMPILER), FLANG)
|
|
FCOMMON_OPT += -mavx2
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
ifeq ($(OSNAME), Interix)
|
|
ARFLAGS = -m x64
|
|
endif
|
|
|
|
ifeq ($(OSNAME), Darwin)
|
|
ifndef SMP
|
|
LIBMKL = -L$(MKLPATH)/em64t -Wl,-rpath,$(MKLPATH)/em64t -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lguide -lpthread -lm
|
|
else
|
|
LIBMKL = -L$(MKLPATH)/em64t -Wl,-rpath,$(MKLPATH)/em64t -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lguide -lpthread -lm
|
|
endif
|
|
else
|
|
ifndef SMP
|
|
LIBMKL = -L$(MKLPATH)/em64t -Wl,-rpath,$(MKLPATH)/em64t -Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -Wl,--end-group -lguide -lpthread -lm
|
|
else
|
|
LIBMKL = -L$(MKLPATH)/em64t -Wl,-rpath,$(MKLPATH)/em64t -Wl,--start-group -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -Wl,--end-group -lguide -lpthread -lm
|
|
endif
|
|
endif
|
|
|
|
|
|
ifndef SMP
|
|
LIBATLAS = -L$(ATLASPATH)64 -llapack -lcblas -lf77blas -latlas -lm
|
|
else
|
|
LIBATLAS = -L$(ATLASPATH)64 -llapack -lptcblas -lptf77blas -latlas -lpthread -lm
|
|
endif
|
|
|
|
LIBFLAME = -L$(FLAMEPATH) -llapack2flame -lflame $(TOPDIR)/$(LIBNAME) -lgfortran -lpthread -lm
|
|
|
|
|
|
ifeq ($(F_COMPILER), g77)
|
|
LIBACML = -L$(ACMLPATH)/gnu64/lib -Wl,-rpath,$(ACMLPATH)/gnu64/lib -lacml -lacml_mv -lg2c -lm
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), GFORTRAN)
|
|
ifndef SMP
|
|
LIBACML = -L$(ACMLPATH)/gfortran64/lib -Wl,-rpath,$(ACMLPATH)/gfortran64/lib -lacml -lacml_mv -lgfortran -lm
|
|
else
|
|
LIBACML = -L$(ACMLPATH)/gfortran64_mp/lib -Wl,-rpath,$(ACMLPATH)/gfortran64_mp/lib -lacml_mp -lacml_mv -lgfortran -lgomp -lm
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), INTEL)
|
|
ifndef SMP
|
|
LIBACML = -L$(ACMLPATH)/ifort64/lib -Wl,-rpath,$(ACMLPATH)/ifort64/lib -lacml -lacml_mv -lifcoremt_pic -lirc -lm -lpthread -ldl
|
|
else
|
|
LIBACML = -L$(ACMLPATH)/ifort64_mp/lib -Wl,-rpath,$(ACMLPATH)/ifort64_mp/lib -lacml_mp -lacml_mv -lifcoremt_pic -liomp5 -lirc -lm -lpthread -ldl
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), OPEN64)
|
|
ifndef SMP
|
|
LIBACML = -L$(ACMLPATH)/open64/lib -Wl,-rpath,$(ACMLPATH)/open64/lib -lacml -lacml_mv -lm
|
|
else
|
|
LIBACML = -L$(ACMLPATH)/open64_mp/lib -Wl,-rpath,$(ACMLPATH)/open64_mp/lib -lacml_mp -lacml_mv -lm -lpthread
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), pgf77)
|
|
ifndef SMP
|
|
LIBACML = -L$(ACMLPATH)/pgi64/lib -Wl,-rpath,$(ACMLPATH)/pgi64/lib -lacml -lacml_mv -L$(PGIPATH) -Wl,-rpath,$(PGIPATH) -lpgftnrtl -lnspgc -lpgmp -lpgc
|
|
else
|
|
LIBACML = -L$(ACMLPATH)/pgi64_mp/lib -Wl,-rpath,$(ACMLPATH)/pgi64_mp/lib -lacml -lacml_mv -L$(PGIPATH) -Wl,-rpath,$(PGIPATH) -lpgftnrtl -lnspgc -lpgmp -lpgc
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), PATHSCALE)
|
|
ifndef SMP
|
|
LIBACML = -L$(ACMLPATH)/pathscale64/lib -Wl,-rpath,$(ACMLPATH)/pathscale64/lib -lacml -lacml_mv -Wl,-rpath,$(PATHSCALEPATH) -L$(PATHSCALEPATH) -lpathfortran -lm
|
|
else
|
|
LIBACML = -L$(ACMLPATH)/pathscale64_mp/lib -Wl,-rpath,$(ACMLPATH)/pathscale64_mp/lib -lacml_mp -lacml_mv -Wl,-rpath,$(PATHSCALEPATH) -L$(PATHSCALEPATH) -lopenmp -lpathfortran -lm
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), f90)
|
|
LIBACML = -L$(ACMLPATH)/sun64/lib -Wl,-R,$(ACMLPATH)/sun64/lib -L$(SUNPATH)/lib/amd64 -Wl,-R,$(SUNPATH)/lib/amd64 -lacml -lacml_mv -lfsu
|
|
endif
|
|
|
|
LIBSUNPERF = -L$(SUNPATH)/lib/amd64 -L$(SUNPATH)/rtlibs/amd64 -Wl,-R,$(SUNPATH)/lib/amd64 -Wl,-R,$(SUNPATH)/rtlibs/amd64 -lsunperf -lfui -lfsu -lmtsk
|
|
|
|
LIBVECLIB = /System/Library/Frameworks/vecLib.framework/Versions/Current/vecLib
|