From c070939fd1a954b7a492bc30f0cf64a664b90181 Mon Sep 17 00:00:00 2001 From: Ethan Nicholas Date: Tue, 27 Jun 2017 11:20:22 -0400 Subject: Re-land sksl fragment processor support This reverts commit ed50200682e0de72c3abecaa4d5324ebcd1ed9f9. Bug: skia: Change-Id: I9caa7454b391450620d6989dc472abb3cf7a2cab Reviewed-on: https://skia-review.googlesource.com/20965 Reviewed-by: Ben Wagner Commit-Queue: Ethan Nicholas --- gn/toolchain/BUILD.gn | 301 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 301 insertions(+) create mode 100644 gn/toolchain/BUILD.gn (limited to 'gn/toolchain') diff --git a/gn/toolchain/BUILD.gn b/gn/toolchain/BUILD.gn new file mode 100644 index 0000000000..a4c13a7d69 --- /dev/null +++ b/gn/toolchain/BUILD.gn @@ -0,0 +1,301 @@ +declare_args() { + host_ar = ar + host_cc = cc + host_cxx = cxx + + if (is_android) { + if (host_os == "win") { + target_ar = "$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin/ar.exe" + target_cc = "$ndk/toolchains/llvm/prebuilt/$ndk_host/bin/clang.exe" + target_cxx = "$ndk/toolchains/llvm/prebuilt/$ndk_host/bin/clang++.exe" + } else { + target_ar = "$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin/ar" + target_cc = "$ndk/toolchains/llvm/prebuilt/$ndk_host/bin/clang" + target_cxx = "$ndk/toolchains/llvm/prebuilt/$ndk_host/bin/clang++" + } + } else { + target_ar = ar + target_cc = cc + target_cxx = cxx + } + + cc_wrapper = "" +} + +if (host_os == "win") { + python = "python.bat" + stamp = "cmd.exe /c echo >" +} else { + python = "python" + stamp = "touch" +} + +toolchain("msvc") { + lib_dir_switch = "/LIBPATH:" + + if (msvc == 2015) { + bin = "$windk/VC/bin/amd64" + env_setup = "" + if (target_cpu == "x86") { + bin += "_x86" + env_setup = "cmd /c $windk/win_sdk/bin/SetEnv.cmd /x86 && " + } + } else { + bin = "$windk/VC/Tools/MSVC/14.10.25017/bin/HostX64/$target_cpu" + env_setup = "" + if (target_cpu == "x86") { + print("Be sure to run") + print("$windk/VC/Auxiliary/Build/vcvarsall.bat amd64_x86") + print("to set up your environment before running ninja.") + } + } + + tool("asm") { + _ml = "ml" + if (target_cpu == "x64") { + _ml += "64" + } + command = "$env_setup$bin/$_ml.exe /nologo /c /Fo {{output}} {{source}}" + outputs = [ + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj", + ] + description = "assemble {{source}}" + } + + tool("cc") { + rspfile = "{{output}}.rsp" + precompiled_header_type = "msvc" + pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb" + + # Label names may have spaces so pdbname must be quoted. + command = "$env_setup$bin/cl.exe /nologo /showIncludes /FC @$rspfile /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" + depsformat = "msvc" + outputs = [ + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj", + ] + rspfile_content = "{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}" + description = "compile {{source}}" + } + + tool("cxx") { + rspfile = "{{output}}.rsp" + precompiled_header_type = "msvc" + pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb" + + # Label names may have spaces so pdbname must be quoted. + command = "$env_setup$bin/cl.exe /nologo /showIncludes /FC @$rspfile /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" + depsformat = "msvc" + outputs = [ + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj", + ] + rspfile_content = "{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}" + description = "compile {{source}}" + } + + tool("alink") { + rspfile = "{{output}}.rsp" + + command = "$env_setup$bin/lib.exe /nologo /ignore:4221 {{arflags}} /OUT:{{output}} @$rspfile" + outputs = [ + # Ignore {{output_extension}} and always use .lib, there's no reason to + # allow targets to override this extension on Windows. + "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", + ] + default_output_extension = ".lib" + default_output_dir = "{{target_out_dir}}" + + # inputs_newline works around a fixed per-line buffer size in the linker. + rspfile_content = "{{inputs_newline}}" + description = "link {{output}}" + } + + tool("solink") { + dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + libname = "${dllname}.lib" + pdbname = "${dllname}.pdb" + rspfile = "${dllname}.rsp" + + command = "$env_setup$bin/link.exe /nologo /IMPLIB:$libname /DLL /OUT:$dllname /PDB:$pdbname @$rspfile" + outputs = [ + dllname, + libname, + pdbname, + ] + default_output_extension = ".dll" + default_output_dir = "{{root_out_dir}}" + + link_output = libname + depend_output = libname + runtime_outputs = [ + dllname, + pdbname, + ] + + # I don't quite understand this. Aping Chrome's toolchain/win/BUILD.gn. + restat = true + + # inputs_newline works around a fixed per-line buffer size in the linker. + rspfile_content = "{{inputs_newline}} {{libs}} {{solibs}} {{ldflags}}" + description = "link {{output}}" + } + + tool("link") { + exename = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" + pdbname = "$exename.pdb" + rspfile = "$exename.rsp" + + command = + "$env_setup$bin/link.exe /nologo /OUT:$exename /PDB:$pdbname @$rspfile" + + default_output_extension = ".exe" + default_output_dir = "{{root_out_dir}}" + outputs = [ + exename, + ] + + # inputs_newline works around a fixed per-line buffer size in the linker. + rspfile_content = "{{inputs_newline}} {{libs}} {{solibs}} {{ldflags}}" + description = "link {{output}}" + } + + tool("stamp") { + command = "$stamp {{output}}" + description = "stamp {{output}}" + } + + tool("copy") { + cp_py = rebase_path("../cp.py") + command = "$python $cp_py {{source}} {{output}}" + description = "copy {{source}} {{output}}" + } +} + +template("gcc_like_toolchain") { + toolchain(target_name) { + ar = invoker.ar + cc = invoker.cc + cxx = invoker.cxx + lib_switch = "-l" + lib_dir_switch = "-L" + + tool("cc") { + depfile = "{{output}}.d" + command = "$cc_wrapper $cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}" + depsformat = "gcc" + outputs = [ + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", + ] + description = "compile {{source}}" + } + + tool("cxx") { + depfile = "{{output}}.d" + command = "$cc_wrapper $cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}" + depsformat = "gcc" + outputs = [ + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", + ] + description = "compile {{source}}" + } + + tool("objc") { + depfile = "{{output}}.d" + command = "$cc_wrapper $cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_objc}} -c {{source}} -o {{output}}" + depsformat = "gcc" + outputs = [ + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", + ] + description = "compile {{source}}" + } + + tool("objcxx") { + depfile = "{{output}}.d" + command = "$cc_wrapper $cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} {{cflags_objc}} -c {{source}} -o {{output}}" + depsformat = "gcc" + outputs = [ + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", + ] + description = "compile {{source}}" + } + + tool("asm") { + depfile = "{{output}}.d" + command = "$cc_wrapper $cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{asmflags}} -c {{source}} -o {{output}}" + depsformat = "gcc" + outputs = [ + "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", + ] + description = "assemble {{source}}" + } + + tool("alink") { + rspfile = "{{output}}.rsp" + rspfile_content = "{{inputs}}" + ar_py = rebase_path("../ar.py") + command = "$python $ar_py $ar {{output}} $rspfile" + outputs = [ + "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", + ] + default_output_extension = ".a" + output_prefix = "lib" + description = "link {{output}}" + } + + tool("solink") { + soname = "{{target_output_name}}{{output_extension}}" + + rpath = "-Wl,-soname,$soname" + if (is_mac) { + rpath = "-Wl,-install_name,@rpath/$soname" + } + + command = "$cc_wrapper $cxx -shared {{ldflags}} {{inputs}} {{solibs}} {{libs}} $rpath -o {{output}}" + outputs = [ + "{{root_out_dir}}/$soname", + ] + output_prefix = "lib" + default_output_extension = ".so" + description = "link {{output}}" + } + + tool("link") { + command = "$cc_wrapper $cxx {{ldflags}} {{inputs}} {{solibs}} {{libs}} -o {{output}}" + outputs = [ + "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", + ] + description = "link {{output}}" + } + + tool("stamp") { + command = "$stamp {{output}}" + description = "stamp {{output}}" + } + + tool("copy") { + cp_py = rebase_path("../cp.py") + command = "$python $cp_py {{source}} {{output}}" + description = "copy {{source}} {{output}}" + } + + toolchain_args = { + current_cpu = invoker.cpu + current_os = invoker.os + } + } +} + +gcc_like_toolchain("gcc_like") { + cpu = current_cpu + os = current_os + ar = target_ar + cc = target_cc + cxx = target_cxx +} + +gcc_like_toolchain("gcc_like_host") { + cpu = host_cpu + os = host_os + ar = host_ar + cc = host_cc + cxx = host_cxx +} -- cgit v1.2.3