Commit: f2140033fc1f8428a48cb000bc2154250aa9ba1a Author: Anatol Belski <[email protected]> Thu, 10 Aug 2017 03:48:28 +0200 Parents: 3f5bf6b1b005483aa1712a24d1404d1a6c0e00f3 Branches: master
Link: http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=f2140033fc1f8428a48cb000bc2154250aa9ba1a Log: basic pgo support with the pgo_integration branch yet Changed paths: M data/config/branch/x64/phpmaster.ini M data/config/branch/x86/phpmaster.ini M include/BuildVC.php M script/snap.php Diff: diff --git a/data/config/branch/x64/phpmaster.ini b/data/config/branch/x64/phpmaster.ini index a2df559..748b4f7 100644 --- a/data/config/branch/x64/phpmaster.ini +++ b/data/config/branch/x64/phpmaster.ini @@ -7,7 +7,7 @@ build_dir=C:/php-snap-build/obj-x64 build_location=C:/php-snap-build/snap_master/vc15/x64 appver= debug=0 -pgo=0 +pgo=1 compiler=vc15 arch=x64 diff --git a/data/config/branch/x86/phpmaster.ini b/data/config/branch/x86/phpmaster.ini index 9c9b497..24176d7 100644 --- a/data/config/branch/x86/phpmaster.ini +++ b/data/config/branch/x86/phpmaster.ini @@ -7,7 +7,7 @@ build_dir=C:/php-snap-build/obj build_location=C:/php-snap-build/snap_master/vc15/x86 appver= debug=0 -pgo=0 +pgo=1 compiler=vc15 arch=x86 diff --git a/include/BuildVC.php b/include/BuildVC.php index 47ee5f6..c32de9c 100644 --- a/include/BuildVC.php +++ b/include/BuildVC.php @@ -120,6 +120,41 @@ class BuildVC { $this->log_buildconf = $ret['log']; } + function isPgoSetup() + { + $cmd = 'phpsdk_pgo --ready'; + $ret = exec_single_log($cmd, $this->build_dir, $this->env); + if (!$ret) { + throw new \Exception('phpsdk_pgo --ready failed'); + } + + return 0 == $ret["return_value"]; + } + + function pgoInit() + { + $this->log_pgo = isset($this->log_pgo) ? $this->log_pgo . "\n" : ""; + + $cmd = 'phpsdk_pgo --init'; + $ret = exec_single_log($cmd, $this->build_dir, $this->env); + if (!$ret || 0 != $ret["return_value"]) { + throw new \Exception('phpsdk_pgo --init failed'); + } + $this->log_pgo .= $ret["log"]; + } + + function pgoTrain() + { + $this->log_pgo = isset($this->log_pgo) ? $this->log_pgo . "\n" : ""; + + $cmd = 'phpsdk_pgo --train'; + $ret = exec_single_log($cmd, $this->build_dir, $this->env); + if (!$ret || 0 != $ret["return_value"]) { + throw new \Exception('phpsdk_pgo --train failed'); + } + $this->log_pgo .= $ret["log"]; + } + function configure($extra = false, $rm_obj = true) { $args = $this->branch->config->getConfigureOptions($this->build_name) . ($extra ?: $extra); diff --git a/script/snap.php b/script/snap.php index d960535..6b4c37b 100644 --- a/script/snap.php +++ b/script/snap.php @@ -65,27 +65,6 @@ for ($i = 0; $i < count($builds_top) && ($force || $branch->hasNewRevision()); $ $have_build_run = true; echo "processing revision $last_rev\n"; - if ($branch->config->getPGO() == 1) { // Check revision to maintain concurrent builds - $fh = fopen(getenv("PHP_RMTOOLS_LOCK_PATH") . "/snaps_".$build_type.".lock", "a"); - fwrite($fh, "$last_rev"); - fclose($fh); - if (strcmp($build_type, 'nts') == 0) { - if (!file_exists(getenv("PHP_RMTOOLS_LOCK_PATH") . "/snaps_ts.lock")) { - echo "Waiting for thread-safe build, exiting.\n"; - exit(0); - } - else { - $fh = fopen(getenv("PHP_RMTOOLS_LOCK_PATH") . "/snaps_ts.lock", "r"); - $data = fread($fh, filesize(getenv("PHP_RMTOOLS_LOCK_PATH") . "/snaps_ts.lock")); - fclose($fh); - if (!preg_match("/$last_rev/", $data)) { - echo "Revision mismatch on concurrent builds, waiting for ts build to complete\n"; - exit(0); - } - } - } - } - $build_dir_parent = $branch->config->getBuildLocation(); if (!is_dir($build_dir_parent)) { @@ -143,6 +122,18 @@ for ($i = 0; $i < count($builds_top) && ($force || $branch->hasNewRevision()); $ echo "running build in <$build_src_path>\n"; $build->buildconf(); if ($branch->config->getPGO() == 1) { + /* For now it is enough to just get a very same + build of PHP to setup the environment. This + only needs to be done once for setup. In further + also, if there are any difference with TS/NTS, + there might be some separate setup needed. */ + if (!$build->isPgoSetup()) { + echo "Preparing PGO training environment\n"; + $build->configure(); + $build->make(); + $build->pgoInit(); + $build->make(' clean-all'); + } echo "Creating PGI build\n"; $build->configure(' "--enable-pgi" '); } @@ -150,39 +141,32 @@ for ($i = 0; $i < count($builds_top) && ($force || $branch->hasNewRevision()); $ $build->configure(); } $build->make(); - $html_make_log = $build->getMakeLogParsed(); - $build->makeArchive(); + /* $html_make_log = $build->getMakeLogParsed(); */ } catch (Exception $e) { echo $e->getMessage() . "\n"; echo $build->log_buildconf; } if ($branch->config->getPGO() == 1) { - if ($build->archive_path) { - echo "Running pgo_controller.ps1 with PGI build at $build->archive_path, ver=$branch_name, opcache=0\n"; - $cmd = 'c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -Command C:\php-sdk\pgo-build\pgo_controller.ps1 -PHPBUILD '. $build->archive_path . ' -PHPVER ' . $branch_name; - $pgolog = rm\exec_single_log($cmd); - print_r($pgolog); - if ( preg_match('/5\.5/', $branch_name) ) { - echo "Running pgo_controller.ps1 with PGI build at $build->archive_path, ver=$branch_name, opcache=1\n"; - $cmd = 'c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -Command C:\php-sdk\pgo-build\pgo_controller.ps1 -PHPBUILD '. $build->archive_path . ' -PHPVER ' . $branch_name . ' -OPCACHE 1'; - $pgolog = rm\exec_single_log($cmd); - print_r($pgolog); - } - - echo "Creating PGO build\n"; - try { - $build->make(' clean-pgo'); - $build->configure(' "--with-pgo" ', false); - $build->make(); - $html_make_log = $build->getMakeLogParsed(); - $build->makeArchive(); - } catch (Exception $e) { - echo $e->getMessage() . "\n"; - echo $build->log_buildconf; - } + echo "Creating PGO build\n"; + try { + $build->pgoTrain(); + $build->make(' clean-pgo'); + $build->configure(' "--with-pgo" ', false); + $build->make(); + $html_make_log = $build->getMakeLogParsed(); + } catch (Exception $e) { + echo $e->getMessage() . "\n"; + echo $build->log_buildconf; } } + try { + $build->makeArchive(); + } catch (Exception $e) { + echo $e->getMessage() . "\n"; + echo $build->log_buildconf; + } + if ($build->archive_path) { copy($build->archive_path, $toupload_dir . '/php-' . $branch_name_short . '-' . $build_name . '-r'. $last_rev . '.zip'); } @@ -201,6 +185,9 @@ for ($i = 0; $i < count($builds_top) && ($force || $branch->hasNewRevision()); $ file_put_contents($toupload_dir . '/logs/configure-' . $build_name . '-r'. $last_rev . '.txt', $build->log_configure); file_put_contents($toupload_dir . '/logs/make-' . $build_name . '-r'. $last_rev . '.txt', $build->log_make); file_put_contents($toupload_dir . '/logs/archive-' . $build_name . '-r'. $last_rev . '.txt', $build->log_archive); + if ($branch->config->getPGO() == 1) { + file_put_contents($toupload_dir . '/logs/pgo-' . $build_name . '-r'. $last_rev . '.txt', $build->log_pgo); + } $html_make_log = $build->getMakeLogParsed(); file_put_contents($toupload_dir . '/logs/make-' . $build_name . '-r'. $last_rev . '.html', $html_make_log); -- PHP Webmaster List Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
