| 852 | } |
| 853 | |
| 854 | void BfCodeGen::WriteObjectFile(BfModule* bfModule, const StringImpl& outFileName, const BfCodeGenOptions& options) |
| 855 | { |
| 856 | mQueuedCount++; |
| 857 | |
| 858 | BfLogSys(bfModule->mSystem, "WriteObjectFile %s\n", outFileName.c_str()); |
| 859 | |
| 860 | BfCodeGenRequest* codeGenRequest = new BfCodeGenRequest(); |
| 861 | mRequests.push_back(codeGenRequest); |
| 862 | |
| 863 | { |
| 864 | BP_ZONE("WriteObjectFile_GetBufferData"); |
| 865 | bfModule->mBfIRBuilder->GetBufferData(codeGenRequest->mOutBuffer); |
| 866 | } |
| 867 | |
| 868 | auto rootModule = bfModule; |
| 869 | while (rootModule->mParentModule != NULL) |
| 870 | rootModule = rootModule->mParentModule; |
| 871 | |
| 872 | codeGenRequest->mSrcModule = rootModule; |
| 873 | codeGenRequest->mOutFileName = outFileName; |
| 874 | codeGenRequest->mData = codeGenRequest->mOutBuffer; |
| 875 | codeGenRequest->mOptions = options; |
| 876 | if (ExternWriteObjectFile(codeGenRequest)) |
| 877 | return; |
| 878 | |
| 879 | DoWriteObjectFile(codeGenRequest, (void*)&codeGenRequest->mOutBuffer[0], (int)codeGenRequest->mOutBuffer.size(), codeGenRequest->mOutFileName, NULL); |
| 880 | |
| 881 | #ifdef DBG_FORCE_SYNCHRONIZED |
| 882 | while (mRequests.size() != 0) |
| 883 | { |
| 884 | UpdateStats(); |
| 885 | } |
| 886 | |
| 887 | BfLogSys(bfModule->mSystem, "WriteObjectFile Done\n"); |
| 888 | #endif |
| 889 | } |
| 890 | |
| 891 | String BfCodeGen::GetBuildValue(const StringImpl& buildDir, const StringImpl& key) |
| 892 | { |