diff options
author | Tanzinul Islam <tanzinul.islam@gmail.com> | 2020-12-13 18:01:46 +0000 |
---|---|---|
committer | Dmitry Belyavskiy <beldmit@gmail.com> | 2021-04-19 11:05:55 +0200 |
commit | 491a1e3363228e8276ee293a86acd7a961ffe9d3 (patch) | |
tree | ec0d2baa0debc8c08f0e75fbcb3cfa3792395803 /Configurations/50-cppbuilder.conf | |
parent | 16f2a44435fccbd7466b0659220c765a17e5d0c0 (diff) |
Link with .def files
MSVC's `link.exe` automatically finds `__cdecl` C functions (which are
decorated with a leading underscore by the compiler) when they are
mentioned in a `.def` file without the leading underscore. This is an
[under-documented feature][1] of MSVC's `link.exe`. C++Builder's
`ilink32.exe` doesn't do this, and thus needs the name-translation in
the `.def` file. Then `implib.exe` needs to be told to re-add it.
(The Clang-based `bcc32c.exe` doesn't implement the [`-vu` or `-u-`][2]
options to skip adding the leading underscore to `__cdecl` C function
names, so this is the only way to have things work with non-underscored
export names in the DLLs.)
[1]: https://github.com/MicrosoftDocs/cpp-docs/issues/2653
[2]: http://docwiki.embarcadero.com/RADStudio/Sydney/en/Options_Not_Supported_by_Clang-enhanced_C%2B%2B_Compilers#BCC32_Options_that_Are_Not_Supported_by_Clang-enhanced_C.2B.2B_Compilers
Also silence linker warnings on duplicate symbols and ensure that error-
case cleanup in link rules work in C++Builder's `make.exe`.
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
(Merged from https://github.com/openssl/openssl/pull/13540)
Diffstat (limited to 'Configurations/50-cppbuilder.conf')
-rw-r--r-- | Configurations/50-cppbuilder.conf | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Configurations/50-cppbuilder.conf b/Configurations/50-cppbuilder.conf index 7ca972956a..b604e12d09 100644 --- a/Configurations/50-cppbuilder.conf +++ b/Configurations/50-cppbuilder.conf @@ -20,12 +20,12 @@ my %targets = ( coutflag => "-o", cpp_depend_flags => "-Hp", LD => "ilink32", - LDFLAGS => picker(default => "-ap -x -Gn -q", + LDFLAGS => picker(default => "-x -Gn -q -w-dup", debug => '-j"$(BDS)\lib\win32c\debug" ' . '-L"$(BDS)\lib\win32c\debug" -v', release => '-j"$(BDS)\lib\win32c\release" ' . '-L"$(BDS)\lib\win32c\release"'), - bin_lflags => "-Tpe c0x32.obj wildargs.obj", + bin_lflags => "-ap -Tpe c0x32.obj wildargs.obj", ldoutflag => ",", ldpostoutflag => ",,", ld_resp_delim => " +\n", @@ -44,11 +44,12 @@ my %targets = ( RCFLAGS => '-i"$(BDS)\include\windows\sdk"', rcoutflag => "-fo", shared_target => "win-shared", - shared_ldflag => "-Tpd c0d32.obj", - dso_lflags => "-Tpd c0d32.obj", + shared_ldflag => "-aa -Tpd c0d32.obj", lddefflag => ",", ldresflag => ",", - ld_implib_rule => 'implib $< $**', + ld_implib_rule => 'implib -a $< $**', dso_scheme => "win32", + shared_defflag => '', + perl_platform => 'Windows::cppbuilder', } ); |