Home | History | Annotate | Download | only in util
      1 # Copyright (c) 2016, Google Inc.
      2 #
      3 # Permission to use, copy, modify, and/or distribute this software for any
      4 # purpose with or without fee is hereby granted, provided that the above
      5 # copyright notice and this permission notice appear in all copies.
      6 #
      7 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      8 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
      9 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     10 # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     11 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
     12 # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
     13 # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
     14 
     15 licenses(["notice"])
     16 
     17 exports_files(["LICENSE"])
     18 
     19 load(
     20     ":BUILD.generated.bzl",
     21     "crypto_headers",
     22     "crypto_internal_headers",
     23     "crypto_sources",
     24     "crypto_sources_linux_x86_64",
     25     "crypto_sources_mac_x86_64",
     26     "ssl_headers",
     27     "ssl_internal_headers",
     28     "ssl_c_sources",
     29     "ssl_cc_sources",
     30     "tool_sources",
     31     "tool_headers",
     32 )
     33 
     34 config_setting(
     35     name = "linux_x86_64",
     36     values = {"cpu": "k8"},
     37 )
     38 
     39 config_setting(
     40     name = "mac_x86_64",
     41     values = {"cpu": "darwin"},
     42 )
     43 
     44 boringssl_copts = [
     45     # Assembler option --noexecstack adds .note.GNU-stack to each object to
     46     # ensure that binaries can be built with non-executable stack.
     47     "-Wa,--noexecstack",
     48 
     49     # This is needed on Linux systems (at least) to get rwlock in pthread.
     50     "-D_XOPEN_SOURCE=700",
     51 
     52     # This list of warnings should match those in the top-level CMakeLists.txt.
     53     "-Wall",
     54     "-Werror",
     55     "-Wformat=2",
     56     "-Wsign-compare",
     57     "-Wmissing-field-initializers",
     58     "-Wwrite-strings",
     59     "-Wshadow",
     60     "-fno-common",
     61 
     62     # Modern build environments should be able to set this to use atomic
     63     # operations for reference counting rather than locks. However, it's
     64     # known not to work on some Android builds.
     65     # "-DOPENSSL_C11_ATOMIC",
     66 ] + select({
     67     ":linux_x86_64": [],
     68     ":mac_x86_64": [],
     69     "//conditions:default": ["-DOPENSSL_NO_ASM"],
     70 })
     71 
     72 crypto_sources_asm = select({
     73     ":linux_x86_64": crypto_sources_linux_x86_64,
     74     ":mac_x86_64": crypto_sources_mac_x86_64,
     75     "//conditions:default": [],
     76 })
     77 
     78 # For C targets only (not C++), compile with C11 support.
     79 boringssl_copts_c11 = boringssl_copts + [
     80     "-std=c11",
     81     "-Wmissing-prototypes",
     82     "-Wold-style-definition",
     83     "-Wstrict-prototypes",
     84 ]
     85 
     86 # For C targets only (not C++), compile with C11 support.
     87 boringssl_copts_cxx = boringssl_copts + [
     88     "-std=c++11",
     89     "-Wmissing-declarations",
     90 ]
     91 
     92 cc_library(
     93     name = "crypto",
     94     srcs = crypto_sources + crypto_internal_headers + crypto_sources_asm,
     95     hdrs = crypto_headers,
     96     copts = boringssl_copts_c11,
     97     includes = ["src/include"],
     98     linkopts = select({
     99         ":mac_x86_64": [],
    100         "//conditions:default": ["-lpthread"],
    101     }),
    102     visibility = ["//visibility:public"],
    103 )
    104 
    105 cc_library(
    106     name = "ssl",
    107     srcs = ssl_c_sources + ssl_internal_headers,
    108     hdrs = ssl_headers,
    109     copts = boringssl_copts_c11,
    110     includes = ["src/include"],
    111     visibility = ["//visibility:public"],
    112     deps = [":crypto", ":ssl_cc"],
    113 )
    114 
    115 cc_library(
    116     name = "ssl_cc",
    117     srcs = ssl_cc_sources + ssl_internal_headers,
    118     hdrs = ssl_headers,
    119     copts = boringssl_copts,
    120     includes = ["src/include"],
    121     deps = [":crypto"],
    122 )
    123 
    124 cc_binary(
    125     name = "bssl",
    126     srcs = tool_sources + tool_headers,
    127     copts = boringssl_copts_cxx,
    128     visibility = ["//visibility:public"],
    129     deps = [":ssl"],
    130 )
    131