#
#     Copyright (c) 2017-2018, NVIDIA CORPORATION.  All rights reserved.
#
# NVIDIA CORPORATION and its licensors retain all intellectual property
# and proprietary rights in and to this software, related documentation
# and any modifications thereto.  Any use, reproduction, disclosure or
# distribution of this software and related documentation without an express
# license agreement from NVIDIA CORPORATION is strictly prohibited.
#


set LLONLY=;

# xflag for llvm back end
append DEFCARGS=-x 66 0x80000000;
append CARGS=-x 6 0x20000;

variable ATOMICLIB is default($PGATM $ifn($index($TARGET,win64-llvm),--as-needed) $if($notequal($GNUATOMIC,),$GNUATOMIC) $ifn($index($TARGET,win64-llvm),--no-as-needed));

# Openmp stuff
set LMP=$if($CONCURSW,$OMPLIB) $ATOMICLIB $PGIUNSTATICX $LTHREAD $PGISTATIC;
set LINITMP=;
set LINITACC=;

append LLCMATTR = 
  -mattr=+mmx
  -mattr=+sse
  -mattr=+sse2
  -mattr=+sse3
  -mattr=+ssse3
  $if($or($SSE4A,$M_SSE4A),-mattr=$if($SSE4A,+,-)sse4a)
  -mattr=+sse4.1
  -mattr=+sse4.2
  -mattr=+avx
  $if($or($AVX2,$M_AVX2),-mattr=$if($AVX2,+,-)avx2)
  $if($or($AVX512F,$M_AVX512F),-mattr=$if($AVX512F,+,-)avx512f)
  $if($expr($LLVMVERINT >= 190), $if($or($AVX512F,$M_AVX512F),-mattr=$if($AVX512F,+,-)evex512))
  $if($or($AVX512PF,$M_AVX512PF),-mattr=$if($AVX512PF,+,-)avx512pf)
  $if($or($AVX512ER,$M_AVX512ER),-mattr=$if($AVX512ER,+,-)avx512er)
  $if($or($AVX512CD,$M_AVX512CD),-mattr=$if($AVX512CD,+,-)avx512cd)
  $if($or($AVX512VL,$M_AVX512VL),-mattr=$if($AVX512VL,+,-)avx512vl)
  $if($or($AVX512BW,$M_AVX512BW),-mattr=$if($AVX512BW,+,-)avx512bw)
  $if($or($AVX512DQ,$M_AVX512DQ),-mattr=$if($AVX512DQ,+,-)avx512dq)
  $if($or($AVX512IFMA,$M_AVX512IFMA),-mattr=$if($AVX512IFMA,+,-)avx512ifma)
  $if($or($AVX512VBMI,$M_AVX512VBMI),-mattr=$if($AVX512VBMI,+,-)avx512vbmi)
  $if($or($AVX512VBMI2,$M_AVX512VBMI2),-mattr=$if($AVX512VBMI2,+,-)avx512vbmi2)
  $if($or($AVX512BITALG,$M_AVX512BITALG),-mattr=$if($AVX512BITALG,+,-)avx512bitalg)
  $if($or($AVX512VPOPCNTDQ,$M_AVX512VPOPCNTDQ),-mattr=$if($AVX512VPOPCNTDQ,+,-)avx512vpopcntdq)
  $if($or($AVX512VNNI,$M_AVX512VNNI),-mattr=$if($AVX512VNNI,+,-)avx512vnni)
  $if($or($F16C,$M_F16C),-mattr=$if($F16C,+,-)f16c)
  $if($or($FMA,$M_FMA),-mattr=$if($FMA,+,-)fma)
  $if($or($FMA4,$M_FMA4),-mattr=$if($FMA4,+,-)fma4)
  $if($or($XOP,$M_XOP),-mattr=$if($XOP,+,-)xop)
  $if($or($XSAVE,$M_XSAVE),-mattr=$if($XSAVE,+,-)xsave)
  $if($or($XSAVEOPT,$M_XSAVEOPT),-mattr=$if($XSAVEOPT,+,-)xsaveopt)
  $if($or($XSAVEC,$M_XSAVEC),-mattr=$if($XSAVEC,+,-)xsavec)
  $if($or($XSAVES,$M_XSAVES),-mattr=$if($XSAVES,+,-)xsaves)
  $if($or($POPCNT,$M_POPCNT),-mattr=$if($POPCNT,+,-)popcnt)
  $if($or($SHA,$M_SHA),-mattr=$if($SHA,+,-)sha)
  $if($or($AES,$M_AES),-mattr=$if($AES,+,-)aes)
  $if($or($PCLMUL,$M_PCLMUL),-mattr=$if($PCLMUL,+,-)pclmul)
  $if($or($CLFLUSHOPT,$M_CLFLUSHOPT),-mattr=$if($CLFLUSHOPT,+,-)clflushopt)
  $if($or($FSGSBASE,$M_FSGSBASE),-mattr=$if($FSGSBASE,+,-)fsgsbase)
  $if($or($RDRND,$M_RDRND),-mattr=$if($RDRND,+,-)rdrnd)
  $if($or($PREFETCHWT1,$M_PREFETCHWT1),-mattr=$if($PREFETCHWT1,+,-)prefetchwt1)
  $if($or($LWP,$M_LWP),-mattr=$if($LWP,+,-)lwp)
  $if($or($_3DNOW,$M__3DNOW),-mattr=$if($_3DNOW,+,-)3dnow)
  $if($or($_3DNOWA,$M__3DNOWA),-mattr=$if($_3DNOWA,+,-)3dnowa)
  $if($or($BMI,$M_BMI),-mattr=$if($BMI,+,-)bmi)
  $if($or($BMI2,$M_BMI2),-mattr=$if($BMI2,+,-)bmi2)
  $if($or($LZCNT,$M_LZCNT),-mattr=$if($LZCNT,+,-)lzcnt)
  $if($or($FXSR,$M_FXSR),-mattr=$if($FXSR,+,-)fxsr)
  $if($or($RTM,$M_RTM),-mattr=$if($RTM,+,-)rtm)
  $if($or($TBM,$M_TBM),-mattr=$if($TBM,+,-)tbm)
  $if($or($MWAITX,$M_MWAITX),-mattr=$if($MWAITX,+,-)mwaitx)
  $if($or($CLZERO,$M_CLZERO),-mattr=$if($CLZERO,+,-)clzero)
  $if($or($PKU,$M_PKU),-mattr=$if($PKU,+,-)pku)
  $if($or($GFNI,$M_GFNI),-mattr=$if($GFNI,+,-)gfni)
  $if($or($VAES,$M_VAES),-mattr=$if($VAES,+,-)vaes)
  $if($or($VPCLMULQDQ,$M_VPCLMULQDQ),-mattr=$if($VPCLMULQDQ,+,-)vpclmulqdq)
  $if($or($MOVDIRI,$M_MOVDIRI),-mattr=$if($MOVDIRI,+,-)movdiri)
  $if($or($MOVDIR64B,$M_MOVDIR64B),-mattr=$if($MOVDIR64B,+,-)movdir64b)
  $if($or($ADX,$M_ADX),-mattr=$if($ADX,+,-)adx)
  $if($or($AMX_BF16,$M_AMX_BF16),-mattr=$if($AMX_BF16,+,-)amx-bf16)
  $if(0,$if($or($AMX_COMPLEX,$M_AMX_COMPLEX),-mattr=$if($AMX_COMPLEX,+,-)amx-complex))
  $if($expr($LLVMVERINT >= 160),$if($or($AMX_FP16,$M_AMX_FP16),-mattr=$if($AMX_FP16,+,-)amx-fp16))
  $if($or($AMX_INT8,$M_AMX_INT8),-mattr=$if($AMX_INT8,+,-)amx-int8)
  $if($or($AMX_TILE,$M_AMX_TILE),-mattr=$if($AMX_TILE,+,-)amx-tile)
  $if($or($AVX512BF16,$M_AVX512BF16),-mattr=$if($AVX512BF16,+,-)avx512bf16)
  $if($or($AVX512FP16,$M_AVX512FP16),-mattr=$if($AVX512FP16,+,-)avx512fp16)
  $if($or($AVX512VP2INTERSECT,$M_AVX512VP2INTERSECT),-mattr=$if($AVX512VP2INTERSECT,+,-)avx512vp2intersect)
  $if($expr($LLVMVERINT >= 160),$if($or($AVXIFMA,$M_AVXIFMA),-mattr=$if($AVXIFMA,+,-)avxifma))
  $if($expr($LLVMVERINT >= 160),$if($or($AVXNECONVERT,$M_AVXNECONVERT),-mattr=$if($AVXNECONVERT,+,-)avxneconvert))
  $if($or($AVXVNNI,$M_AVXVNNI),-mattr=$if($AVXVNNI,+,-)avxvnni)
  $if($expr($LLVMVERINT >= 160),$if($or($AVXVNNIINT8,$M_AVXVNNIINT8),-mattr=$if($AVXVNNIINT8,+,-)avxvnniint8))
  $if($or($CLDEMOTE,$M_CLDEMOTE),-mattr=$if($CLDEMOTE,+,-)cldemote)
  $if($or($CLWB,$M_CLWB),-mattr=$if($CLWB,+,-)clwb)
  $if($expr($LLVMVERINT >= 160),$if($or($CMPCCXADD,$M_CMPCCXADD),-mattr=$if($CMPCCXADD,+,-)cmpccxadd))
  $if($or($CX16,$M_CX16),-mattr=$if($CX16,+,-)cx16)
  $if($or($ENQCMD,$M_ENQCMD),-mattr=$if($ENQCMD,+,-)enqcmd)
  $if(0,$if($or($HLE,$M_HLE),-mattr=$if($HLE,+,-)hle))
  $if($or($HRESET,$M_HRESET),-mattr=$if($HRESET,+,-)hreset)
  $if($or($KL,$M_KL),-mattr=$if($KL,+,-)kl)
  $if($or($MOVBE,$M_MOVBE),-mattr=$if($MOVBE,+,-)movbe)
  $if($or($PCONFIG,$M_PCONFIG),-mattr=$if($PCONFIG,+,-)pconfig)
  $if($expr($LLVMVERINT >= 160),$if($or($PREFETCHI,$M_PREFETCHI),-mattr=$if($PREFETCHI,+,-)prefetchi))
  $if($or($PRFCHW,$M_PRFCHW),-mattr=$if($PRFCHW,+,-)prfchw)
  $if($or($PTWRITE,$M_PTWRITE),-mattr=$if($PTWRITE,+,-)ptwrite)
  $if($expr($LLVMVERINT >= 160),$if($or($RAOINT,$M_RAOINT),-mattr=$if($RAOINT,+,-)raoint))
  $if($or($RDPID,$M_RDPID),-mattr=$if($RDPID,+,-)rdpid)
  $if($or($RDSEED,$M_RDSEED),-mattr=$if($RDSEED,+,-)rdseed)
  $if($or($SAHF,$M_SAHF),-mattr=$if($SAHF,+,-)sahf)
  $if($or($SERIALIZE,$M_SERIALIZE),-mattr=$if($SERIALIZE,+,-)serialize)
  $if($or($SGX,$M_SGX),-mattr=$if($SGX,+,-)sgx)
  $if($or($SHSTK,$M_SHSTK),-mattr=$if($SHSTK,+,-)shstk)
  $if($or($TSXLDTRK,$M_TSXLDTRK),-mattr=$if($TSXLDTRK,+,-)tsxldtrk)
  $if($or($UINTR,$M_UINTR),-mattr=$if($UINTR,+,-)uintr)
  $if($or($WAITPKG,$M_WAITPKG),-mattr=$if($WAITPKG,+,-)waitpkg)
  $if($or($WBNOINVD,$M_WBNOINVD),-mattr=$if($WBNOINVD,+,-)wbnoinvd)
  $if($or($WIDEKL,$M_WIDEKL),-mattr=$if($WIDEKL,+,-)widekl)
;

variable COMPREFIX is default();

replace switch -shared is
	help(Used to produce shared libraries";" implies -fpic)
	helpgroup(linker)
	set(DYNAMICLINK=1)
	set(LCRT1=)
	set(LCRTB=$GCCDIR/crtbeginS.o)
	set(LEVENTI=)
	set(LCRTE=$GCCDIR/crtendS.o)
	set(LNSPGC=)
	set(FTNMAIN=)
	set(FPIC=-shared)
	append(USRDDEF=-D__PIC__)
	append(USRDEFDEF=-def __PIC__)
	set(DOFPIC=1)
	append(CGARGS=-x 62 8)
	set(LDSHARED=
      $if($notequal($substr($TARGET,0,4),win64),-shared,/DLL)
      $if($LOCSCRIPT,$lookup($COMPBASE/$COMPSYS/$COMPVER/$(COMPLIBPREFIX)lib,nvhpcloc.ld))
     );
