# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You 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. # # Copyright 2016 The Bazel 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. # # Copied from https://github.com/bazelbuild/rules_foreign_cc/blob/0.7.0/examples/third_party/openssl/BUILD.openssl.bazel # # Modifications: # 1. Create alias `ssl` & `crypto` to align with boringssl. # 2. Build with `@com_github_madler_zlib//:zlib`. # 3. Add more configure options coming from debian openssl package configurations. load("@rules_foreign_cc//foreign_cc:defs.bzl", "configure_make", "configure_make_variant") filegroup( name = "all_srcs", srcs = glob(["**"]), ) CONFIGURE_OPTIONS = [ "no-idea", "no-mdc2", "no-rc5", "no-ssl3", "no-ssl3-method", "enable-rfc3779", "enable-cms", "no-capieng", "enable-ec_nistp_64_gcc_128", "--with-zlib-include=$$EXT_BUILD_DEPS$$", "--with-zlib-lib=$$EXT_BUILD_DEPS$$", # https://stackoverflow.com/questions/36220341/struct-in6-addr-has-no-member-named-s6-addr32-with-ansi "-D_DEFAULT_SOURCE=1", "-DPEDANTIC", ] LIB_NAME = "openssl" MAKE_TARGETS = [ "build_libs", "install_dev", ] config_setting( name = "msvc_compiler", flag_values = { "@bazel_tools//tools/cpp:compiler": "msvc-cl", }, visibility = ["//visibility:public"], ) alias( name = "ssl", actual = "openssl", visibility = ["//visibility:public"], ) alias( name = "crypto", actual = "openssl", visibility = ["//visibility:public"], ) alias( name = "openssl", actual = select({ ":msvc_compiler": "openssl_msvc", "//conditions:default": "openssl_default", }), visibility = ["//visibility:public"], ) configure_make_variant( name = "openssl_msvc", build_data = [ "@nasm//:nasm", "@perl//:perl", ], configure_command = "Configure", configure_in_place = True, configure_options = CONFIGURE_OPTIONS + [ "VC-WIN64A", # Unset Microsoft Assembler (MASM) flags set by built-in MSVC toolchain, # as NASM is unsed to build OpenSSL rather than MASM "ASFLAGS=\" \"", ], configure_prefix = "$PERL", env = { # The Zi flag must be set otherwise OpenSSL fails to build due to missing .pdb files "CFLAGS": "-Zi", "PATH": "$$(dirname $(execpath @nasm//:nasm)):$$PATH", "PERL": "$(execpath @perl//:perl)", }, lib_name = LIB_NAME, lib_source = ":all_srcs", out_static_libs = [ "libssl.lib", "libcrypto.lib", ], targets = MAKE_TARGETS, toolchain = "@rules_foreign_cc//toolchains:preinstalled_nmake_toolchain", deps = [ "@com_github_madler_zlib//:zlib", ], ) # https://wiki.openssl.org/index.php/Compilation_and_Installation configure_make( name = "openssl_default", configure_command = "config", configure_in_place = True, configure_options = CONFIGURE_OPTIONS, env = select({ "@platforms//os:macos": { "AR": "", "PERL": "$$EXT_BUILD_ROOT$$/$(PERL)", }, "//conditions:default": { "PERL": "$$EXT_BUILD_ROOT$$/$(PERL)", }, }), lib_name = LIB_NAME, lib_source = ":all_srcs", # Note that for Linux builds, libssl must come before libcrypto on the linker command-line. # As such, libssl must be listed before libcrypto out_static_libs = [ "libssl.a", "libcrypto.a", ], targets = MAKE_TARGETS, toolchains = ["@rules_perl//:current_toolchain"], deps = [ "@com_github_madler_zlib//:zlib", ], ) filegroup( name = "gen_dir", srcs = [":openssl"], output_group = "gen_dir", )