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}}"