Old rules we used to use build Postgres with Bazel.
We stopped and used precompiled binaries because it was much less effort. Bazel also had a bad habit of recompiling Postgres and OpenSSL often.
load("@bazel_skylib//rules:build_test.bzl", "build_test") | |
load("@rules_foreign_cc//tools/build_defs:configure.bzl", "configure_make") | |
"""An openssl build file based on a snippet found in the github issue: | |
https://github.com/bazelbuild/rules_foreign_cc/issues/337 | |
""" | |
# Read https://wiki.openssl.org/index.php/Compilation_and_Installation | |
CONFIGURE_OPTIONS = [ | |
"no-comp", | |
"no-idea", | |
"no-weak-ssl-ciphers", | |
] | |
configure_make( | |
name = "openssl", | |
configure_command = "config", | |
configure_env_vars = select({ | |
"@platforms//os:macos": {"AR": ""}, | |
"//conditions:default": {}, | |
}), | |
configure_in_place = True, | |
configure_options = select({ | |
"@platforms//os:macos": [ | |
"ARFLAGS=r", | |
"no-afalgeng", | |
"shared", | |
] + CONFIGURE_OPTIONS, | |
"//conditions:default": [ | |
] + CONFIGURE_OPTIONS, | |
}), | |
lib_source = "@openssl//:all_files", | |
make_commands = [ | |
# Assume 8 cores. Parallel build support is difficult to customize based | |
# on number of cores. | |
# https://github.com/bazelbuild/rules_foreign_cc/issues/329 | |
"make -j8 build_libs", | |
"make install_dev", | |
], | |
shared_libraries = select({ | |
"@platforms//os:macos": [ | |
"libssl.dylib", | |
"libcrypto.dylib", | |
], | |
"//conditions:default": [ | |
"libssl.so", | |
"libcrypto.so", | |
], | |
}), | |
visibility = ["//visibility:public"], | |
) | |
filegroup( | |
name = "gen_dir", | |
srcs = [":openssl"], | |
output_group = "gen_dir", | |
visibility = ["//visibility:public"], | |
) | |
build_test( | |
name = "openssl_build_test", | |
targets = ["//third_party/openssl"], | |
) |
load("@rules_foreign_cc//tools/build_defs:configure.bzl", "configure_make") | |
config_setting( | |
name = "darwin_build", | |
values = {"cpu": "darwin"}, | |
) | |
configure_make( | |
name = "postgres", | |
binaries = [ | |
"clusterdb", | |
"createdb", | |
"createuser", | |
"dropdb", | |
"dropuser", | |
"initdb", | |
"pg_archivecleanup", | |
"pg_basebackup", | |
"pg_checksums", | |
"pg_config", | |
"pg_controldata", | |
"pg_ctl", | |
"pg_dump", | |
"pg_dumpall", | |
"pg_isready", | |
"pg_receivewal", | |
"pg_recvlogical", | |
"pg_resetwal", | |
"pg_restore", | |
"pg_rewind", | |
"pg_test_fsync", | |
"pg_test_timing", | |
"pg_upgrade", | |
"pg_verifybackup", | |
"pg_waldump", | |
"pgbench", | |
"postgres", | |
"psql", | |
"reindexdb", | |
"vacuumdb", | |
], | |
configure_env_vars = select({ | |
# Workaround for libtool no output files specified on MacOS. | |
# https://github.com/bazelbuild/rules_foreign_cc/issues/338 | |
# https://github.com/bazelbuild/rules_foreign_cc/issues/254 | |
":darwin_build": { | |
# Necessary to create a fully static linked library. | |
"CXXFLAGS": "-fPIC", | |
"CFLAGS": "-fPIC", | |
# OSX crosstools specific flags | |
"LDFLAGS": "-undefined error", | |
"AR": "", | |
}, | |
"//conditions:default": { | |
# Necessary to create a fully static linked library. | |
"CXXFLAGS": "-fPIC", | |
"CFLAGS": "-fPIC", | |
}, | |
}), | |
# Workaround for https://github.com/bazelbuild/rules_foreign_cc/issues/442. | |
configure_options = [ | |
"CFLAGS='-Dredacted=\\\"redacted\\\"'", | |
"--with-libraries=$EXT_BUILD_DEPS/openssl/lib", | |
"--with-includes=$EXT_BUILD_DEPS/openssl/include", | |
"--with-openssl", | |
], | |
lib_source = "@postgres//:all_files", | |
# Assume 8 cores. Parallel build support is difficult to customize based | |
# on number of cores. | |
# https://github.com/bazelbuild/rules_foreign_cc/issues/329 | |
make_commands = [ | |
"make -j8", | |
"make install", | |
], | |
shared_libraries = select({ | |
# Workaround for libtool no output files specified on MacOS. | |
# https://github.com/bazelbuild/rules_foreign_cc/issues/338 | |
# https://github.com/bazelbuild/rules_foreign_cc/issues/254 | |
":darwin_build": [ | |
"plpgsql.so", | |
"libpq.dylib", | |
"libpgtypes.dylib", | |
], | |
"//conditions:default": [ | |
"plpgsql.so", | |
"libpq.so", | |
"libpgtypes.so", | |
], | |
}), | |
visibility = ["//visibility:public"], | |
deps = [ | |
"//third_party/openssl", | |
], | |
) |
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") | |
all_files = """filegroup(name = "all_files", srcs = glob(["**"]), visibility = ["//visibility:public"])""" | |
def init_repos_openssl(): | |
http_archive( | |
name = "openssl", | |
sha256 = "aaf2fcb575cdf6491b98ab4829abf78a3dec8402b8b81efc8f23c00d443981bf", | |
build_file_content = all_files, | |
strip_prefix = "openssl-1.1.1j", | |
urls = [ | |
"https://www.openssl.org/source/openssl-1.1.1j.tar.gz", | |
"https://github.com/openssl/openssl/archive/OpenSSL_1_1_1j.tar.gz", | |
], | |
) |
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") | |
all_files = """filegroup(name = "all_files", srcs = glob(["**"]), visibility = ["//visibility:public"])""" | |
def init_repos_postgres(): | |
# Use 'postgres' for current target. Use versions for any other target. | |
http_archive( | |
name = "postgres", | |
build_file_content = all_files, | |
strip_prefix = "postgresql-13.3", | |
urls = [ | |
"https://ftp.postgresql.org/pub/source/v13.3/postgresql-13.3.tar.bz2", | |
], | |
sha256 = "3cd9454fa8c7a6255b6743b767700925ead1b9ab0d7a0f9dcb1151010f8eb4a1", | |
) |