set(BUILD_TYPE Release)

add_subdirectory(third/GLEW)
add_subdirectory(third/freeglut)
add_subdirectory(third/bullet)
add_subdirectory(third/jsoncpp)

# build platform library, must be static
project(melissa_platform)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_FLAGS -std=c++11)
set(CMAKE_BUILD_TYPE ${BUILD_TYPE})
add_definitions(-DMELISSA_DESKTOP -DMELISSA_LINUX -DMELISSA_UNIX)
add_library(${PROJECT_NAME} STATIC
    platform/desktop/m3cDesktopSystemMain.cpp
)

# build melissa library
project(melissa)
cmake_minimum_required(VERSION 2.8)

set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_BUILD_TYPE ${BUILD_TYPE})
add_definitions(-DMELISSA_DESKTOP -DMELISSA_LINUX -DMELISSA_UNIX -DMELISSA_EXPORT)

include_directories(. common platform platform/desktop render
                      physics root third/bullet third/freeglut third/glew third/jsoncpp/include)

aux_source_directory(common COMMON_SRC_LIST)
aux_source_directory(render RENDER_SRC_LIST)
aux_source_directory(root ROOT_SRC_LIST)
aux_source_directory(physics PHYS_SRC_LIST)
add_library(${PROJECT_NAME} SHARED
    ${COMMON_SRC_LIST}
    ${RENDER_SRC_LIST}
    ${PHYS_SRC_LIST}
    ${ROOT_SRC_LIST}
    jpgd/jpgd.cpp
    lodepng/lodepng.cpp
    platform/desktop/m3cSoundDesktop.cpp
    platform/desktop/m3cDesktopSystem.cpp
    platform/desktop/m3cDiskFile.cpp
    platform/desktop/m3cDiskFileSystem.cpp)
if(WIN32)
    set(GL_LIB opengl32 winmm)
endif()
if(UNIX)
    set(GL_LIB GL)
endif()
target_link_libraries(${PROJECT_NAME} glut bullet GLEW jsoncpp ${GL_LIB})

# build test project
project(melissa_test)
cmake_minimum_required(VERSION 2.8)
include_directories(. common platform platform/desktop render
                      physics root /usr/include/bullet)
set(CMAKE_CXX_FLAGS -std=c++11)
set(CMAKE_BUILD_TYPE debug)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} melissa_platform melissa)
