From d81b125debd1e88ff7701fc4a1748dbca244cf7e Mon Sep 17 00:00:00 2001 From: TsXor Date: Mon, 2 Sep 2024 16:33:29 +0800 Subject: [PATCH] let msvc produce something --- CMakeLists.txt | 50 ++++++++++++++++++++++++++++++++++---------------- allocfail.c | 1 - fileline.c | 4 ++++ posix.c | 4 ++++ read.c | 6 ++++++ 5 files changed, 48 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c89f98e..183996f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,9 @@ foreach(AUTODEF ${AUTODEFS}) list(APPEND CMAKE_REQUIRED_DEFINITIONS -D${AUTODEF}=1) endforeach() +# let MSVC shut up safety nonsense +set(_CRT_SECURE_NO_WARNINGS 1) +append_bool_def(BACKTRACE_DEFINITIONS _CRT_SECURE_NO_WARNINGS) # check for libraries check_library_exists("z" "compress" "" HAVE_ZLIB) @@ -86,10 +89,18 @@ check_compiler_flag(C "-funwind-tables" HAVE_F_UNWIND_TABLES) check_compiler_flag(C "-frandom-seed=${RANDOM_SEED_STRING}" HAVE_F_RANDOM_SEED) check_compiler_flag(C "-pthread" HAVE_PTHREAD) check_compiler_flag(C "-gdwarf-5" HAVE_DWARF5) -check_linker_flag(C "-Wl,--build-id" HAVE_BUILDID) -check_linker_flag(C "-Wl,--compress-debug-sections=zlib-gnu" HAVE_COMPRESSED_DEBUG_ZLIB_GNU) -check_linker_flag(C "-Wl,--compress-debug-sections=zlib-gabi" HAVE_COMPRESSED_DEBUG_ZLIB_GABI) -check_linker_flag(C "-Wl,--compress-debug-sections=zst" HAVE_COMPRESSED_DEBUG_ZSTD) +if (MSVC) + # somehow linker check will always pass, skip that for MSVC + set(HAVE_BUILDID 0) + set(HAVE_COMPRESSED_DEBUG_ZLIB_GNU 0) + set(HAVE_COMPRESSED_DEBUG_ZLIB_GABI 0) + set(HAVE_COMPRESSED_DEBUG_ZSTD 0) +else() + check_linker_flag(C "-Wl,--build-id" HAVE_BUILDID) + check_linker_flag(C "-Wl,--compress-debug-sections=zlib-gnu" HAVE_COMPRESSED_DEBUG_ZLIB_GNU) + check_linker_flag(C "-Wl,--compress-debug-sections=zlib-gabi" HAVE_COMPRESSED_DEBUG_ZLIB_GABI) + check_linker_flag(C "-Wl,--compress-debug-sections=zst" HAVE_COMPRESSED_DEBUG_ZSTD) +endif() # check for headers and functions @@ -196,16 +207,18 @@ if (NOT HAVE_CLOCK_GETTIME) endif() -# set warning flags -list(APPEND WARNING_FLAGS - -W -Wall -Wwrite-strings -Wstrict-prototypes - -Wmissing-prototypes -Wold-style-definition - -Wmissing-format-attribute -Wcast-qual - -Wno-attributes -Wno-unknown-attributes - -Wpointer-arith -) -if (NOT DISABLE_WERROR) - list(APPEND WARNING_FLAGS -Werror) +if (NOT MSVC) + # set warning flags + list(APPEND WARNING_FLAGS + -W -Wall -Wwrite-strings -Wstrict-prototypes + -Wmissing-prototypes -Wold-style-definition + -Wmissing-format-attribute -Wcast-qual + -Wno-attributes -Wno-unknown-attributes + -Wpointer-arith + ) + if (NOT DISABLE_WERROR) + list(APPEND WARNING_FLAGS -Werror) + endif() endif() # common source files @@ -354,7 +367,12 @@ endfunction() function(add_backtrace_part_with_pic TARGET_NAME) list(SUBLIST ARGV 1 -1 OPTARGS) add_backtrace_part(${TARGET_NAME} ${OPTARGS}) - add_backtrace_part(${TARGET_NAME}_pic ${OPTARGS} FLAGS -fPIC) + if (MSVC) + # MSVC have no PIC option and Windows DLL doesn't need to be PIC + add_library(${TARGET_NAME}_pic ALIAS ${TARGET_NAME}) + else() + add_backtrace_part(${TARGET_NAME}_pic ${OPTARGS} FLAGS -fPIC) + endif() endfunction() add_backtrace_part_with_pic(common SRCS ${BACKTRACE_FILES}) @@ -424,7 +442,7 @@ install( # tests here ... -if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING) +if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING AND BACKTRACE_SUPPORTED) function(add_backtrace_test TARGET_NAME) cmake_parse_arguments(PARSE_ARGV 1 TEST "WRAPPED;DSYM" "CWD" "SRCS;DEFS;PARTS;LINKS;COMMAND;FLAGS;LDFLAGS;DEPFILE") diff --git a/allocfail.c b/allocfail.c index fb92821..46c1dc8 100644 --- a/allocfail.c +++ b/allocfail.c @@ -33,7 +33,6 @@ POSSIBILITY OF SUCH DAMAGE. */ #include #include #include -#include #include "filenames.h" diff --git a/fileline.c b/fileline.c index 68e80c6..7c0938c 100644 --- a/fileline.c +++ b/fileline.c @@ -37,7 +37,11 @@ POSSIBILITY OF SUCH DAMAGE. */ #include #include #include +#ifdef _MSC_VER +#include +#else #include +#endif #if defined (HAVE_KERN_PROC_ARGS) || defined (HAVE_KERN_PROC) #include diff --git a/posix.c b/posix.c index 79f4950..545a3be 100644 --- a/posix.c +++ b/posix.c @@ -36,7 +36,11 @@ POSSIBILITY OF SUCH DAMAGE. */ #include #include #include +#ifdef _MSC_VER +#include +#else #include +#endif #include "backtrace.h" #include "internal.h" diff --git a/read.c b/read.c index 7af6660..82bf043 100644 --- a/read.c +++ b/read.c @@ -35,7 +35,13 @@ POSSIBILITY OF SUCH DAMAGE. */ #include #include #include +#ifdef _MSC_VER +#include +#include +typedef SSIZE_T ssize_t; +#else #include +#endif #include "backtrace.h" #include "internal.h"