draconisplusplus/subprojects/openssl-3.0.8/meson.build

391 lines
9.2 KiB
Meson

project(
'openssl',
'c',
version: '3.0.8',
license : 'Apache-2.0',
meson_version: '>= 0.55',
default_options: [
'warning_level=1',
],
)
# Make sure to generate configs in case they are not already
fs = import('fs')
if not fs.exists('generated-config')
message('Generating OpenSSL configs...')
if host_machine.system() != 'linux'
error('Generator only works on Linux, other platforms are not supported')
endif
bash = find_program('bash')
run_command(
bash,
'generator.sh',
check: true,
env: ['OPENSSL_VERSION=' + meson.project_version()],
)
endif
include_directories = [
'include',
'crypto',
'crypto/modes',
'crypto/ec/curve448',
'crypto/ec/curve448/arch_32',
'providers/common/include',
'providers/implementations/include',
]
compiler = meson.get_compiler('c')
dependencies = [
# TODO: Make this optionally added once we have threading configurable via options
dependency('threads'),
]
defines = [
# Compile out hardware engines. Most are stubs that dynamically load
# the real driver but that poses a security liability when an attacker
# is able to create a malicious DLL in one of the default search paths.
'OPENSSL_NO_HW',
]
c_args = []
asm_opt = get_option('asm')
if asm_opt.disabled()
gas_or_nasm = false
else
gas_or_nasm = (
find_program('as', required: false).found() or
find_program('nasm', required: false).found()
)
endif
is_bsd = host_machine.system() in ['dragonfly', 'freebsd', 'netbsd', 'openbsd']
is_darwin = host_machine.system() == 'darwin'
is_linux = host_machine.system() in ['linux', 'android']
is_sunos = host_machine.system() == 'sunos'
is_windows = host_machine.system() == 'windows'
is_x86 = host_machine.cpu_family() == 'x86'
is_x86_64 = host_machine.cpu_family() == 'x86_64'
is_aarch64 = host_machine.cpu_family() == 'aarch64'
is_mips64 = host_machine.cpu_family() == 'mips64'
is_s390x = host_machine.cpu_family() == 's390x'
is_arm = host_machine.cpu_family() == 'arm'
is_ppc64 = host_machine.cpu_family() == 'ppc64'
is_riskv64 = host_machine.cpu_family() == 'riscv64'
if gas_or_nasm
asm = 'asm'
if is_bsd
if is_x86
arch_subdir = 'BSD-x86'
elif is_x86_64
arch_subdir = 'BSD-x86_64'
else
asm = 'no-asm'
endif
elif is_darwin
if is_aarch64
arch_subdir = 'darwin64-arm64-cc'
elif is_x86_64
arch_subdir = 'darwin64-x86_64-cc'
elif is_x86
arch_subdir = 'darwin-i386-cc'
else
asm = 'no-asm'
endif
elif is_linux
if is_mips64
arch_subdir = 'linux64-mips64'
elif is_s390x
arch_subdir = 'linux64-s390x'
elif is_aarch64
arch_subdir = 'linux-aarch64'
elif is_arm
arch_subdir = 'linux-armv4'
elif is_ppc64
arch_subdir = 'linux-ppc64le'
elif is_x86
arch_subdir = 'linux-elf'
elif is_x86_64
arch_subdir = 'linux-x86_64'
else
asm = 'no-asm'
endif
elif is_sunos
if is_x86_64
arch_subdir = 'solaris64-x86_64-gcc'
elif is_x86
arch_subdir = 'solaris-x86-gcc'
else
asm = 'no-asm'
endif
elif is_windows
if is_x86
warning('x86 + windows combo does not support ASM yet, please contribute')
asm = 'no-asm'
# TODO: Port this for Windows and uncomment
# arch_subdir = 'VC-WIN32'
# asm = 'asm'
#'rules': [
# {
# 'rule_name': 'Assemble',
# 'extension': 'asm',
# 'inputs': [],
# 'outputs': [
# '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).obj',
# ],
# 'action': [
# 'nasm.exe',
# '-f win32',
# '-o', '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).obj',
# '<(RULE_INPUT_PATH)',
# ],
# }
#],
elif is_x86_64
warning('x86_64 + windows combo does not support ASM yet, please contribute')
asm = 'no-asm'
# TODO: Port this for Windows and uncomment
# arch_subdir = 'VC-WIN64A'
# asm = 'asm'
#'rules': [
# {
# 'rule_name': 'Assemble',
# 'extension': 'asm',
# 'inputs': [],
# 'outputs': [
# '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).obj',
# ],
# 'action': [
# 'nasm.exe',
# '-f win64',
# '-DNEAR',
# '-Ox',
# '-g',
# '-o', '<(INTERMEDIATE_DIR)/<(RULE_INPUT_ROOT).obj',
# '<(RULE_INPUT_PATH)',
# ],
# }
#],
else
asm = 'no-asm'
endif
else
asm = 'no-asm'
endif
elif asm_opt.enabled()
error('Neither GNU Assembler nor Netwide Assembler were found, cannot use use "asm=enabled" option')
else
asm = 'no-asm'
endif
if asm == 'no-asm'
defines += ['OPENSSL_NO_ASM']
error_message = 'Unsupported arch+OS combo: ' + host_machine.cpu_family() + ' + ' + host_machine.system()
if is_bsd
if is_x86
arch_subdir = 'BSD-x86'
elif is_x86_64
arch_subdir = 'BSD-x86_64'
else
error(error_message)
endif
elif is_darwin
if is_aarch64
arch_subdir = 'darwin64-arm64-cc'
elif is_x86_64
arch_subdir = 'darwin64-x86_64-cc'
elif is_x86
arch_subdir = 'darwin-i386-cc'
else
error(error_message)
endif
elif is_linux
if is_mips64
arch_subdir = 'linux64-mips64'
elif is_riskv64
arch_subdir = 'linux64-riscv64'
elif is_s390x
arch_subdir = 'linux64-s390x'
elif is_aarch64
arch_subdir = 'linux-aarch64'
elif is_arm
arch_subdir = 'linux-armv4'
elif is_ppc64
arch_subdir = 'linux-ppc64le'
elif is_x86
arch_subdir = 'linux-elf'
elif is_x86_64
arch_subdir = 'linux-x86_64'
else
error(error_message)
endif
elif is_sunos
if is_x86_64
arch_subdir = 'solaris64-x86_64-gcc'
elif is_x86
arch_subdir = 'solaris-x86-gcc'
else
error(error_message)
endif
elif is_windows
if is_x86
arch_subdir = 'VC-WIN32'
elif is_aarch64
arch_subdir = 'VC-WIN64-ARM'
elif is_x86_64
arch_subdir = 'VC-WIN64A'
else
error(error_message)
endif
else
error(error_message)
endif
message('OpenSSL is configured without ASM support')
else
message('OpenSSL is configured with ASM support')
endif
subdir('generated-config/archs' / arch_subdir / asm)
# Build options specific to OS, engines are disabled on purpose for the same reasons as `OPENSSL_NO_HW` above
if is_windows
defines += [
## default of Win. See INSTALL in openssl repo.
'OPENSSLDIR="C:\\Program Files\\Common Files\\SSL"',
'ENGINESDIR="NUL"',
'MODULESDIR="NUL"',
'OPENSSL_SYS_WIN32', 'WIN32_LEAN_AND_MEAN', 'L_ENDIAN',
'_CRT_SECURE_NO_DEPRECATE', 'UNICODE', '_UNICODE',
]
if compiler.get_id() == 'msvc'
c_args += [
'-wd4090', '-Gs0', '-GF', '-Gy', '-nologo',
]
endif
elif is_darwin
defines += [
'OPENSSLDIR="/System/Library/OpenSSL/"',
'ENGINESDIR="/dev/null"',
'MODULESDIR="/dev/null"',
]
c_args += [
'-Wno-missing-field-initializers',
]
elif is_sunos
defines += [
'OPENSSLDIR="/etc/ssl"',
'ENGINESDIR="/dev/null"',
'MODULESDIR="/dev/null"',
'__EXTENSIONS__'
]
else
# Linux and others
defines += [
'OPENSSLDIR="/etc/ssl"',
'ENGINESDIR="/dev/null"',
'MODULESDIR="/dev/null"',
]
c_args += [
'-Wno-missing-field-initializers',
]
if compiler.get_id() != 'clang'
c_args += [
'-Wno-old-style-declaration',
]
endif
endif
foreach library: openssl_libraries
# MSVC fails with "ERROR: C static library 'ws2_32' not found" when `static` is specified at all
if compiler.get_id() == 'msvc'
dependencies += [
compiler.find_library(library),
]
else
dependencies += [
compiler.find_library(
library,
static: get_option('default_library') == 'static',
),
]
endif
endforeach
# We may need to add some defines for static builds
if get_option('default_library') == 'static'
defines += [
'OSSL_CRYPTO_DSO_CONF_H',
'DSO_NONE',
'DSO_EXTENSION=".so"',
'OPENSSL_NO_DSO',
]
endif
foreach define : defines + openssl_defines
c_args += ['-D' + define]
endforeach
c_args += openssl_cflags
include_directories += openssl_include_directories
libcrypto_lib = library(
'crypto',
dependencies: dependencies,
sources: libcrypto_sources,
include_directories: include_directories,
c_args: c_args,
vs_module_defs: 'crypto.def',
install: true,
)
libcrypto_dep = declare_dependency(
include_directories: include_directories,
dependencies: dependencies,
link_with: libcrypto_lib,
)
libssl_lib = library(
'ssl',
dependencies: dependencies + [libcrypto_dep],
sources: libssl_sources,
include_directories: include_directories,
c_args: c_args,
vs_module_defs: 'ssl.def',
install: true,
)
libssl_dep = declare_dependency(
include_directories: include_directories,
dependencies: dependencies + [libcrypto_dep],
link_with: libssl_lib,
)
openssl_dep = declare_dependency(
dependencies: [libcrypto_dep, libssl_dep],
)
openssl_cli_directories = include_directories + [
'apps/include'
]
cli_opt = get_option('build_cli')
openssl_cli = executable(
'openssl',
build_by_default: cli_opt,
dependencies: dependencies + [openssl_dep],
sources: openssl_cli_sources,
include_directories: openssl_cli_directories,
c_args: c_args,
install: cli_opt,
)