CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(TDengine)

INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/os/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/util/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/common/inc)

IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM))
  INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/cJson/inc)
  INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/lz4/inc)
  AUX_SOURCE_DIRECTORY(src SRC)
  ADD_LIBRARY(tutil ${SRC})
  TARGET_LINK_LIBRARIES(tutil pthread osdetail m rt lz4)
  FIND_PATH(ICONV_INCLUDE_EXIST iconv.h /usr/include/ /usr/local/include/)
  IF (ICONV_INCLUDE_EXIST)
    ADD_DEFINITIONS(-DUSE_LIBICONV)
    FIND_PATH(ICONV_LIBRARY_A_EXIST libiconv.a /usr/lib/ /usr/local/lib/ /lib64)
    FIND_PATH(ICONV_LIBRARY_SO_EXIST libiconv.so /usr/lib/ /usr/local/lib/ /lib64)
    IF (ICONV_LIBRARY_A_EXIST OR ICONV_LIBRARY_SO_EXIST)
      MESSAGE(STATUS "Use the installed libiconv library")
      TARGET_LINK_LIBRARIES(tutil iconv)
    ELSE ()
      # libiconv library is already included in GLIBC,
      MESSAGE(STATUS "Use the iconv functions in GLIBC")
    ENDIF ()
  ELSE ()
    MESSAGE(STATUS "Failed to find iconv, use default encoding method")
  ENDIF ()

  ADD_SUBDIRECTORY(tests)
ELSEIF (TD_WINDOWS_64)
  ADD_DEFINITIONS(-DUSE_LIBICONV)
  INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/pthread)
  INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/iconv)
  INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/regex)
  INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/inc)
  LIST(APPEND SRC ./src/hash.c)
  LIST(APPEND SRC ./src/ihash.c)
  LIST(APPEND SRC ./src/lz4.c)
  LIST(APPEND SRC ./src/shash.c)
  LIST(APPEND SRC ./src/tbase64.c)
  LIST(APPEND SRC ./src/tcache.c)
  LIST(APPEND SRC ./src/tcompression.c)
  LIST(APPEND SRC ./src/textbuffer.c)
  LIST(APPEND SRC ./src/tglobalcfg.c)
  LIST(APPEND SRC ./src/thash.c)
  LIST(APPEND SRC ./src/thashutil.c)
  LIST(APPEND SRC ./src/thistogram.c)
  LIST(APPEND SRC ./src/tidpool.c)
  LIST(APPEND SRC ./src/tinterpolation.c)
  LIST(APPEND SRC ./src/tlog.c)
  LIST(APPEND SRC ./src/tlosertree.c)
  LIST(APPEND SRC ./src/tmd5.c)
  LIST(APPEND SRC ./src/tmem.c)
  LIST(APPEND SRC ./src/tmempool.c)
  LIST(APPEND SRC ./src/tmodule.c)
  LIST(APPEND SRC ./src/tnote.c)
  LIST(APPEND SRC ./src/tpercentile.c)
  LIST(APPEND SRC ./src/tsched.c)
  LIST(APPEND SRC ./src/tskiplist.c)
  LIST(APPEND SRC ./src/tsocket.c)
  LIST(APPEND SRC ./src/tstrbuild.c)
  LIST(APPEND SRC ./src/ttime.c)
  LIST(APPEND SRC ./src/ttimer.c)
  LIST(APPEND SRC ./src/ttokenizer.c)
  LIST(APPEND SRC ./src/ttypes.c)
  LIST(APPEND SRC ./src/tutil.c)
  LIST(APPEND SRC ./src/version.c)
  ADD_LIBRARY(tutil ${SRC}) 
  TARGET_LINK_LIBRARIES(tutil iconv regex pthread osdetail winmm IPHLPAPI ws2_32 lz4)
ELSEIF(TD_DARWIN_64)
  ADD_DEFINITIONS(-DUSE_LIBICONV)
  AUX_SOURCE_DIRECTORY(src SRC)
  ADD_LIBRARY(tutil ${SRC})
  TARGET_LINK_LIBRARIES(tutil iconv pthread osdetail lz4)
ENDIF()

#  TARGET_LINK_LIBRARIES(tutil mstorage)
