diff options
author | Justine Tunney <jart@google.com> | 2016-10-20 16:48:45 -0800 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2016-10-20 18:04:26 -0700 |
commit | 1dba78b997dc49df9df663a838e0bacd6602f5b8 (patch) | |
tree | adb3cfe86b348eb81210291f7ebe431dce971915 | |
parent | 2da2ae76cfa782474e8662234f89ddeecd080e05 (diff) |
Automatically build SWIG from source
This change allows Bazel to fetch and build SWIG rather than getting it
from the system. This change also improves the i/o performance of the
SWIG build, makes it hermetically sealed, and ensures tf_py_wrap_cc()
can function correctly across Bazel repositories.
CC: #4983
Change: 136783531
-rwxr-xr-x | configure | 14 | ||||
-rw-r--r-- | tensorflow/BUILD | 6 | ||||
-rw-r--r-- | tensorflow/g3doc/get_started/os_setup.md | 16 | ||||
-rw-r--r-- | tensorflow/python/lib/io/file_io.i | 5 | ||||
-rw-r--r-- | tensorflow/tensorflow.bzl | 55 | ||||
-rw-r--r-- | tensorflow/tools/docker/Dockerfile.devel | 1 | ||||
-rw-r--r-- | tensorflow/tools/docker/Dockerfile.devel-gpu | 1 | ||||
-rwxr-xr-x | tensorflow/tools/swig/swig.sh | 25 | ||||
-rw-r--r-- | tensorflow/workspace.bzl | 16 | ||||
-rw-r--r-- | third_party/BUILD | 1 | ||||
-rw-r--r-- | third_party/pcre.BUILD | 80 | ||||
-rw-r--r-- | third_party/swig.BUILD | 335 |
12 files changed, 471 insertions, 84 deletions
@@ -107,20 +107,6 @@ else perl -pi -e "s,WITH_HDFS_SUPPORT = (False|True),WITH_HDFS_SUPPORT = False,s" tensorflow/core/platform/default/build_config.bzl fi -## Find swig path -if [ -z "$SWIG_PATH" ]; then - SWIG_PATH=`type -p swig 2> /dev/null || true` -fi -if [[ ! -e "$SWIG_PATH" ]]; then - echo "Can't find swig. Ensure swig is in \$PATH or set \$SWIG_PATH." - exit 1 -fi -# Convert swig path to Windows style before writing into swig_path -if is_windows; then - SWIG_PATH="$(cygpath -m "$SWIG_PATH")" -fi -echo "$SWIG_PATH" > tensorflow/tools/swig/swig_path - # Invoke python_config and set up symlinks to python includes ./util/python/python_config.sh --setup "$PYTHON_BIN_PATH" diff --git a/tensorflow/BUILD b/tensorflow/BUILD index 6a173d040b..7a2105201f 100644 --- a/tensorflow/BUILD +++ b/tensorflow/BUILD @@ -63,12 +63,6 @@ package_group( packages = ["//tensorflow/..."], ) -sh_binary( - name = "swig", - srcs = ["tools/swig/swig.sh"], - data = glob(["tools/swig/**"]), -) - filegroup( name = "all_files", srcs = glob( diff --git a/tensorflow/g3doc/get_started/os_setup.md b/tensorflow/g3doc/get_started/os_setup.md index a280b25c88..139e2257e7 100644 --- a/tensorflow/g3doc/get_started/os_setup.md +++ b/tensorflow/g3doc/get_started/os_setup.md @@ -568,9 +568,9 @@ binary path. ```bash # For Python 2.7: -$ sudo apt-get install python-numpy swig python-dev python-wheel +$ sudo apt-get install python-numpy python-dev python-wheel # For Python 3.x: -$ sudo apt-get install python3-numpy swig python3-dev python3-wheel +$ sudo apt-get install python3-numpy python3-dev python3-wheel ``` #### Optional: Install CUDA (GPUs on Linux) @@ -617,20 +617,16 @@ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* ### Prepare environment for Mac OS X -We recommend using [homebrew](http://brew.sh) to install the bazel and SWIG -dependencies, and installing python dependencies using easy_install or pip. - -Of course you can also install Swig from source without using homebrew. In that -case, be sure to install its dependency [PCRE](http://www.pcre.org) and not -PCRE2. +We recommend using [homebrew](http://brew.sh) to install the bazel dependency, +and installing python dependencies using easy_install or pip. #### Dependencies Follow instructions [here](http://bazel.io/docs/install.html) to install the -dependencies for bazel. You can then use homebrew to install bazel and SWIG: +dependencies for bazel. You can then use homebrew to install bazel: ```bash -$ brew install bazel swig +$ brew install bazel ``` You can install the python dependencies using easy_install or pip. Using diff --git a/tensorflow/python/lib/io/file_io.i b/tensorflow/python/lib/io/file_io.i index 9688a9e02a..d88e6b59b6 100644 --- a/tensorflow/python/lib/io/file_io.i +++ b/tensorflow/python/lib/io/file_io.i @@ -275,5 +275,8 @@ string ReadFromStream(tensorflow::io::BufferedInputStream* stream, %unignoreall %include "tensorflow/c/tf_status_helper.h" + +%ignore tensorflow::io::internal::JoinPathImpl; %include "tensorflow/core/lib/io/path.h" -%include "tensorflow/core/platform/file_statistics.h"
\ No newline at end of file + +%include "tensorflow/core/platform/file_statistics.h" diff --git a/tensorflow/tensorflow.bzl b/tensorflow/tensorflow.bzl index 7ac751c9b0..9543df3571 100644 --- a/tensorflow/tensorflow.bzl +++ b/tensorflow/tensorflow.bzl @@ -557,33 +557,30 @@ def _py_wrap_cc_impl(ctx): if len(srcs) != 1: fail("Exactly one SWIG source file label must be specified.", "srcs") module_name = ctx.attr.module_name - cc_out = ctx.outputs.cc_out - py_out = ctx.outputs.py_out src = ctx.files.srcs[0] - args = ["-c++", "-python"] - args += ["-module", module_name] - args += ["-l" + f.path for f in ctx.files.swig_includes] - cc_include_dirs = set() - cc_includes = set() + inputs = set([src]) + inputs += ctx.files.swig_includes for dep in ctx.attr.deps: - cc_include_dirs += [h.dirname for h in dep.cc.transitive_headers] - cc_includes += dep.cc.transitive_headers - args += ["-I" + x for x in cc_include_dirs] - args += ["-I" + ctx.label.workspace_root] - args += ["-o", cc_out.path] - args += ["-outdir", py_out.dirname] + inputs += dep.cc.transitive_headers + inputs += ctx.files._swiglib + swig_include_dirs = set([f.root.path for f in inputs if f.root.path]) + swig_include_dirs += sorted([f.dirname for f in ctx.files._swiglib]) + args = ["-c++", + "-python", + "-module", module_name, + "-o", ctx.outputs.cc_out.path, + "-outdir", ctx.outputs.py_out.dirname] + args += ["-l" + f.path for f in ctx.files.swig_includes] + args += ["-I" + i for i in swig_include_dirs] args += [src.path] - outputs = [cc_out, py_out] - # TODO(pcloudy): Move args to arguments after - # https://github.com/bazelbuild/bazel/issues/1926 is fixed - ctx.action(command=" ".join(["tensorflow/tools/swig/swig.sh"] + args), - arguments=[], - mnemonic="PythonSwig", - inputs=sorted(set([src]) + cc_includes + ctx.files.swig_includes + - ctx.attr.swig_deps.files), + outputs = [ctx.outputs.cc_out, + ctx.outputs.py_out] + ctx.action(executable=ctx.executable._swig, + arguments=args, + inputs=list(inputs), outputs=outputs, - use_default_shell_env=True, - progress_message="SWIGing {input}".format(input=src.path)) + mnemonic="PythonSwig", + progress_message="SWIGing " + src.path) return struct(files=set(outputs)) _py_wrap_cc = rule( @@ -600,11 +597,17 @@ _py_wrap_cc = rule( allow_files = True, providers = ["cc"], ), - "swig_deps": attr.label(default = Label( - "//tensorflow:swig", # swig_templates - )), "module_name": attr.string(mandatory = True), "py_module_name": attr.string(mandatory = True), + "_swig": attr.label( + default = Label("@swig//:swig"), + executable = True, + cfg = "host", + ), + "_swiglib": attr.label( + default = Label("@swig//:templates"), + allow_files = True, + ), }, outputs = { "cc_out": "%{module_name}.cc", diff --git a/tensorflow/tools/docker/Dockerfile.devel b/tensorflow/tools/docker/Dockerfile.devel index 688b52e901..2110dc34f9 100644 --- a/tensorflow/tools/docker/Dockerfile.devel +++ b/tensorflow/tools/docker/Dockerfile.devel @@ -14,7 +14,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ python-dev \ rsync \ software-properties-common \ - swig \ unzip \ zip \ zlib1g-dev \ diff --git a/tensorflow/tools/docker/Dockerfile.devel-gpu b/tensorflow/tools/docker/Dockerfile.devel-gpu index 8693059369..fe6da41a45 100644 --- a/tensorflow/tools/docker/Dockerfile.devel-gpu +++ b/tensorflow/tools/docker/Dockerfile.devel-gpu @@ -15,7 +15,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ python-dev \ rsync \ software-properties-common \ - swig \ unzip \ zip \ zlib1g-dev \ diff --git a/tensorflow/tools/swig/swig.sh b/tensorflow/tools/swig/swig.sh deleted file mode 100755 index 941c4b20e9..0000000000 --- a/tensorflow/tools/swig/swig.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2015 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== - -# If possible, read swig path out of "swig_path" generated by configure -SWIG=swig -SWIG_PATH=tensorflow/tools/swig/swig_path -if [ -e $SWIG_PATH ]; then - SWIG=`cat $SWIG_PATH` -fi - -# If this line fails, rerun configure to set the path to swig correctly -"$SWIG" "$@" diff --git a/tensorflow/workspace.bzl b/tensorflow/workspace.bzl index 4c199e75fc..0221adaf03 100644 --- a/tensorflow/workspace.bzl +++ b/tensorflow/workspace.bzl @@ -126,6 +126,22 @@ def tf_workspace(path_prefix = "", tf_repo_name = ""): actual = str(Label("//util/python:python_headers")), ) + native.new_http_archive( + name = "pcre", + sha256 = "ccdf7e788769838f8285b3ee672ed573358202305ee361cfec7a4a4fb005bbc7", + url = "http://ftp.cs.stanford.edu/pub/exim/pcre/pcre-8.39.tar.gz", + strip_prefix = "pcre-8.39", + build_file = str(Label("//third_party:pcre.BUILD")), + ) + + native.new_http_archive( + name = "swig", + sha256 = "a2669657cabcedc371f63c0457407a183e0b6b2ef4e7e303c1ec9a3964cc7813", + url = "http://ufpr.dl.sourceforge.net/project/swig/swig/swig-3.0.2/swig-3.0.2.tar.gz", + strip_prefix = "swig-3.0.2", + build_file = str(Label("//third_party:swig.BUILD")), + ) + # grpc expects //external:protobuf_clib and //external:protobuf_compiler # to point to the protobuf's compiler library. native.bind( diff --git a/third_party/BUILD b/third_party/BUILD new file mode 100644 index 0000000000..fe756e1be2 --- /dev/null +++ b/third_party/BUILD @@ -0,0 +1 @@ +licenses(["notice"]) # Apache 2.0 diff --git a/third_party/pcre.BUILD b/third_party/pcre.BUILD new file mode 100644 index 0000000000..d9ef246672 --- /dev/null +++ b/third_party/pcre.BUILD @@ -0,0 +1,80 @@ +licenses(["notice"]) # BSD + +exports_files(["LICENSE"]) + +cc_library( + name = "pcre", + srcs = [ + "pcre_byte_order.c", + "pcre_chartables.c", + "pcre_compile.c", + "pcre_config.c", + "pcre_dfa_exec.c", + "pcre_exec.c", + "pcre_fullinfo.c", + "pcre_get.c", + "pcre_globals.c", + "pcre_internal.h", + "pcre_jit_compile.c", + "pcre_maketables.c", + "pcre_newline.c", + "pcre_ord2utf8.c", + "pcre_refcount.c", + "pcre_string_utils.c", + "pcre_study.c", + "pcre_tables.c", + "pcre_ucd.c", + "pcre_valid_utf8.c", + "pcre_version.c", + "pcre_xclass.c", + "ucp.h", + ], + hdrs = [ + "pcre.h", + "pcreposix.h", + ], + copts = [ + "-DHAVE_BCOPY=1", + "-DHAVE_INTTYPES_H=1", + "-DHAVE_MEMMOVE=1", + "-DHAVE_STDINT_H=1", + "-DHAVE_STRERROR=1", + "-DHAVE_SYS_STAT_H=1", + "-DHAVE_SYS_TYPES_H=1", + "-DHAVE_UNISTD_H=1", + "-DLINK_SIZE=2", + "-DMATCH_LIMIT=10000000", + "-DMATCH_LIMIT_RECURSION=1000", + "-DMAX_NAME_COUNT=10000", + "-DMAX_NAME_SIZE=32", + "-DNEWLINE=10", + "-DNO_RECURSE", + "-DPARENS_NEST_LIMIT=50", + "-DPCRE_STATIC=1", + "-DPOSIX_MALLOC_THRESHOLD=10", + "-DSTDC_HEADERS=1", + "-DSUPPORT_UCP", + "-DSUPPORT_UTF", + ], + includes = ["."], + visibility = ["@swig//:__pkg__"], # Please use RE2 + alwayslink = 1, +) + +genrule( + name = "pcre_h", + srcs = ["pcre.h.in"], + outs = ["pcre.h"], + cmd = "sed -e s/@PCRE_MAJOR@/8/" + + " -e s/@PCRE_MINOR@/39/" + + " -e s/@PCRE_PRERELEASE@//" + + " -e s/@PCRE_DATE@/redacted/" + + " $< >$@", +) + +genrule( + name = "pcre_chartables_c", + srcs = ["pcre_chartables.c.dist"], + outs = ["pcre_chartables.c"], + cmd = "cp $< $@", +) diff --git a/third_party/swig.BUILD b/third_party/swig.BUILD new file mode 100644 index 0000000000..0ec413a248 --- /dev/null +++ b/third_party/swig.BUILD @@ -0,0 +1,335 @@ +licenses(["restricted"]) # GPLv3 + +exports_files(["LICENSE"]) + +cc_binary( + name = "swig", + srcs = [ + "Source/CParse/cparse.h", + "Source/CParse/cscanner.c", + "Source/CParse/parser.c", + "Source/CParse/parser.h", + "Source/CParse/templ.c", + "Source/CParse/util.c", + "Source/DOH/base.c", + "Source/DOH/doh.h", + "Source/DOH/dohint.h", + "Source/DOH/file.c", + "Source/DOH/fio.c", + "Source/DOH/hash.c", + "Source/DOH/list.c", + "Source/DOH/memory.c", + "Source/DOH/string.c", + "Source/DOH/void.c", + "Source/Include/swigconfig.h", + "Source/Include/swigwarn.h", + "Source/Modules/allocate.cxx", + "Source/Modules/browser.cxx", + "Source/Modules/contract.cxx", + "Source/Modules/directors.cxx", + "Source/Modules/emit.cxx", + "Source/Modules/lang.cxx", + "Source/Modules/main.cxx", + "Source/Modules/module.cxx", + "Source/Modules/nested.cxx", + "Source/Modules/overload.cxx", + "Source/Modules/python.cxx", + "Source/Modules/swigmain-lite.cxx", + "Source/Modules/swigmod.h", + "Source/Modules/typepass.cxx", + "Source/Modules/uffi.cxx", + "Source/Modules/utils.cxx", + "Source/Modules/xml.cxx", + "Source/Preprocessor/cpp.c", + "Source/Preprocessor/expr.c", + "Source/Preprocessor/preprocessor.h", + "Source/Swig/cwrap.c", + "Source/Swig/deprecate.c", + "Source/Swig/error.c", + "Source/Swig/extend.c", + "Source/Swig/fragment.c", + "Source/Swig/getopt.c", + "Source/Swig/include.c", + "Source/Swig/misc.c", + "Source/Swig/naming.c", + "Source/Swig/parms.c", + "Source/Swig/scanner.c", + "Source/Swig/stype.c", + "Source/Swig/swig.h", + "Source/Swig/swigfile.h", + "Source/Swig/swigopt.h", + "Source/Swig/swigparm.h", + "Source/Swig/swigscan.h", + "Source/Swig/swigtree.h", + "Source/Swig/swigwrap.h", + "Source/Swig/symbol.c", + "Source/Swig/tree.c", + "Source/Swig/typemap.c", + "Source/Swig/typeobj.c", + "Source/Swig/typesys.c", + "Source/Swig/wrapfunc.c", + ], + copts = ["$(STACK_FRAME_UNLIMITED)"] + select({ + ":x64_windows_msvc": [], + "//conditions:default": [ + "-Wno-parentheses", + "-Wno-unused-variable", + "-fexceptions", + ], + }), + data = [":templates"], + includes = [ + "Source/CParse", + "Source/DOH", + "Source/Include", + "Source/Modules", + "Source/Preprocessor", + "Source/Swig", + ], + output_licenses = ["unencumbered"], + visibility = ["//visibility:public"], + deps = ["@pcre//:pcre"], +) + +filegroup( + name = "templates", + srcs = [ + "Lib/allkw.swg", + "Lib/attribute.i", + "Lib/carrays.i", + "Lib/cdata.i", + "Lib/cffi/cffi.swg", + "Lib/cmalloc.i", + "Lib/constraints.i", + "Lib/cpointer.i", + "Lib/cstring.i", + "Lib/cwstring.i", + "Lib/exception.i", + "Lib/intrusive_ptr.i", + "Lib/inttypes.i", + "Lib/linkruntime.c", + "Lib/math.i", + "Lib/pointer.i", + "Lib/python/argcargv.i", + "Lib/python/attribute.i", + "Lib/python/boost_shared_ptr.i", + "Lib/python/builtin.swg", + "Lib/python/carrays.i", + "Lib/python/ccomplex.i", + "Lib/python/cdata.i", + "Lib/python/cmalloc.i", + "Lib/python/cni.i", + "Lib/python/complex.i", + "Lib/python/cpointer.i", + "Lib/python/cstring.i", + "Lib/python/cwstring.i", + "Lib/python/defarg.swg", + "Lib/python/director.swg", + "Lib/python/embed.i", + "Lib/python/embed15.i", + "Lib/python/exception.i", + "Lib/python/factory.i", + "Lib/python/file.i", + "Lib/python/implicit.i", + "Lib/python/jstring.i", + "Lib/python/pyabc.i", + "Lib/python/pyapi.swg", + "Lib/python/pybackward.swg", + "Lib/python/pybuffer.i", + "Lib/python/pyclasses.swg", + "Lib/python/pycomplex.swg", + "Lib/python/pycontainer.swg", + "Lib/python/pydocs.swg", + "Lib/python/pyerrors.swg", + "Lib/python/pyfragments.swg", + "Lib/python/pyhead.swg", + "Lib/python/pyinit.swg", + "Lib/python/pyiterators.swg", + "Lib/python/pymacros.swg", + "Lib/python/pyname_compat.i", + "Lib/python/pyopers.swg", + "Lib/python/pyprimtypes.swg", + "Lib/python/pyrun.swg", + "Lib/python/pyruntime.swg", + "Lib/python/pystdcommon.swg", + "Lib/python/pystrings.swg", + "Lib/python/python.swg", + "Lib/python/pythonkw.swg", + "Lib/python/pythreads.swg", + "Lib/python/pytuplehlp.swg", + "Lib/python/pytypemaps.swg", + "Lib/python/pyuserdir.swg", + "Lib/python/pywstrings.swg", + "Lib/python/std_alloc.i", + "Lib/python/std_auto_ptr.i", + "Lib/python/std_basic_string.i", + "Lib/python/std_carray.i", + "Lib/python/std_char_traits.i", + "Lib/python/std_common.i", + "Lib/python/std_complex.i", + "Lib/python/std_container.i", + "Lib/python/std_deque.i", + "Lib/python/std_except.i", + "Lib/python/std_ios.i", + "Lib/python/std_iostream.i", + "Lib/python/std_list.i", + "Lib/python/std_map.i", + "Lib/python/std_multimap.i", + "Lib/python/std_multiset.i", + "Lib/python/std_pair.i", + "Lib/python/std_set.i", + "Lib/python/std_shared_ptr.i", + "Lib/python/std_sstream.i", + "Lib/python/std_streambuf.i", + "Lib/python/std_string.i", + "Lib/python/std_unordered_map.i", + "Lib/python/std_unordered_multimap.i", + "Lib/python/std_unordered_multiset.i", + "Lib/python/std_unordered_set.i", + "Lib/python/std_vector.i", + "Lib/python/std_vectora.i", + "Lib/python/std_wios.i", + "Lib/python/std_wiostream.i", + "Lib/python/std_wsstream.i", + "Lib/python/std_wstreambuf.i", + "Lib/python/std_wstring.i", + "Lib/python/stl.i", + "Lib/python/typemaps.i", + "Lib/python/wchar.i", + "Lib/runtime.swg", + "Lib/shared_ptr.i", + "Lib/std/_std_deque.i", + "Lib/std/std_alloc.i", + "Lib/std/std_basic_string.i", + "Lib/std/std_carray.swg", + "Lib/std/std_char_traits.i", + "Lib/std/std_common.i", + "Lib/std/std_container.i", + "Lib/std/std_deque.i", + "Lib/std/std_except.i", + "Lib/std/std_ios.i", + "Lib/std/std_iostream.i", + "Lib/std/std_list.i", + "Lib/std/std_map.i", + "Lib/std/std_multimap.i", + "Lib/std/std_multiset.i", + "Lib/std/std_pair.i", + "Lib/std/std_queue.i", + "Lib/std/std_set.i", + "Lib/std/std_sstream.i", + "Lib/std/std_stack.i", + "Lib/std/std_streambuf.i", + "Lib/std/std_string.i", + "Lib/std/std_unordered_map.i", + "Lib/std/std_unordered_multimap.i", + "Lib/std/std_unordered_multiset.i", + "Lib/std/std_unordered_set.i", + "Lib/std/std_vector.i", + "Lib/std/std_vectora.i", + "Lib/std/std_wios.i", + "Lib/std/std_wiostream.i", + "Lib/std/std_wsstream.i", + "Lib/std/std_wstreambuf.i", + "Lib/std/std_wstring.i", + "Lib/std_except.i", + "Lib/stdint.i", + "Lib/stl.i", + "Lib/swig.swg", + "Lib/swigarch.i", + "Lib/swigerrors.swg", + "Lib/swiginit.swg", + "Lib/swiglabels.swg", + "Lib/swigrun.i", + "Lib/swigrun.swg", + "Lib/swigwarn.swg", + "Lib/swigwarnings.swg", + "Lib/typemaps/attribute.swg", + "Lib/typemaps/carrays.swg", + "Lib/typemaps/cdata.swg", + "Lib/typemaps/cmalloc.swg", + "Lib/typemaps/cpointer.swg", + "Lib/typemaps/cstring.swg", + "Lib/typemaps/cstrings.swg", + "Lib/typemaps/cwstring.swg", + "Lib/typemaps/enumint.swg", + "Lib/typemaps/exception.swg", + "Lib/typemaps/factory.swg", + "Lib/typemaps/fragments.swg", + "Lib/typemaps/implicit.swg", + "Lib/typemaps/inoutlist.swg", + "Lib/typemaps/misctypes.swg", + "Lib/typemaps/primtypes.swg", + "Lib/typemaps/ptrtypes.swg", + "Lib/typemaps/std_except.swg", + "Lib/typemaps/std_string.swg", + "Lib/typemaps/std_strings.swg", + "Lib/typemaps/std_wstring.swg", + "Lib/typemaps/string.swg", + "Lib/typemaps/strings.swg", + "Lib/typemaps/swigmacros.swg", + "Lib/typemaps/swigobject.swg", + "Lib/typemaps/swigtype.swg", + "Lib/typemaps/swigtypemaps.swg", + "Lib/typemaps/traits.swg", + "Lib/typemaps/typemaps.swg", + "Lib/typemaps/valtypes.swg", + "Lib/typemaps/void.swg", + "Lib/typemaps/wstring.swg", + "Lib/wchar.i", + "Lib/windows.i", + ], + licenses = ["notice"], # simple notice license for Lib/ + path = "Lib", + visibility = ["//visibility:public"], +) + +genrule( + name = "swigconfig", + outs = ["Source/Include/swigconfig.h"], + cmd = "cat <<EOF >$@\n" + + "#define HAVE_BOOL\n" + + "#define HAVE_PCRE\n" + + "#define HAVE_POPEN\n" + + "#define PACKAGE_BUGREPORT \"http://www.swig.org\"\n" + + "#define PACKAGE_VERSION \"3.0.2\"\n" + + "#define STDC_HEADERS\n" + + "#define SWIG_CXX \"bazel4lyfe\"\n" + + "#define SWIG_LIB \"external/swig/Lib\"\n" + + "#define SWIG_LIB_WIN_UNIX \"\"\n" + + "#define SWIG_PLATFORM \"bazel4lyfe\"\n" + + "EOF", +) + +genrule( + name = "get_rid_of_stuff_we_dont_need_yet", + srcs = ["Source/Modules/swigmain.cxx"], + outs = ["Source/Modules/swigmain-lite.cxx"], + cmd = "sed -e '/swig_allegrocl/d'" + + " -e '/swig_cffi/d'" + + " -e '/swig_chicken/d'" + + " -e '/swig_clisp/d'" + + " -e '/swig_csharp/d'" + + " -e '/swig_d/d'" + + " -e '/swig_go/d'" + + " -e '/swig_guile/d'" + + " -e '/swig_java/d'" + + " -e '/swig_lua/d'" + + " -e '/swig_modula3/d'" + + " -e '/swig_mzscheme/d'" + + " -e '/swig_ocaml/d'" + + " -e '/swig_octave/d'" + + " -e '/swig_perl/d'" + + " -e '/swig_php/d'" + + " -e '/swig_pike/d'" + + " -e '/swig_r/d'" + + " -e '/swig_ruby/d'" + + " -e '/swig_sexp/d'" + + " -e '/swig_tcl/d'" + + " -e '/swig_uffi/d'" + + " $< >$@", +) + +config_setting( + name = "x64_windows_msvc", + values = {"cpu": "x64_windows_msvc"}, +) |