cmake_minimum_required(VERSION 3.5)

project(GDCore)

set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) # Force use response file: useful for Ninja build system on Windows.
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
set(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES 1)
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 1)

# Define common directories:
set(GDCORE_include_dir ${GD_base_dir}/Core PARENT_SCOPE)
set(GDCORE_lib_dir ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME} PARENT_SCOPE)

# Create VersionPriv.h - only useful for testing.
if (NOT EMSCRIPTEN)
	file(WRITE "${GD_base_dir}/Core/GDCore/Tools/VersionPriv.h" "#define GD_VERSION_STRING \"0.0.0-0\"")
endif()

# Dependencies on external libraries:
#

# Defines
#
add_definitions(-DGD_IDE_ONLY)
if(EMSCRIPTEN)
	add_definitions(-DEMSCRIPTEN)
endif()
if("${CMAKE_BUILD_TYPE}" MATCHES "Debug")
	add_definitions(-DDEBUG)
else()
	add_definitions(-DRELEASE)
endif()

if(WIN32)
	add_definitions(-DWINDOWS)
	add_definitions("-DGD_CORE_API=__declspec(dllexport)")
	add_definitions(-D__GNUWIN32__)
else()
	if(APPLE)
		add_definitions(-DMACOS)
	else()
		add_definitions(-DLINUX)
	endif()
	add_definitions(-DGD_API=)
	add_definitions(-DGD_CORE_API=)
endif()

# The target
#
include_directories(.)
file(
	GLOB_RECURSE
	source_files
	GDCore/*)

file(
	GLOB_RECURSE
	formatted_source_files
	tests/*
	GDCore/Events/*
	GDCore/Extensions/*
	GDCore/IDE/*
	GDCore/Project/*
	GDCore/Serialization/*
	GDCore/Tools/*)
list(
	REMOVE_ITEM
	formatted_source_files
	"${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.cpp"
	"${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs.h"
	"${CMAKE_CURRENT_SOURCE_DIR}/GDCore/IDE/Dialogs/GDCoreDialogs_dialogs_bitmaps.cpp")
gd_add_clang_utils(GDCore "${formatted_source_files}")

if(EMSCRIPTEN)
	# Emscripten treats all libraries as static libraries
	add_library(GDCore STATIC ${source_files})
else()
	add_library(GDCore SHARED ${source_files})
endif()
if(EMSCRIPTEN)
	set_target_properties(GDCore PROPERTIES SUFFIX ".bc")
elseif(WIN32)
	set_target_properties(GDCore PROPERTIES PREFIX "")
else()
	set_target_properties(GDCore PROPERTIES PREFIX "lib")
endif()
set(LIBRARY_OUTPUT_PATH ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME})
set(ARCHIVE_OUTPUT_PATH ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME})
set(RUNTIME_OUTPUT_PATH ${GD_base_dir}/Binaries/Output/${CMAKE_BUILD_TYPE}_${CMAKE_SYSTEM_NAME})

# Tests
#
if(BUILD_TESTS)
	file(
		GLOB_RECURSE
		test_source_files
		tests/*)

	add_executable(GDCore_tests ${test_source_files})
	set_target_properties(GDCore_tests PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE) # Allow finding dependencies directly from build path on Mac OS X.
	target_link_libraries(GDCore_tests GDCore)
	target_link_libraries(GDCore_tests ${CMAKE_DL_LIBS})
endif()
