Path: blob/main/crypto/openssl/Configurations/shared-info.pl
34859 views
#! /usr/bin/env perl1# -*- mode: perl; -*-2# Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.3#4# Licensed under the Apache License 2.0 (the "License"). You may not use5# this file except in compliance with the License. You can obtain a copy6# in the file LICENSE in the source distribution or at7# https://www.openssl.org/source/license.html89# This is a collection of extra attributes to be used as input for creating10# shared libraries, currently on any Unix variant, including Unix like11# environments on Windows.1213sub detect_gnu_ld {14my @lines =15`$config{CROSS_COMPILE}$config{CC} -Wl,-V /dev/null 2>&1`;16return grep /^GNU ld/, @lines;17}18sub detect_gnu_cc {19my @lines =20`$config{CROSS_COMPILE}$config{CC} -v 2>&1`;21return grep /gcc/, @lines;22}2324my %shared_info;25%shared_info = (26'gnu-shared' => {27shared_ldflag => '-shared -Wl,-Bsymbolic',28shared_sonameflag => '-Wl,-soname=',29},30'linux-shared' => sub {31return {32%{$shared_info{'gnu-shared'}},33shared_defflag => '-Wl,--version-script=',34dso_ldflags =>35(grep /(?:^|\s)-fsanitize/,36@{$config{CFLAGS}}, @{$config{cflags}})37? ''38: '-Wl,-z,defs',39};40},41'bsd-gcc-shared' => sub { return $shared_info{'linux-shared'}; },42'bsd-gcc-nodef-shared' => sub {43return {44%{$shared_info{'gnu-shared'}},45shared_defflags => '-Wl,--version-script=',46};47},48'darwin-shared' => {49module_ldflags => '-bundle',50shared_ldflag => '-dynamiclib -current_version $(SHLIB_VERSION_NUMBER) -compatibility_version $(SHLIB_VERSION_NUMBER)',51shared_sonameflag => '-install_name $(libdir)/',52},53'cygwin-shared' => {54shared_ldflag => '-shared -Wl,--enable-auto-image-base',55shared_impflag => '-Wl,--out-implib=',56},57'mingw-shared' => sub {58return {59%{$shared_info{'cygwin-shared'}},60# def_flag made to empty string so it still generates61# something62shared_defflag => '',63shared_argfileflag => '@',64};65},66'alpha-osf1-shared' => sub {67return $shared_info{'gnu-shared'} if detect_gnu_ld();68return {69module_ldflags => '-shared -Wl,-Bsymbolic',70shared_ldflag => '-shared -Wl,-Bsymbolic -set_version $(SHLIB_VERSION_NUMBER)',71};72},73'svr3-shared' => sub {74return $shared_info{'gnu-shared'} if detect_gnu_ld();75return {76shared_ldflag => '-G',77shared_sonameflag => '-h ',78};79},80'svr5-shared' => sub {81return $shared_info{'gnu-shared'} if detect_gnu_ld();82return {83shared_ldflag => detect_gnu_cc() ? '-shared' : '-G',84shared_sonameflag => '-h ',85};86},87'solaris-gcc-shared' => sub {88return $shared_info{'linux-shared'} if detect_gnu_ld();89return {90# Note: we should also have -shared here, but because some91# config targets define it with an added -static-libgcc92# following it, we don't want to change the order. This93# forces all solaris gcc config targets to define shared_ldflag94shared_ldflag => '-Wl,-Bsymbolic',95shared_defflag => "-Wl,-M,",96shared_sonameflag => "-Wl,-h,",97};98},99);100101102