Make simple build example runnable on macOS
Change-Id: Iee3c7bbcd6578f4fe21567981bad7e5f917d5088
make simple build example runnable on macOS
Change-Id: I89b50a87f939058a6fb4348cab06c90a93240065
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/8680
Commit-Queue: Scott Graham <scottmg@chromium.org>
Reviewed-by: Scott Graham <scottmg@chromium.org>
diff --git a/examples/simple_build/build/BUILD.gn b/examples/simple_build/build/BUILD.gn
index 8eae46a..cc3f948 100644
--- a/examples/simple_build/build/BUILD.gn
+++ b/examples/simple_build/build/BUILD.gn
@@ -12,8 +12,10 @@
}
config("executable_ldconfig") {
- ldflags = [
- "-Wl,-rpath=\$ORIGIN/",
- "-Wl,-rpath-link=",
- ]
+ if (!is_mac) {
+ ldflags = [
+ "-Wl,-rpath=\$ORIGIN/",
+ "-Wl,-rpath-link=",
+ ]
+ }
}
diff --git a/examples/simple_build/build/BUILDCONFIG.gn b/examples/simple_build/build/BUILDCONFIG.gn
index e419fd9..619fa97 100644
--- a/examples/simple_build/build/BUILDCONFIG.gn
+++ b/examples/simple_build/build/BUILDCONFIG.gn
@@ -15,6 +15,9 @@
current_os = target_os
}
+is_linux = host_os == "linux" && current_os == "linux" && target_os == "linux"
+is_mac = host_os == "mac" && current_os == "mac" && target_os == "mac"
+
# All binary targets will get this list of configs by default.
_shared_binary_target_configs = [ "//build:compiler_defaults" ]
diff --git a/examples/simple_build/build/toolchain/BUILD.gn b/examples/simple_build/build/toolchain/BUILD.gn
index 98cc6ee..c04ee1e 100644
--- a/examples/simple_build/build/toolchain/BUILD.gn
+++ b/examples/simple_build/build/toolchain/BUILD.gn
@@ -22,10 +22,9 @@
}
tool("alink") {
- rspfile = "{{output}}.rsp"
- command = "rm -f {{output}} && ar rcs {{output}} @$rspfile"
+ command = "rm -f {{output}} && ar rcs {{output}} {{inputs}}"
description = "AR {{target_output_name}}{{output_extension}}"
- rspfile_content = "{{inputs}}"
+
outputs =
[ "{{target_out_dir}}/{{target_output_name}}{{output_extension}}" ]
default_output_extension = ".a"
@@ -36,9 +35,15 @@
soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so".
sofile = "{{output_dir}}/$soname"
rspfile = soname + ".rsp"
+ if (is_mac) {
+ os_specific_option = "-install_name @executable_path/$sofile"
+ rspfile_content = "{{inputs}} {{solibs}} {{libs}}"
+ } else {
+ os_specific_option = "-Wl,-soname=$soname"
+ rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive {{libs}}"
+ }
- command = "g++ -shared {{ldflags}} -o $sofile -Wl,-soname=$soname @$rspfile"
- rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive {{libs}}"
+ command = "g++ -shared {{ldflags}} -o $sofile $os_specific_option @$rspfile"
description = "SOLINK $soname"
@@ -60,7 +65,11 @@
tool("link") {
outfile = "{{target_output_name}}{{output_extension}}"
rspfile = "$outfile.rsp"
- command = "g++ {{ldflags}} -o $outfile -Wl,--start-group @$rspfile {{solibs}} -Wl,--end-group {{libs}}"
+ if (is_mac) {
+ command = "g++ {{ldflags}} -o $outfile @$rspfile {{solibs}} {{libs}}"
+ } else {
+ command = "g++ {{ldflags}} -o $outfile -Wl,--start-group @$rspfile {{solibs}} -Wl,--end-group {{libs}}"
+ }
description = "LINK $outfile"
default_output_dir = "{{root_out_dir}}"
rspfile_content = "{{inputs}}"