src/Pure/Tools/build.scala
changeset 71651 e26cfcbe20f7
parent 71649 2acdbb6ee521
child 71652 721f143a679b
equal deleted inserted replaced
71650:95ab607398bd 71651:e26cfcbe20f7
   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,