From 84d868c1f49c7f7cb7caec151197523e132fe2fd Mon Sep 17 00:00:00 2001 From: lihui Date: Wed, 6 May 2020 14:10:19 +0800 Subject: [PATCH] [TD-173] --- CMakeLists.txt | 12 ++++++++--- deps/iconv/CMakeLists.txt | 2 +- deps/pthread/CMakeLists.txt | 2 +- deps/regex/CMakeLists.txt | 2 +- src/client/CMakeLists.txt | 2 +- src/inc/taosmsg.h | 18 +++++++++++++---- src/kit/shell/CMakeLists.txt | 2 +- src/os/windows/CMakeLists.txt | 2 +- src/os/windows/inc/os.h | 7 +++++-- src/os/windows/src/twindows.c | 28 ++++++++++++++++++++++++++ src/rpc/CMakeLists.txt | 2 +- src/system/detail/src/vnodeQueryImpl.c | 2 ++ src/system/detail/src/vnodeStore.c | 2 ++ src/util/CMakeLists.txt | 2 +- tests/examples/c/CMakeLists.txt | 2 +- 15 files changed, 69 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73cd174ed4..634703a791 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,7 @@ IF (NOT DEFINED TD_CLUSTER) SET(TD_MIPS_32 FALSE) SET(TD_DARWIN_64 FALSE) SET(TD_WINDOWS_64 FALSE) + SET(TD_WINDOWS_32 FALSE) SET(TD_PAGMODE_LITE FALSE) IF (${PAGMODE} MATCHES "lite") @@ -127,6 +128,11 @@ IF (NOT DEFINED TD_CLUSTER) SET(TD_OS_DIR ${TD_COMMUNITY_DIR}/src/os/windows) ADD_DEFINITIONS(-D_M_X64) MESSAGE(STATUS "The current platform is Windows 64-bit") + ELSEIF(${CMAKE_SIZEOF_VOID_P} MATCHES 4) + SET(TD_WINDOWS_32 TRUE) + SET(TD_OS_DIR ${TD_COMMUNITY_DIR}/src/os/windows) + #ADD_DEFINITIONS(-D_M_X64) + MESSAGE(STATUS "The current platform is Windows 32-bit") ELSE () MESSAGE(FATAL_ERROR "The current platform is Windows 32-bit, not supported yet") EXIT () @@ -194,7 +200,7 @@ IF (NOT DEFINED TD_CLUSTER) link_library(/usr/lib/libargp.a) ADD_DEFINITIONS(-D_ALPINE) ENDIF () - ELSEIF (TD_WINDOWS_64) + ELSEIF (TD_WINDOWS_64 OR TD_WINDOWS_32) SET(CMAKE_GENERATOR "NMake Makefiles" CACHE INTERNAL "" FORCE) IF (NOT TD_GODLL) SET(COMMON_FLAGS "/nologo /WX- /Oi /Oy- /Gm- /EHsc /MT /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Gd /errorReport:prompt /analyze-") @@ -235,7 +241,7 @@ IF (NOT DEFINED TD_CLUSTER) ELSEIF (${CMAKE_BUILD_TYPE} MATCHES "Release") MESSAGE(STATUS "Build Release Version") ELSE () - IF (TD_WINDOWS_64) + IF (TD_WINDOWS_64 OR TD_WINDOWS_32) SET(CMAKE_BUILD_TYPE "Release") MESSAGE(STATUS "Build Release Version in Windows as default") ELSE () @@ -268,7 +274,7 @@ IF (NOT DEFINED TD_CLUSTER) INSTALL(CODE "MESSAGE(\"make install script: ${TD_MAKE_INSTALL_SH}\")") INSTALL(CODE "execute_process(COMMAND chmod 777 ${TD_MAKE_INSTALL_SH})") INSTALL(CODE "execute_process(COMMAND ${TD_MAKE_INSTALL_SH} ${TD_COMMUNITY_DIR} ${PROJECT_BINARY_DIR})") - ELSEIF (TD_WINDOWS_64) + ELSEIF (TD_WINDOWS_64 OR TD_WINDOWS_32) SET(CMAKE_INSTALL_PREFIX C:/TDengine) IF (NOT TD_GODLL) INSTALL(DIRECTORY ${TD_COMMUNITY_DIR}/src/connector/go DESTINATION connector) diff --git a/deps/iconv/CMakeLists.txt b/deps/iconv/CMakeLists.txt index 944cb400e0..b2a5dce903 100644 --- a/deps/iconv/CMakeLists.txt +++ b/deps/iconv/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) -IF (TD_WINDOWS_64) +IF (TD_WINDOWS_64 OR TD_WINDOWS_32) LIST(APPEND SRC iconv.c) LIST(APPEND SRC localcharset.c) INCLUDE_DIRECTORIES(.) diff --git a/deps/pthread/CMakeLists.txt b/deps/pthread/CMakeLists.txt index a218d05bab..4526d4a651 100644 --- a/deps/pthread/CMakeLists.txt +++ b/deps/pthread/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) -IF (TD_WINDOWS_64) +IF (TD_WINDOWS_64 OR TD_WINDOWS_32) INCLUDE_DIRECTORIES(.) LIST(APPEND SRC pthread.c) ADD_LIBRARY(pthread ${SRC}) diff --git a/deps/regex/CMakeLists.txt b/deps/regex/CMakeLists.txt index 8f8396caa4..5a6dd9d7d8 100644 --- a/deps/regex/CMakeLists.txt +++ b/deps/regex/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) -IF (TD_WINDOWS_64) +IF (TD_WINDOWS_64 OR TD_WINDOWS_32) INCLUDE_DIRECTORIES(inc .) LIST(APPEND SRC regex.c) ADD_LIBRARY(regex ${SRC}) diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index 92d6b61eb2..d0336a752c 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -31,7 +31,7 @@ IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM)) MESSAGE(STATUS "build version ${VERSION_INFO}") SET_TARGET_PROPERTIES(taos PROPERTIES VERSION ${VERSION_INFO} SOVERSION 1) -ELSEIF (TD_WINDOWS_64) +ELSEIF (TD_WINDOWS_64 OR TD_WINDOWS_32) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/jni/windows) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/jni/windows/win32) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h index 56b5a020a6..3a843d111b 100644 --- a/src/inc/taosmsg.h +++ b/src/inc/taosmsg.h @@ -439,9 +439,15 @@ typedef struct SSqlFuncExprMsg { } SSqlFuncExprMsg; typedef struct SSqlBinaryExprInfo { - struct tSQLBinaryExpr *pBinExpr; /* for binary expression */ + union { + struct tSQLBinaryExpr *pBinExpr; /* for binary expression */ + int64_t resvSpace0; + }; int32_t numOfCols; /* binary expression involves the readed number of columns*/ - SColIndexEx * pReqColumns; /* source column list */ + union { + SColIndexEx * pReqColumns; /* source column list */ + int64_t resvSpace1; + }; } SSqlBinaryExprInfo; typedef struct SSqlFunctionExpr { @@ -481,8 +487,12 @@ typedef struct SColumnInfo { int16_t colId; int16_t type; int16_t bytes; - int16_t numOfFilters; - SColumnFilterInfo *filters; + int16_t numOfFilters; + union { + SColumnFilterInfo *filters; + int64_t resvSpace; + }; + } SColumnInfo; /* diff --git a/src/kit/shell/CMakeLists.txt b/src/kit/shell/CMakeLists.txt index 0f490c58b1..d3b9bbf61d 100644 --- a/src/kit/shell/CMakeLists.txt +++ b/src/kit/shell/CMakeLists.txt @@ -19,7 +19,7 @@ IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM)) ENDIF () SET_TARGET_PROPERTIES(shell PROPERTIES OUTPUT_NAME taos) -ELSEIF (TD_WINDOWS_64) +ELSEIF (TD_WINDOWS_64 OR TD_WINDOWS_32) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/regex) LIST(APPEND SRC ./src/shellEngine.c) diff --git a/src/os/windows/CMakeLists.txt b/src/os/windows/CMakeLists.txt index dc60b736ea..6e8695a8a8 100644 --- a/src/os/windows/CMakeLists.txt +++ b/src/os/windows/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(TDengine) -IF (TD_WINDOWS_64) +IF (TD_WINDOWS_64 OR TD_WINDOWS_32) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/inc) INCLUDE_DIRECTORIES(inc) diff --git a/src/os/windows/inc/os.h b/src/os/windows/inc/os.h index 3f957e8abd..c26d1cd540 100644 --- a/src/os/windows/inc/os.h +++ b/src/os/windows/inc/os.h @@ -142,8 +142,11 @@ extern "C" { #define atomic_exchange_16(ptr, val) _InterlockedExchange16((short volatile*)(ptr), (short)(val)) #define atomic_exchange_32(ptr, val) _InterlockedExchange((long volatile*)(ptr), (long)(val)) #define atomic_exchange_64(ptr, val) _InterlockedExchange64((__int64 volatile*)(ptr), (__int64)(val)) -#define atomic_exchange_ptr(ptr, val) _InterlockedExchangePointer((void* volatile*)(ptr), (void*)(val)) - +#if (_MSC_VER == 1800) + #define atomic_exchange_ptr(ptr, val) InterlockedExchangePointer((void* volatile*)(ptr), (void*)(val)) +#else + #define atomic_exchange_ptr(ptr, val) _InterlockedExchangePointer((void* volatile*)(ptr), (void*)(val)) +#endif #ifdef _TD_GO_DLL_ #define atomic_val_compare_exchange_8 __sync_val_compare_and_swap #else diff --git a/src/os/windows/src/twindows.c b/src/os/windows/src/twindows.c index 30973165df..3f048cde7a 100644 --- a/src/os/windows/src/twindows.c +++ b/src/os/windows/src/twindows.c @@ -93,7 +93,11 @@ long interlocked_add_fetch_32(long volatile* ptr, long val) { } __int64 interlocked_add_fetch_64(__int64 volatile* ptr, __int64 val) { +#ifdef _WIN64 return _InterlockedExchangeAdd64(ptr, val) + val; +#else + return _InterlockedExchangeAdd(ptr, val) + val; +#endif } // and @@ -377,9 +381,29 @@ int fsendfile(FILE* out_file, FILE* in_file, int64_t* offset, int32_t count) { return writeLen; } +unsigned char _MyBitScanForward64(unsigned long *ret, uint64_t x) { + unsigned long x0 = (unsigned long)x, top, bottom; + _BitScanForward(&top, (unsigned long)(x >> 32)); + _BitScanForward(&bottom, x0); + *ret = x0 ? bottom : 32 + top; + return x != 0; +} + +unsigned char _MyBitScanReverse64(unsigned long *ret, uint64_t x) { + unsigned long x1 = (unsigned long)(x >> 32), top, bottom; + _BitScanReverse(&top, x1); + _BitScanReverse(&bottom, (unsigned long)x); + *ret = x1 ? top + 32 : bottom; + return x != 0; +} + int32_t BUILDIN_CLZL(uint64_t val) { unsigned long r = 0; +#ifdef _WIN64 _BitScanReverse64(&r, val); +#else + _MyBitScanReverse64(&r, val); +#endif return (int)(r >> 3); } @@ -391,7 +415,11 @@ int32_t BUILDIN_CLZ(uint32_t val) { int32_t BUILDIN_CTZL(uint64_t val) { unsigned long r = 0; +#ifdef _WIN64 _BitScanForward64(&r, val); +#else + _MyBitScanForward64(&r, val); +#endif return (int)(r >> 3); } diff --git a/src/rpc/CMakeLists.txt b/src/rpc/CMakeLists.txt index 8d54d5fda5..e06b462d2c 100644 --- a/src/rpc/CMakeLists.txt +++ b/src/rpc/CMakeLists.txt @@ -12,7 +12,7 @@ ELSEIF (TD_DARWIN_64) LIST(APPEND SRC ./src/trpc.c) LIST(APPEND SRC ./src/tstring.c) LIST(APPEND SRC ./src/tudp.c) -ELSEIF (TD_WINDOWS_64) +ELSEIF (TD_WINDOWS_64 OR TD_WINDOWS_32) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) LIST(APPEND SRC ./src/thaship.c) LIST(APPEND SRC ./src/trpc.c) diff --git a/src/system/detail/src/vnodeQueryImpl.c b/src/system/detail/src/vnodeQueryImpl.c index 8a577f134b..ad5d5c4b3a 100644 --- a/src/system/detail/src/vnodeQueryImpl.c +++ b/src/system/detail/src/vnodeQueryImpl.c @@ -35,6 +35,8 @@ #include "vnodeQueryImpl.h" #include "vnodeStatus.h" +#include + enum { TS_JOIN_TS_EQUAL = 0, TS_JOIN_TS_NOT_EQUALS = 1, diff --git a/src/system/detail/src/vnodeStore.c b/src/system/detail/src/vnodeStore.c index 5949b1636d..92e90ebe84 100644 --- a/src/system/detail/src/vnodeStore.c +++ b/src/system/detail/src/vnodeStore.c @@ -24,6 +24,8 @@ #include "vnodeUtil.h" #include "vnodeStatus.h" +#include + int tsMaxVnode = -1; int tsOpenVnodes = 0; SVnodeObj *vnodeList = NULL; diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index d8f74f46f4..79304d976b 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -28,7 +28,7 @@ IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM)) MESSAGE(STATUS "Failed to find iconv, use default encoding method") ENDIF () ENDIF () -ELSEIF (TD_WINDOWS_64) +ELSEIF (TD_WINDOWS_64 OR TD_WINDOWS_32) ADD_DEFINITIONS(-DUSE_LIBICONV) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread) INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/iconv) diff --git a/tests/examples/c/CMakeLists.txt b/tests/examples/c/CMakeLists.txt index 287fca7d41..f97075fba8 100644 --- a/tests/examples/c/CMakeLists.txt +++ b/tests/examples/c/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(TDengine) -IF (TD_WINDOWS_64) +IF (TD_WINDOWS_64 OR TD_WINDOWS_32) INCLUDE_DIRECTORIES(${TD_ROOT_DIR}/deps/pthread) ENDIF () -- GitLab