1515
1616#include " assembler.h"
1717
18+ #if !defined(_WIN32) && !defined(__APPLE__)
19+ #include " sha256.h"
20+ #endif
21+
1822void indexKeywords (Indx* indx); // defined in asmparse.y
1923
2024unsigned int g_uCodePage = CP_ACP;
@@ -28,6 +32,7 @@ Assembler::Assembler()
2832{
2933 m_pDisp = NULL ;
3034 m_pEmitter = NULL ;
35+ m_pInternalEmitForDeterministicMvid = NULL ;
3136 m_pImporter = NULL ;
3237
3338 char * pszFQN = new char [16 ];
@@ -107,6 +112,7 @@ Assembler::Assembler()
107112 m_fGeneratePDB = FALSE ;
108113 m_fIsMscorlib = FALSE ;
109114 m_fOptimize = FALSE ;
115+ m_fDeterministic = FALSE ;
110116 m_tkSysObject = 0 ;
111117 m_tkSysString = 0 ;
112118 m_tkSysValue = 0 ;
@@ -208,6 +214,11 @@ Assembler::~Assembler()
208214 m_pEmitter->Release ();
209215 m_pEmitter = NULL ;
210216 }
217+ if (m_pInternalEmitForDeterministicMvid != NULL )
218+ {
219+ m_pInternalEmitForDeterministicMvid->Release ();
220+ m_pInternalEmitForDeterministicMvid = NULL ;
221+ }
211222 if (m_pPortablePdbWriter != NULL )
212223 {
213224 delete m_pPortablePdbWriter;
@@ -233,13 +244,19 @@ BOOL Assembler::Init(BOOL generatePdb)
233244 }
234245
235246 if (FAILED (CreateICeeFileGen (&m_pCeeFileGen))) return FALSE ;
236-
237247 if (FAILED (m_pCeeFileGen->CreateCeeFileEx (&m_pCeeFile,(ULONG)m_dwCeeFileFlags))) return FALSE ;
238-
239248 if (FAILED (m_pCeeFileGen->GetSectionCreate (m_pCeeFile, " .il" , sdReadOnly, &m_pILSection))) return FALSE ;
240249 if (FAILED (m_pCeeFileGen->GetSectionCreate (m_pCeeFile, " .sdata" , sdReadWrite, &m_pGlobalDataSection))) return FALSE ;
241250 if (FAILED (m_pCeeFileGen->GetSectionCreate (m_pCeeFile, " .tls" , sdReadWrite, &m_pTLSSection))) return FALSE ;
242251
252+ #if !defined(_WIN32) && !defined(__APPLE__)
253+ if (m_fDeterministic && !IsOpenSslAvailable ())
254+ {
255+ fprintf (stderr, " OpenSSL is not available, but required for build determinism\n " );
256+ return FALSE ;
257+ }
258+ #endif
259+
243260 m_fGeneratePDB = generatePdb;
244261
245262 return TRUE ;
0 commit comments