#
#     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($ifn($ISNG,$PGATM) $ifn($index($TARGET,win64-llvm),--as-needed) $if($ISNG,$PGATM) $if($notequal($GNUATOMIC,),$PGIUNSTATIC $GNUATOMIC $PGISTATIC) $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))
     );
