Update GN bootstrap build

Bootstrap didn't work due to recent modifications in base.
Unfortunately some new dependencies are required on OSX
and that required adding generated_build_date.h to be
available separately for the bootstrap process.

Tested on Linux and OSX.

BUG=None
TEST=./tools/gn/bootstrap/bootstrap.py
R=brettw@chromium.org,tfarina@chromium.org

Review URL: https://codereview.chromium.org/1692303004

Cr-Original-Commit-Position: refs/heads/master@{#376133}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: cda4afd7efda6e3034d58d9f375b01ff3f36d220
diff --git a/tools/gn/bootstrap/bootstrap.py b/tools/gn/bootstrap/bootstrap.py
index 2f5e995..ac8adc8 100755
--- a/tools/gn/bootstrap/bootstrap.py
+++ b/tools/gn/bootstrap/bootstrap.py
@@ -115,23 +115,40 @@
 
 
 def build_gn_with_ninja_manually(tempdir, options):
-  write_ninja(os.path.join(tempdir, 'build.ninja'), options)
+  root_gen_dir = os.path.join(tempdir, 'gen')
+  mkdir_p(root_gen_dir)
+
+  if is_mac:
+    # //base/build_time.cc needs base/generated_build_date.h,
+    # and this file is only included for Mac builds.
+    mkdir_p(os.path.join(root_gen_dir, 'base'))
+    check_call([
+        os.path.join(SRC_ROOT, 'build', 'write_build_date_header.py'),
+        os.path.join(root_gen_dir, 'base', 'generated_build_date.h'),
+        'default'
+    ])
+
+  write_ninja(os.path.join(tempdir, 'build.ninja'), root_gen_dir, options)
   cmd = ['ninja', '-C', tempdir]
   if options.verbose:
     cmd.append('-v')
   cmd.append('gn')
   check_call(cmd)
 
-def write_ninja(path, options):
+def write_ninja(path, root_gen_dir, options):
   cc = os.environ.get('CC', '')
   cxx = os.environ.get('CXX', '')
   cflags = os.environ.get('CFLAGS', '').split()
   cflags_cc = os.environ.get('CXXFLAGS', '').split()
   ld = os.environ.get('LD', cxx)
   ldflags = os.environ.get('LDFLAGS', '').split()
-  include_dirs = [SRC_ROOT]
+  include_dirs = [root_gen_dir, SRC_ROOT]
   libs = []
 
+  # //base/allocator/allocator_extension.cc needs this macro defined,
+  # otherwise there would be link errors.
+  cflags.extend(['-DNO_TCMALLOC'])
+
   if is_posix:
     if options.debug:
       cflags.extend(['-O0', '-g'])
@@ -179,6 +196,7 @@
       'base/files/file_path_constants.cc',
       'base/files/file_tracing.cc',
       'base/files/file_util.cc',
+      'base/files/memory_mapped_file.cc',
       'base/files/scoped_file.cc',
       'base/hash.cc',
       'base/json/json_parser.cc',
@@ -202,8 +220,10 @@
       'base/metrics/bucket_ranges.cc',
       'base/metrics/histogram.cc',
       'base/metrics/histogram_base.cc',
+      'base/metrics/histogram_persistence.cc',
       'base/metrics/histogram_samples.cc',
       'base/metrics/metrics_hashes.cc',
+      'base/metrics/persistent_memory_allocator.cc',
       'base/metrics/sample_map.cc',
       'base/metrics/sample_vector.cc',
       'base/metrics/sparse_histogram.cc',
@@ -214,6 +234,8 @@
       'base/process/kill.cc',
       'base/process/process_iterator.cc',
       'base/process/process_metrics.cc',
+      'base/profiler/scoped_profile.cc',
+      'base/profiler/scoped_tracker.cc',
       'base/profiler/tracked_time.cc',
       'base/run_loop.cc',
       'base/sequence_checker_impl.cc',
@@ -264,7 +286,6 @@
       'base/trace_event/process_memory_dump.cc',
       'base/trace_event/process_memory_maps.cc',
       'base/trace_event/process_memory_totals.cc',
-      'base/trace_event/process_memory_totals_dump_provider.cc',
       'base/trace_event/trace_buffer.cc',
       'base/trace_event/trace_config.cc',
       'base/trace_event/trace_event_argument.cc',
@@ -289,6 +310,7 @@
         'base/files/file_enumerator_posix.cc',
         'base/files/file_posix.cc',
         'base/files/file_util_posix.cc',
+        'base/files/memory_mapped_file_posix.cc',
         'base/message_loop/message_pump_libevent.cc',
         'base/posix/file_descriptor_shuffle.cc',
         'base/posix/safe_strerror.cc',
@@ -340,6 +362,7 @@
         'tool': 'cxx',
     }
     static_libraries['base']['sources'].extend([
+        'base/memory/shared_memory_posix.cc',
         'base/nix/xdg_util.cc',
         'base/process/internal_linux.cc',
         'base/process/process_handle_linux.cc',
@@ -350,7 +373,6 @@
         'base/sys_info_linux.cc',
         'base/threading/platform_thread_linux.cc',
         'base/trace_event/malloc_dump_provider.cc',
-        'base/trace_event/process_memory_maps_dump_provider.cc',
     ])
     static_libraries['libevent']['include_dirs'].extend([
         os.path.join(SRC_ROOT, 'base', 'third_party', 'libevent', 'linux')
@@ -363,6 +385,9 @@
   if is_mac:
     static_libraries['base']['sources'].extend([
         'base/base_paths_mac.mm',
+        'base/build_time.cc',
+        'base/rand_util.cc',
+        'base/rand_util_posix.cc',
         'base/files/file_util_mac.mm',
         'base/mac/bundle_locations.mm',
         'base/mac/call_with_eh_frame.cc',
@@ -370,8 +395,12 @@
         'base/mac/foundation_util.mm',
         'base/mac/mach_logging.cc',
         'base/mac/scoped_mach_port.cc',
+        'base/mac/scoped_mach_vm.cc',
         'base/mac/scoped_nsautorelease_pool.mm',
+        'base/memory/shared_memory_handle_mac.cc',
+        'base/memory/shared_memory_mac.cc',
         'base/message_loop/message_pump_mac.mm',
+        'base/metrics/field_trial.cc',
         'base/process/process_handle_mac.cc',
         'base/process/process_iterator_mac.cc',
         'base/process/process_metrics_mac.cc',