| 783 | } |
| 784 | |
| 785 | bool BootApp::Compile() |
| 786 | { |
| 787 | DWORD startTick = BFTickCount(); |
| 788 | |
| 789 | mSystem = BfSystem_Create(); |
| 790 | |
| 791 | mCompiler = BfSystem_CreateCompiler(mSystem, false); |
| 792 | |
| 793 | String projectName = GetFileName(mTargetPath); |
| 794 | int dotPos = (int)projectName.IndexOf('.'); |
| 795 | if (dotPos != -1) |
| 796 | projectName.RemoveToEnd(dotPos); |
| 797 | if (projectName.IsEmpty()) |
| 798 | projectName.Append("BeefProject"); |
| 799 | |
| 800 | mProject = BfSystem_CreateProject(mSystem, projectName.c_str(), GetFileDir(mTargetPath).c_str()); |
| 801 | |
| 802 | if (mIsCERun) |
| 803 | { |
| 804 | mCELibProject = BfSystem_CreateProject(mSystem, "BeefLib", GetFileDir(mTargetPath).c_str()); |
| 805 | |
| 806 | BfProjectFlags flags = BfProjectFlags_None; |
| 807 | BfProject_SetOptions(mCELibProject, BfTargetType_BeefLib, "", mDefines.c_str(), mOptLevel, 0, 0, 0, flags); |
| 808 | } |
| 809 | |
| 810 | if (!mDefines.IsEmpty()) |
| 811 | mDefines.Append("\n"); |
| 812 | mDefines.Append("BF_64_BIT"); |
| 813 | mDefines.Append("\nBF_LITTLE_ENDIAN"); |
| 814 | mDefines.Append("\n"); |
| 815 | mDefines.Append(BF_PLATFORM_NAME); |
| 816 | |
| 817 | int ltoType = 0; |
| 818 | BfProjectFlags flags = BfProjectFlags_None; |
| 819 | if (mIsCERun) |
| 820 | { |
| 821 | flags = (BfProjectFlags)(flags | BfProjectFlags_SingleModule | BfProjectFlags_AlwaysIncludeAll); |
| 822 | if (mAsmKind == BfAsmKind_ATT) |
| 823 | flags = (BfProjectFlags)(flags | BfProjectFlags_AsmOutput | BfProjectFlags_AsmOutput_ATT); |
| 824 | else if (mAsmKind == BfAsmKind_Intel) |
| 825 | flags = (BfProjectFlags)(flags | BfProjectFlags_AsmOutput); |
| 826 | } |
| 827 | BfProject_SetOptions(mProject, mTargetType, mStartupObject.c_str(), mDefines.c_str(), mOptLevel, ltoType, 0, 0, flags); |
| 828 | |
| 829 | if (mCELibProject != NULL) |
| 830 | BfProject_AddDependency(mProject, mCELibProject); |
| 831 | |
| 832 | mPassInstance = BfSystem_CreatePassInstance(mSystem); |
| 833 | |
| 834 | Beefy::String exePath; |
| 835 | BfpGetStrHelper(exePath, [](char* outStr, int* inOutStrSize, BfpResult* result) |
| 836 | { |
| 837 | BfpSystem_GetExecutablePath(outStr, inOutStrSize, (BfpSystemResult*)result); |
| 838 | }); |
| 839 | mBuildDir = GetFileDir(exePath) + "/build"; |
| 840 | |
| 841 | RecursiveCreateDirectory(mBuildDir + "/" + projectName); |
| 842 | if (mIsCERun) |
no test coverage detected