From ed563ad234bb2834677e19ebcd90ada555509320 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 16 Nov 2024 11:49:51 +0200 Subject: [PATCH] [SPEC2DEF] Implement support for debug-only exports --- sdk/cmake/gcc.cmake | 9 +++++++-- sdk/cmake/msvc.cmake | 9 +++++++-- sdk/tools/spec2def/spec2def.c | 13 +++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/sdk/cmake/gcc.cmake b/sdk/cmake/gcc.cmake index 860594ef38de4..903f5ba221f8d 100644 --- a/sdk/cmake/gcc.cmake +++ b/sdk/cmake/gcc.cmake @@ -373,11 +373,16 @@ function(fixup_load_config _target) DEPENDS native-pefixup) endfunction() +if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR + CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set(__spec2def_dbg_arg "--dbg") +endif() + function(generate_import_lib _libname _dllname _spec_file __version_arg) # Generate the def for the import lib add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def - COMMAND native-spec2def ${__version_arg} -n=${_dllname} -a=${ARCH2} ${ARGN} --implib -d=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} + COMMAND native-spec2def ${__version_arg} ${__spec2def_dbg_arg} -n=${_dllname} -a=${ARCH2} ${ARGN} --implib -d=${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) # With this, we let DLLTOOL create an import library @@ -450,7 +455,7 @@ function(spec2def _dllname _spec_file) # Generate exports def and C stubs file for the DLL add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c - COMMAND native-spec2def -n=${_dllname} -a=${ARCH2} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} ${__version_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} + COMMAND native-spec2def -n=${_dllname} -a=${ARCH2} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} ${__version_arg} ${__spec2def_dbg_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) # Do not use precompiled headers for the stub file diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake index 6930bc3aa0869..4247ad59e312c 100644 --- a/sdk/cmake/msvc.cmake +++ b/sdk/cmake/msvc.cmake @@ -320,6 +320,11 @@ function(fixup_load_config _target) # msvc knows how to generate a load_config so no hacks here endfunction() +if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR + CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set(__spec2def_dbg_arg "--dbg") +endif() + function(generate_import_lib _libname _dllname _spec_file __version_arg) set(_def_file ${CMAKE_CURRENT_BINARY_DIR}/${_libname}_implib.def) @@ -329,7 +334,7 @@ function(generate_import_lib _libname _dllname _spec_file __version_arg) # Generate the def, asm stub and alias files add_custom_command( OUTPUT ${_asm_stubs_file} ${_def_file} ${_asm_impalias_file} - COMMAND native-spec2def --ms ${__version_arg} -a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${_def_file} -l=${_asm_stubs_file} -i=${_asm_impalias_file} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} + COMMAND native-spec2def --ms ${__version_arg} ${__spec2def_dbg_arg} -a=${SPEC2DEF_ARCH} --implib -n=${_dllname} -d=${_def_file} -l=${_asm_stubs_file} -i=${_asm_impalias_file} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) # Compile the generated asm stub file @@ -402,7 +407,7 @@ function(spec2def _dllname _spec_file) # Generate exports def and C stubs file for the DLL add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}.def ${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c - COMMAND native-spec2def --ms -a=${SPEC2DEF_ARCH} -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} ${__version_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} + COMMAND native-spec2def --ms -a=${SPEC2DEF_ARCH} -n=${_dllname} -d=${CMAKE_CURRENT_BINARY_DIR}/${_file}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${_file}_stubs.c ${__with_relay_arg} ${__version_arg} ${__spec2def_dbg_arg} ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_spec_file} native-spec2def) # Do not use precompiled headers for the stub file diff --git a/sdk/tools/spec2def/spec2def.c b/sdk/tools/spec2def/spec2def.c index cd80dffafcc9f..df844ba9d55d1 100644 --- a/sdk/tools/spec2def/spec2def.c +++ b/sdk/tools/spec2def/spec2def.c @@ -67,6 +67,7 @@ int gbImportLib = 0; int gbNotPrivateNoWarn = 0; int gbTracing = 0; int giArch = ARCH_X86; +int gbDbgExports = 0; char *pszArchString = "i386"; char *pszArchString2; char *pszSourceFileName = NULL; @@ -1162,6 +1163,13 @@ ParseFile(char* pcStart, FILE *fileDest, unsigned *cExports) } while (*pc == ','); } + else if (CompareToken(pc, "-dbg")) + { + if (!gbDbgExports) + { + included = 0; + } + } else if (CompareToken(pc, "-private")) { exp.uFlags |= FL_PRIVATE; @@ -1505,6 +1513,7 @@ void usage(void) " -s= generate a stub file\n" " -i= generate an import alias file\n" " --ms MSVC compatibility\n" + " --dbg Enable debug exports\n" " -n= name of the dll\n" " --version= Sets the version to create exports for\n" " --implib generate a def file for an import library\n" @@ -1571,6 +1580,10 @@ int main(int argc, char *argv[]) { gbMSComp = 1; } + else if (strcasecmp(argv[i], "--dbg") == 0) + { + gbDbgExports = 1; + } else if (strcasecmp(argv[i], "--no-private-warnings") == 0) { gbNotPrivateNoWarn = 1;