192 val info: Sessions.Info, |
192 val info: Sessions.Info, |
193 deps: Sessions.Deps, |
193 deps: Sessions.Deps, |
194 store: Sessions.Store, |
194 store: Sessions.Store, |
195 do_store: Boolean, |
195 do_store: Boolean, |
196 verbose: Boolean, |
196 verbose: Boolean, |
197 pide: Boolean, |
|
198 val numa_node: Option[Int], |
197 val numa_node: Option[Int], |
199 command_timings: List[Properties.T]) |
198 command_timings: List[Properties.T]) |
200 { |
199 { |
201 private val options = NUMA.policy_options(info.options, numa_node) |
200 private val options = NUMA.policy_options(info.options, numa_node) |
202 |
201 |
250 List("ML_Heap.save_child " + |
249 List("ML_Heap.save_child " + |
251 ML_Syntax.print_string_bytes(File.platform_path(store.output_heap(name)))) |
250 ML_Syntax.print_string_bytes(File.platform_path(store.output_heap(name)))) |
252 } |
251 } |
253 else Nil |
252 else Nil |
254 |
253 |
255 if (pide) { |
254 if (options.bool("pide_build")) { |
256 val resources = new Resources(sessions_structure, deps(parent)) |
255 val resources = new Resources(sessions_structure, deps(parent)) |
257 val session = new Session(options, resources) |
256 val session = new Session(options, resources) |
258 val handler = new Handler(progress, session, name) |
257 val handler = new Handler(progress, session, name) |
259 session.init_protocol_handler(handler) |
258 session.init_protocol_handler(handler) |
260 |
259 |
417 fresh_build: Boolean = false, |
416 fresh_build: Boolean = false, |
418 no_build: Boolean = false, |
417 no_build: Boolean = false, |
419 soft_build: Boolean = false, |
418 soft_build: Boolean = false, |
420 verbose: Boolean = false, |
419 verbose: Boolean = false, |
421 export_files: Boolean = false, |
420 export_files: Boolean = false, |
422 pide: Boolean = false, |
|
423 requirements: Boolean = false, |
421 requirements: Boolean = false, |
424 all_sessions: Boolean = false, |
422 all_sessions: Boolean = false, |
425 base_sessions: List[String] = Nil, |
423 base_sessions: List[String] = Nil, |
426 exclude_session_groups: List[String] = Nil, |
424 exclude_session_groups: List[String] = Nil, |
427 exclude_sessions: List[String] = Nil, |
425 exclude_sessions: List[String] = Nil, |
652 store.clean_output(name) |
650 store.clean_output(name) |
653 using(store.open_database(name, output = true))(store.init_session_info(_, name)) |
651 using(store.open_database(name, output = true))(store.init_session_info(_, name)) |
654 |
652 |
655 val numa_node = numa_nodes.next(used_node) |
653 val numa_node = numa_nodes.next(used_node) |
656 val job = |
654 val job = |
657 new Job(progress, name, info, deps, store, do_store, verbose, pide = pide, |
655 new Job(progress, name, info, deps, store, do_store, verbose, |
658 numa_node, queue.command_timings(name)) |
656 numa_node, queue.command_timings(name)) |
659 loop(pending, running + (name -> (ancestor_heaps, job)), results) |
657 loop(pending, running + (name -> (ancestor_heaps, job)), results) |
660 } |
658 } |
661 else { |
659 else { |
662 progress.echo(name + " CANCELLED") |
660 progress.echo(name + " CANCELLED") |
740 val build_options = Word.explode(Isabelle_System.getenv("ISABELLE_BUILD_OPTIONS")) |
738 val build_options = Word.explode(Isabelle_System.getenv("ISABELLE_BUILD_OPTIONS")) |
741 |
739 |
742 var base_sessions: List[String] = Nil |
740 var base_sessions: List[String] = Nil |
743 var select_dirs: List[Path] = Nil |
741 var select_dirs: List[Path] = Nil |
744 var numa_shuffling = false |
742 var numa_shuffling = false |
745 var pide = false |
|
746 var requirements = false |
743 var requirements = false |
747 var soft_build = false |
744 var soft_build = false |
748 var exclude_session_groups: List[String] = Nil |
745 var exclude_session_groups: List[String] = Nil |
749 var all_sessions = false |
746 var all_sessions = false |
750 var build_heap = false |
747 var build_heap = false |
766 |
763 |
767 Options are: |
764 Options are: |
768 -B NAME include session NAME and all descendants |
765 -B NAME include session NAME and all descendants |
769 -D DIR include session directory and select its sessions |
766 -D DIR include session directory and select its sessions |
770 -N cyclic shuffling of NUMA CPU nodes (performance tuning) |
767 -N cyclic shuffling of NUMA CPU nodes (performance tuning) |
771 -P build via PIDE protocol |
|
772 -R operate on requirements of selected sessions |
768 -R operate on requirements of selected sessions |
773 -S soft build: only observe changes of sources, not heap images |
769 -S soft build: only observe changes of sources, not heap images |
774 -X NAME exclude sessions from group NAME and all descendants |
770 -X NAME exclude sessions from group NAME and all descendants |
775 -a select all sessions |
771 -a select all sessions |
776 -b build heap images |
772 -b build heap images |
791 |
787 |
792 """ + Library.prefix_lines(" ", Build_Log.Settings.show()) + "\n", |
788 """ + Library.prefix_lines(" ", Build_Log.Settings.show()) + "\n", |
793 "B:" -> (arg => base_sessions = base_sessions ::: List(arg)), |
789 "B:" -> (arg => base_sessions = base_sessions ::: List(arg)), |
794 "D:" -> (arg => select_dirs = select_dirs ::: List(Path.explode(arg))), |
790 "D:" -> (arg => select_dirs = select_dirs ::: List(Path.explode(arg))), |
795 "N" -> (_ => numa_shuffling = true), |
791 "N" -> (_ => numa_shuffling = true), |
796 "P" -> (_ => pide = true), |
|
797 "R" -> (_ => requirements = true), |
792 "R" -> (_ => requirements = true), |
798 "S" -> (_ => soft_build = true), |
793 "S" -> (_ => soft_build = true), |
799 "X:" -> (arg => exclude_session_groups = exclude_session_groups ::: List(arg)), |
794 "X:" -> (arg => exclude_session_groups = exclude_session_groups ::: List(arg)), |
800 "a" -> (_ => all_sessions = true), |
795 "a" -> (_ => all_sessions = true), |
801 "b" -> (_ => build_heap = true), |
796 "b" -> (_ => build_heap = true), |
841 fresh_build = fresh_build, |
836 fresh_build = fresh_build, |
842 no_build = no_build, |
837 no_build = no_build, |
843 soft_build = soft_build, |
838 soft_build = soft_build, |
844 verbose = verbose, |
839 verbose = verbose, |
845 export_files = export_files, |
840 export_files = export_files, |
846 pide = pide, |
|
847 requirements = requirements, |
841 requirements = requirements, |
848 all_sessions = all_sessions, |
842 all_sessions = all_sessions, |
849 base_sessions = base_sessions, |
843 base_sessions = base_sessions, |
850 exclude_session_groups = exclude_session_groups, |
844 exclude_session_groups = exclude_session_groups, |
851 exclude_sessions = exclude_sessions, |
845 exclude_sessions = exclude_sessions, |