@@ -117,7 +117,7 @@ const char *const CtHelpHint =
117117const char *const CmakeScriptMigrationHelpHint =
118118 " Warning: CMake build script file like CMakeLists.txt is not found, so no CMake build script file will be migrated." ;
119119
120- const char *const SetupScriptMigrationHelpHint =
120+ const char *const PythonBuildScriptMigrationHelpHint =
121121 " Warning: No Python file is found, so no Python build script file will be migrated." ;
122122
123123const char *const BuildScriptMigrationHelpHint =
@@ -582,28 +582,43 @@ void checkIncMigrationOrExit() {
582582 }
583583}
584584
585- int migrateCmakeScript (const clang::tooling::UnifiedPath &InRoot,
586- const clang::tooling::UnifiedPath &OutRoot) {
587- if (!cmakeScriptNotFound ()) {
588- runWithCrashGuard (
589- [&]() { doCmakeScriptMigration (InRoot, OutRoot); },
590- " Error: dpct internal error. Migrating CMake scripts in \" " +
591- InRootPath.getCanonicalPath ().str () +
592- " \" causing the error skipped. Migration continues.\n " );
585+ int migrateBuildScripts (const clang::tooling::UnifiedPath &InRoot,
586+ const clang::tooling::UnifiedPath &OutRoot) {
587+ if (cmakeScriptNotFound () && pythonBuildScriptNotFound ()) {
588+ std::cout << BuildScriptMigrationHelpHint << " \n " ;
589+ } else {
590+ if (DpctGlobalInfo::migrateCMakeScripts ()) {
591+ if (!cmakeScriptNotFound ()) {
592+ runWithCrashGuard (
593+ [&]() { doCmakeScriptMigration (InRoot, OutRoot); },
594+ " Error: dpct internal error. Migrating CMake scripts in \" " +
595+ InRootPath.getCanonicalPath ().str () +
596+ " \" causing the error skipped. Migration continues.\n " );
597+ } else {
598+ std::cout << CmakeScriptMigrationHelpHint << " \n " ;
599+ }
600+ }
601+
602+ if (DpctGlobalInfo::migratePythonScripts ()) {
603+ if (pythonMigrationRulesRegistered () && !pythonBuildScriptNotFound ()) {
604+ runWithCrashGuard (
605+ [&]() { doPythonBuildScriptMigration (InRoot, OutRoot); },
606+ " Error: dpct internal error. Migrating Python build scripts in \" " +
607+ InRoot.getCanonicalPath ().str () +
608+ " \" causing the error skipped. Migration continues.\n " );
609+ } else if (pythonBuildScriptNotFound ()) {
610+ std::cout << PythonBuildScriptMigrationHelpHint << " \n " ;
611+ }
612+ }
593613 }
614+
594615 return MigrationSucceeded;
595616}
596617
597- int migratePythonScript (const clang::tooling::UnifiedPath &InRoot,
598- const clang::tooling::UnifiedPath &OutRoot) {
599- if (!pythonBuildScriptNotFound ()) {
600- runWithCrashGuard (
601- [&]() { doPythonBuildScriptMigration (InRoot, OutRoot); },
602- " Error: dpct internal error. Migrating Python build scripts in \" " +
603- InRoot.getCanonicalPath ().str () +
604- " \" causing the error skipped. Migration continues.\n " );
605- }
606- return MigrationSucceeded;
618+ void doBuildScriptMigration () {
619+ loadMainSrcFileInfo (OutRootPath);
620+ collectBuildScripts (InRootPath, OutRootPath);
621+ migrateBuildScripts (InRootPath, OutRootPath);
607622}
608623
609624// print APIMapping of Query
@@ -846,17 +861,21 @@ int runDPCT(int argc, const char **argv) {
846861 }
847862 }
848863
849- if ((BuildScript == BuildScriptKind::BS_Cmake ||
850- BuildScript == BuildScriptKind::BS_Python) &&
851- !OptParser->getSourcePathList ().empty ()) {
852- ShowStatus (MigrateBuildScriptIncorrectUse);
853- dpctExit (MigrateBuildScriptIncorrectUse);
854- }
855- if ((BuildScript == BuildScriptKind::BS_Cmake ||
856- BuildScript == BuildScriptKind::BS_Python) &&
857- MigrateBuildScriptOnly) {
858- ShowStatus (MigrateBuildScriptAndMigrateBuildScriptOnlyBothUse);
859- dpctExit (MigrateBuildScriptAndMigrateBuildScriptOnlyBothUse);
864+ DpctGlobalInfo::setBuildScript (BuildScript.getBits ());
865+ bool BuildScriptsSpecified = DpctGlobalInfo::migrateCMakeScripts () ||
866+ DpctGlobalInfo::migratePythonScripts ();
867+ if (MigrateBuildScriptOnly) {
868+ if (!BuildScriptsSpecified) {
869+ llvm::errs () << getBuildScriptNotSpecifiedWarning ();
870+ auto CMakeSelectionBits = 1 << (unsigned )BuildScriptKind::BS_CMake;
871+ DpctGlobalInfo::setBuildScript (CMakeSelectionBits);
872+ BuildScriptsSpecified = true ;
873+ }
874+ } else {
875+ if (BuildScriptsSpecified && !OptParser->getSourcePathList ().empty ()) {
876+ ShowStatus (MigrateBuildScriptIncorrectUse);
877+ dpctExit (MigrateBuildScriptIncorrectUse);
878+ }
860879 }
861880
862881 int SDKIncPathRes = checkSDKPathOrIncludePath (CudaIncludePath);
@@ -1030,9 +1049,8 @@ int runDPCT(int argc, const char **argv) {
10301049 Tool.setPrintErrorMessage (false );
10311050 } else {
10321051 IsUsingDefaultOutRoot = OutRootPath.getPath ().empty ();
1033- bool NeedCheckOutRootEmpty = !(BuildScript == BuildScriptKind::BS_Cmake ||
1034- BuildScript == BuildScriptKind::BS_Python) &&
1035- !MigrateBuildScriptOnly;
1052+ bool NeedCheckOutRootEmpty =
1053+ !(MigrateBuildScriptOnly || BuildScriptsSpecified);
10361054 if (!DpctGlobalInfo::isAnalysisModeEnabled () && IsUsingDefaultOutRoot &&
10371055 !getDefaultOutRoot (OutRootPath, NeedCheckOutRootEmpty) && !EnableCodePin) {
10381056 ShowStatus (MigrationErrorInvalidInRootOrOutRoot);
@@ -1133,7 +1151,6 @@ int runDPCT(int argc, const char **argv) {
11331151 DpctGlobalInfo::setKeepOriginCode (KeepOriginalCode);
11341152 DpctGlobalInfo::setSyclNamedLambda (SyclNamedLambda);
11351153 DpctGlobalInfo::setUsmLevel (USMLevel);
1136- DpctGlobalInfo::setBuildScript (BuildScript);
11371154 // When enable codepin feature, the incremental migration will be disabled.
11381155 DpctGlobalInfo::setIsIncMigration (!NoIncrementalMigration && !EnableCodePin &&
11391156 !MigrateBuildScriptOnly);
@@ -1186,8 +1203,7 @@ int runDPCT(int argc, const char **argv) {
11861203 clang::dpct::initHeaderSpellings ();
11871204
11881205 // load user defind rules in case.
1189- if (MigrateBuildScriptOnly ||
1190- DpctGlobalInfo::getBuildScript () == BuildScriptKind::BS_Cmake) {
1206+ if (DpctGlobalInfo::migrateCMakeScripts ()) {
11911207 SmallString<128 > FilePath1 (DpctInstallPath.getCanonicalPath ());
11921208 llvm::sys::path::append (FilePath1,
11931209 Twine (" extensions/cmake_rules/"
@@ -1204,18 +1220,24 @@ int runDPCT(int argc, const char **argv) {
12041220 dpct::genCmakeHelperFunction (dpct::DpctGlobalInfo::getOutRoot ());
12051221 }
12061222
1207- if (MigrateBuildScriptOnly ||
1208- DpctGlobalInfo::getBuildScript () == BuildScriptKind::BS_Python) {
1209- SmallString<128 > PythonRuleFilePath (DpctInstallPath.getCanonicalPath ());
1210- llvm::sys::path::append (
1211- PythonRuleFilePath,
1212- Twine (" extensions/python_rules/"
1213- " python_build_script_migration_rule_ipex.yaml" ));
1214- if (llvm::sys::fs::exists (PythonRuleFilePath)) {
1215- std::vector<clang::tooling::UnifiedPath> PythonRuleFiles{
1216- PythonRuleFilePath};
1217- importRules (PythonRuleFiles);
1218- // generage helper functions file in the outroot dir here
1223+ if (DpctGlobalInfo::migratePythonScripts ()) {
1224+ // check if RuleFilePaths contains any user specified python migration rule
1225+ // file
1226+ bool pythonRuleFilePresent = std::any_of (
1227+ RuleFilePath.begin (), RuleFilePath.end (),
1228+ [](const clang::tooling::UnifiedPath &path) {
1229+ return path.getPath ().contains (" python_build_script_migration_rule" );
1230+ });
1231+
1232+ if (!pythonRuleFilePresent) {
1233+ if (MigrateBuildScriptOnly) {
1234+ ShowStatus (
1235+ MigratePythonBuildScriptSpecifiedButPythonRuleFileNotSpecified);
1236+ dpctExit (
1237+ MigratePythonBuildScriptSpecifiedButPythonRuleFileNotSpecified);
1238+ }
1239+
1240+ llvm::errs () << getPythonRuleFileNotProvidedWarning ();
12191241 }
12201242 }
12211243
@@ -1276,10 +1298,9 @@ int runDPCT(int argc, const char **argv) {
12761298 setValueToOptMap (clang::dpct::OPTION_UsmLevel,
12771299 static_cast <unsigned int >(DpctGlobalInfo::getUsmLevel ()),
12781300 USMLevel.getNumOccurrences ());
1279- setValueToOptMap (
1280- clang::dpct::OPTION_BuildScript,
1281- static_cast <unsigned int >(DpctGlobalInfo::getBuildScript ()),
1282- BuildScript.getNumOccurrences ());
1301+ setValueToOptMap (clang::dpct::OPTION_BuildScript,
1302+ DpctGlobalInfo::getBuildScript (),
1303+ BuildScript.getNumOccurrences ());
12831304 setValueToOptMap (clang::dpct::OPTION_OptimizeMigration,
12841305 OptimizeMigration.getValue (),
12851306 OptimizeMigration.getNumOccurrences ());
@@ -1301,14 +1322,7 @@ int runDPCT(int argc, const char **argv) {
13011322 }
13021323 // OC_Action: only migrate Build scripts.
13031324 if (MigrateBuildScriptOnly) {
1304- loadMainSrcFileInfo (OutRootPath);
1305- collectCmakeScriptsSpecified (OptParser, InRootPath, OutRootPath);
1306- collectPythonBuildScriptsSpecified (OptParser, InRootPath, OutRootPath);
1307- migrateCmakeScript (InRootPath, OutRootPath);
1308- migratePythonScript (InRootPath, OutRootPath);
1309- if (cmakeScriptNotFound () && pythonBuildScriptNotFound ()) {
1310- std::cout << BuildScriptMigrationHelpHint << " \n " ;
1311- }
1325+ doBuildScriptMigration ();
13121326 ShowStatus (MigrationBuildScriptCompleted);
13131327 dpctExit (MigrationSucceeded, false );
13141328 }
@@ -1439,23 +1453,10 @@ int runDPCT(int argc, const char **argv) {
14391453 OutRootPath.getCanonicalPath ().str () +
14401454 " \" causing the error skipped. Migration continues.\n " );
14411455
1442- // OC_Action: Migrate CMake scripts after Code Migration
1443- if (DpctGlobalInfo::getBuildScript () == BuildScriptKind::BS_Cmake) {
1444- loadMainSrcFileInfo (OutRootPath);
1445- collectCmakeScripts (InRootPath, OutRootPath);
1446- migrateCmakeScript (InRootPath, OutRootPath);
1447- if (cmakeScriptNotFound ()) {
1448- std::cout << CmakeScriptMigrationHelpHint << " \n " ;
1449- }
1450- }
1451-
1452- if (DpctGlobalInfo::getBuildScript () == BuildScriptKind::BS_Python) {
1453- loadMainSrcFileInfo (OutRootPath);
1454- collectPythonBuildScripts (InRootPath, OutRootPath);
1455- migratePythonScript (InRootPath, OutRootPath);
1456- if (pythonBuildScriptNotFound ()) {
1457- std::cout << SetupScriptMigrationHelpHint << " \n " ;
1458- }
1456+ // OC_Action: Migrate CMake/Python build scripts after Code Migration
1457+ if (DpctGlobalInfo::migrateCMakeScripts () ||
1458+ DpctGlobalInfo::migratePythonScripts ()) {
1459+ doBuildScriptMigration ();
14591460 }
14601461
14611462 ShowStatus (Status);
0 commit comments