
    eCi                     x    d Z ddlZddlmZmZmZmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZ d Zd	 Zed
             ZdS )a  The functions in this file define the compiler flags that emcc passes to clang.

There are three different levels of flags, each one a superset of the next:

get_target_flags(): Defines just `-target` flags and should always be
used when calling clang, or any other llvm tool.

get_clang_flags(): In addition to the target flags this function returns all the
required compiler flags.

get_cflags(): In addition to compiler flags this function also returns pre-processor
flags. For example, include paths and macro defintions.
    N   )buildingcacheportssharedutils)SIMD_INTEL_FEATURE_TOWERSIMD_NEON_FLAGS)settings)memoizec                  ,    dt          j                    gS )Nz-target)r   get_llvm_target     1/b/s/w/ir/x/w/install/emscripten/tools/compile.pyget_target_flagsr      s    
V+--	..r   c                    t                      }t          j        r!t          j        s|                    d           t          j        r|                    d           t          j        rd| vr|                    d           n>t          j        r2d| vr|                    d           d| vr|                    d           t          j        st          j	        rd| vr|                    d           t          j        st          j	        st          j
        sd| v r.t          d | D                       s|                    d           t          j        rat          d	 | D                       s"|                    d
t          j        z              t          j        dk    r|                    d           nt          j                    D ]	}|d|gz  }
|S )Nz-fignore-exceptionsz-fno-inline-functionsz-pthreadz	-matomicsz-mbulk-memoryz-fPICc              3   @   K   | ]}|                     d           V  dS )z-fvisibilityN
startswith.0as     r   	<genexpr>z"get_clang_flags.<locals>.<genexpr>9   s.      ??q||N++??????r   z-fvisibility=defaultc              3   @   K   | ]}|                     d           V  dS )z-fltoNr   r   s     r   r   z"get_clang_flags.<locals>.<genexpr>A   s.      88q||G$$888888r   z-flto=wasmz-mexception-handlingz-mllvm)r   r   DISABLE_EXCEPTION_CATCHINGWASM_EXCEPTIONSappendINLINING_LIMITPTHREADSSHARED_MEMORYMAIN_MODULERELOCATABLELINKABLEanyLTOSUPPORT_LONGJMPr   llvm_backend_args)	user_argsflagsr   s      r   get_clang_flagsr,   !   s   


% ( (1I (	LL&''' *	LL())) $""ll: $)##ll;i''ll?### h2 y8P8P	LL +X1 +X5F +'U^J^J^??Y????? +
 ll)***\ 88i88888 ,ll8hl*+++ 6))ll)*** '))  !}ee	,r   c                 0   t          |           }|                    dt          j        d          z              t          j        r|                    d           t          j        r|                    d           t          j        r|                    d           t          j        s|                    d           t          j
        |t                     d } || t                    s || t                    rHd	| vr>d
| vr:t          j        dd                    t          t          z             z   dz              |dgz  } || t          dd                    r|dgz  } || t          dd                    r|dgz  } || t          dd                    r|dgz  } || t          dd                    r|dgz  } || t          dd                    r|dgz  } || t          dd                    r|dgz  } || t          dd                    r|dgz  } || t                    r|dgz  }d| vr\t          j        s(|dd t"          j                            d!d"          z   gz  }|dd t"          j                            d!d#          z   gz  }|S )$Nz
--sysroot=T)absolutez-D__EMSCRIPTEN_TRACING__=1z -D__EMSCRIPTEN_SHARED_MEMORY__=1z-D__EMSCRIPTEN_WASM_WORKERS__=1z-DEMSCRIPTENc                     |D ]	}|| v r dS 
d S )NTr   )hayneedlesns      r   array_contains_any_ofz)get_cflags.<locals>.array_contains_any_ofj   s0      	
ctt 
 r   z	-msimd128z-mrelaxed-simdzpassing any of z, z; flags also requires passing -msimd128 (or -mrelaxed-simd)!z-D__SSE__=1r   z-D__SSE2__=1   z-D__SSE3__=1   z-D__SSSE3__=1   z-D__SSE4_1__=1   z-D__SSE4_2__=1   z-D__AVX__=1   z-D__AVX2__=1z-D__ARM_NEON__=1z	-nostdincz-Xclangz-iwithsysrootz/includefakesdlcompat)r,   r   r   get_sysrootr   EMSCRIPTEN_TRACINGr"   WASM_WORKERSSTRICTr   
add_cflagsr	   r
   r   exit_with_errorjoinUSE_SDLospath)r*   cflagsr3   s      r   
get_cflagsrG   S   s    9%%&--u0$????@@@  0
MM./// 6
MM4555 5
MM3444	 " MM.!!!68$$$  
 9&>?? CXCXYbdsCtCt )##(8	(I(I-		:RUd:d0e0ee  if  f  g  g  g
}oF9&>qrr&BCC 
~F9&>qrr&BCC 
~F9&>qrr&BCC  
F9&>qrr&BCC !
  F 9&>qrr&BCC !
  F9&>qrr&BCC 
}oF9&>qrr&BCC 
~F9o66 #
!""F	!! SObgll:y.Q.QQRRf
y/BGLLX,N,NNOOF	-r   )__doc__rD    r   r   r   r   r   cmdliner	   r
   r   r   r   r,   rG   r   r   r   <module>rK      s     
			 3 3 3 3 3 3 3 3 3 3 3 3 3 3 > > > > > > > >            / / // / /d 	> > 	> > >r   