Fix libcds on MinGW

This commit is contained in:
Lukas W
2018-04-29 19:34:14 +02:00
parent ef7b8c68d5
commit 8b122d5a4c
10 changed files with 103 additions and 7 deletions

View File

@@ -11,4 +11,53 @@ ENDIF()
ADD_SUBDIRECTORY(rpmalloc)
ADD_SUBDIRECTORY(weakjack)
ADD_SUBDIRECTORY(libcds)
IF(WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
SET(MINGW TRUE)
ENDIF()
IF(MINGW)
# Work around linking errors with MinGW
SET(CDS_LIBRARY_TYPE SHARED)
ELSE()
SET(CDS_LIBRARY_TYPE STATIC)
ENDIF()
ADD_LIBRARY(cds ${CDS_LIBRARY_TYPE}
libcds/src/init.cpp
libcds/src/hp.cpp
libcds/src/dhp.cpp
libcds/src/urcu_gp.cpp
libcds/src/urcu_sh.cpp
libcds/src/thread_data.cpp
libcds/src/topology_hpux.cpp
libcds/src/topology_linux.cpp
libcds/src/topology_osx.cpp
libcds/src/dllmain.cpp
)
SET_TARGET_PROPERTIES(cds PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED ON
)
TARGET_INCLUDE_DIRECTORIES(cds
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/libcds"
)
IF(NEED_MINGW_THREADS_REPLACEMENT)
# Provide win32 threads implementation
TARGET_INCLUDE_DIRECTORIES(cds BEFORE
PRIVATE "${CMAKE_SOURCE_DIR}/include/mingw-std-threads"
PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/mingw-std-threads"
)
ENDIF()
IF(CDS_LIBRARY_TYPE STREQUAL "STATIC")
TARGET_COMPILE_DEFINITIONS(cds
PRIVATE CDS_BUILD_STATIC_LIB
)
ELSE()
TARGET_COMPILE_DEFINITIONS(cds
PRIVATE CDS_BUILD_LIB
)
# Install DLL
install(TARGETS cds RUNTIME DESTINATION .)
ENDIF()

View File

@@ -168,7 +168,7 @@ SET(LMMS_REQUIRED_LIBS ${LMMS_REQUIRED_LIBS}
${SNDFILE_LIBRARIES}
${EXTRA_LIBRARIES}
rpmalloc
cds-s
cds
)
# Expose required libs for tests binary

View File

@@ -14,8 +14,8 @@
#include <QtCore/QDebug>
#include <cds/container/vyukov_mpmc_cycle_queue.h>
#include "libcds.h"
#include <cds/container/vyukov_mpmc_cycle_queue.h>
#include "Memory.h"
@@ -24,9 +24,9 @@ class _MemoryPool_Private : MmAllocator<char>
using Alloc = MmAllocator<char>;
public:
_MemoryPool_Private(size_t size, size_t nmemb)
: m_freelist(nmemb)
, m_elementSize(size)
: m_elementSize(size)
, m_numElms(nmemb)
, m_freelist(nmemb)
{
m_buffer = new char[m_elementSize * m_numElms];
for (size_t i = 0; i < m_numElms; i++) {
@@ -67,7 +67,7 @@ public:
{
if (is_from_pool(ptr)) {
bool pushed = m_freelist.push(reinterpret_cast<char*>(ptr));
assert(pushed);
assert(pushed); Q_UNUSED(pushed);
} else {
do_deallocate(ptr);
}