project (dmmlib-library C)

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif(NOT CMAKE_BUILD_TYPE)

set(DMMLIB_PUBLIC_INCLUDE_DIRS
  ${CMAKE_SOURCE_DIR}/include
  CACHE INTERNAL "dmmlib public include directories"
)

set(DMMLIB_PRIVATE_INCLUDE_DIRS
	${CMAKE_SOURCE_DIR}/private-include
	${CMAKE_BINARY_DIR}
)

if (WITH_SHARED_LIB)
  set(DMMLIB_SHARED_LIBRARY
    dmm_shared
    CACHE INTERNAL "dmmlib shared library"
)
endif (WITH_SHARED_LIB)

if (WITH_STATIC_LIB)
  set(DMMLIB_STATIC_LIBRARY
    dmm_static
    CACHE INTERNAL "dmmlib static library"
  )
endif (WITH_STATIC_LIB)

set(dmmlib_SRCS
  block_header.c
  linked_lists/linked_lists.c
  linked_lists/search_algorithms.c
  custom_free.c
  custom_malloc.c
  other.c
  initialize_allocator.c
  sys_alloc.c
  #  dmm_adaptor.c
  print_stats.c
)

if (HAVE_LOCKS)
  find_package (Threads)
  set(dmmlib_SRCS
    ${dmmlib_SRCS}
    posix_lock.c
  )
endif (HAVE_LOCKS)

if (COALESCING_FIXED OR COALESCING_VARIABLE)
  set(dmmlib_SRCS
    ${dmmlib_SRCS}
    coalesce.c
  )
endif (COALESCING_FIXED OR COALESCING_VARIABLE)

if (SPLITTING_FIXED OR SPLITTING_VARIABLE)
  set(dmmlib_SRCS
    ${dmmlib_SRCS}
    split.c
  )
endif (SPLITTING_FIXED OR SPLITTING_VARIABLE)

include_directories(
  ${DMMLIB_PUBLIC_INCLUDE_DIRS}
  ${DMMLIB_PRIVATE_INCLUDE_DIRS}
)

if (WITH_SHARED_LIB)
  add_library(${DMMLIB_SHARED_LIBRARY} SHARED ${dmmlib_SRCS})
endif (WITH_SHARED_LIB)

if (WITH_STATIC_LIB)
  add_library(${DMMLIB_STATIC_LIBRARY} STATIC ${dmmlib_SRCS})
endif (WITH_STATIC_LIB)

