# cmake file for debase

if (NOT DE_DEFS)
	message(FATAL_ERROR "Include Defs.cmake")
endif ()

set(DEBASE_SRCS
	deDefs.c
	deDefs.h
	deFloat16.c
	deFloat16.h
	deInt32.c
	deInt32.h
	deInt32Test.c
	deMath.c
	deMath.h
	deMathTest.c
	deMemory.c
	deMemory.h
	deRandom.c
	deRandom.h
	deString.c
	deString.h
	deSha1.c
	deSha1.h
	)

add_library(debase STATIC ${DEBASE_SRCS})

# link debase to libm on unix systems
if (DE_OS_IS_UNIX)
	target_link_libraries(debase m)

	add_definitions(-D_XOPEN_SOURCE=600)
endif ()

if (DE_OS_IS_ANDROID)
	find_library(C_LIBRARY NAMES c PATHS /usr/lib /lib)
	find_library(M_LIBRARY NAMES m PATHS /usr/lib /lib)
	find_library(LOG_LIBRARY NAMES log PATHS /usr/lib)
	target_link_libraries(debase ${C_LIBRARY} ${M_LIBRARY} ${LOG_LIBRARY} gcc)
endif ()

if (DE_OS_IS_SYMBIAN)
    target_link_libraries(debase gcc)
endif()
