# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. template("python_binary_module") { # Only available on linux for now. assert(is_linux) assert(defined(invoker.sources)) assert(defined(invoker.python_base_module)) cython_root = "//third_party/cython" cython_script = "$cython_root/src/cython.py" cython_output = "${target_out_dir}/${target_name}.cc" generator_target_name = target_name + "_cython_compiler" shared_library_name = target_name + "_shared_library" config_name = target_name + "_python_config" if (is_linux) { shared_library_prefix = "lib" shared_library_suffix = ".so" python_module_suffix = ".so" } target_visibility = [ ":$generator_target_name", ":$shared_library_name", ":$target_name", ] action(generator_target_name) { visibility = target_visibility script = cython_script sources = invoker.sources outputs = [ cython_output ] args = [ "--cplus", "-I", rebase_path("//", root_build_dir), "-o", rebase_path(cython_output, root_build_dir), ] + rebase_path(sources, root_build_dir) } config(config_name) { visibility = target_visibility python_flags = "//third_party/cython/python_flags.py" include_dirs = exec_script(python_flags, [ "--gn", "--includes" ], "list lines") libs = exec_script(python_flags, [ "--gn", "--libraries" ], "list lines") lib_dirs = exec_script(python_flags, [ "--gn", "--library_dirs" ], "list lines") if (!is_win) { # Generated code includes static utility functions that often go unused. cflags = [ "-Wno-unused-function", ] } } shared_library(shared_library_name) { visibility = target_visibility deps = [ ":$generator_target_name", ] if (defined(invoker.deps)) { deps += invoker.deps } if (defined(invoker.datadeps)) { datadeps = invoker.datadeps } sources = [ cython_output ] if (defined(invoker.additional_sources)) { sources += invoker.additional_sources } configs += [ ":$config_name" ] } copy(target_name) { python_base_module = invoker.python_base_module sources = [ "$root_out_dir/${shared_library_prefix}${shared_library_name}${shared_library_suffix}" ] outputs = [ "$root_out_dir/python/$python_base_module/${target_name}${python_module_suffix}" ] deps = [ ":$shared_library_name" ] } }