[build] Fix standalone cobalt build

Change-Id: Ic8a7236ce6ffaaf4ccc689ffeedfdf83270d3af4
Reviewed-on: https://fuchsia-review.googlesource.com/c/cobalt/+/858738
Reviewed-by: Cameron Dale <camrdale@google.com>
Commit-Queue: Nathan Mulcahey <nmulcahey@google.com>
diff --git a/build/config/linux/BUILD.gn b/build/config/linux/BUILD.gn
index ce9ae50..212e189 100644
--- a/build/config/linux/BUILD.gn
+++ b/build/config/linux/BUILD.gn
@@ -45,9 +45,14 @@
 }
 
 config("sysroot") {
-  cflags = [ "--sysroot=$sysroot" ]
+  cflags = [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
   ldflags = cflags
   asmflags = cflags
+
+  rustflags = []
+  foreach(flag, ldflags) {
+    rustflags += [ "-Clink-arg=$flag" ]
+  }
 }
 
 config("target") {
diff --git a/src/bin/config_parser/test_source_generator_for_all_projects.py b/src/bin/config_parser/test_source_generator_for_all_projects.py
index 4eb0581..22a1e3a 100755
--- a/src/bin/config_parser/test_source_generator_for_all_projects.py
+++ b/src/bin/config_parser/test_source_generator_for_all_projects.py
@@ -28,7 +28,7 @@
 RUSTC = os.path.join(SYSROOT_BIN, 'rustc')
 GO_BIN = os.path.join(SRC_ROOT_DIR, 'sysroot', 'golang', 'bin', 'go')
 DART = os.path.join(SYSROOT_BIN, 'dart')
-
+LINUX_SYSROOT = os.path.join(SRC_ROOT_DIR, 'sysroot')
 
 def main():
   customers = []
@@ -66,32 +66,43 @@
           src = tempfile.NamedTemporaryFile(suffix='.hpp')
           src.write(out1)
           src.flush()
-          compile = subprocess.Popen([CLANG, '-std=c++17', src.name])
+          cmd = [CLANG, '-std=c++17']
+          if sys.platform == 'linux':
+              cmd += ['--sysroot=' + LINUX_SYSROOT]
+          cmd += [src.name]
+          compile = subprocess.Popen(cmd)
         elif format == 'rust':
           src = tempfile.NamedTemporaryFile(
               prefix=project['project_name'], suffix='.rs')
           src.write(out1)
           src.flush()
           tmpdir = tempfile.TemporaryDirectory()
-          subprocess.run([
+          cmd = [
               RUSTC, '--out-dir', tmpdir.name, '--edition=2018',
-              '--crate-type=lib', '--crate-name=cobalt_client',
-              os.path.join(SRC_ROOT_DIR, 'src', 'lib', 'client', 'rust', 'src',
-                           'lib.rs')
-          ],
-                         check=True)
-          compile = subprocess.Popen([
+              '--crate-type=lib', '--crate-name=cobalt_client'
+          ]
+          if sys.platform == 'linux':
+              cmd += ['-Clink-arg=--sysroot=' + LINUX_SYSROOT]
+          cmd += [os.path.join(SRC_ROOT_DIR, 'src', 'lib', 'client', 'rust', 'src', 'lib.rs')]
+          subprocess.run(cmd, check=True)
+          compile_cmd = [
               RUSTC, '--out-dir', tmpdir.name, '--edition=2018', '--extern',
               'cobalt_client=%s/libcobalt_client.rlib' % tmpdir.name,
-              '--crate-type=lib', src.name
-          ],
+              '--crate-type=lib'
+          ]
+          if sys.platform == 'linux':
+              compile_cmd += ['-Clink-arg=--sysroot=' + LINUX_SYSROOT]
+          compile_cmd += [src.name]
+          compile = subprocess.Popen(compile_cmd,
                                      stderr=subprocess.STDOUT,
                                      stdout=subprocess.PIPE)
         elif format == 'go':
           src = tempfile.NamedTemporaryFile(suffix='.go')
           src.write(out1)
           src.flush()
-          compile = subprocess.Popen([GO_BIN, 'build', '-a', src.name])
+          env = os.environ.copy()
+          env['CGO_ENABLED'] = '0'
+          compile = subprocess.Popen([GO_BIN, 'build', '-a', src.name], env=env)
         elif format == 'dart':
           src = tempfile.NamedTemporaryFile(suffix='.dart')
           src.write(out1)