ModEasy, a c++ library, is an easy to add modding system that is functional out of the box, but also designed to be extendable for whatever you may need.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

127 lines
4.3 KiB

####################
#Configure PROJECT
####################
# set the PROJECT version number
set (VERSION_MAJOR 0)
set (VERSION_MINOR 0)
set (VERSION_PATCH 0)
set (VERSION_NUMBER "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
# Set required cmake version and project details
cmake_minimum_required (VERSION 3.0)
project ("ModdingFramework" VERSION "${VERSION_NUMBER}" LANGUAGES CXX)
set (LIBRARY_TYPE SHARED) #Options: SHARED, STATIC, MODULAR
# Set some project path variables
set( PROJECT_CODE_DIR ${PROJECT_SOURCE_DIR}/src )
set( PROJECT_HEADER_DIR ${PROJECT_SOURCE_DIR}/src )
set( PROJECT_DEP_DIR ${PROJECT_SOURCE_DIR}/dependencies)
set( PROJECT_TEST_DIR ${PROJECT_SOURCE_DIR}/tests )
# Find required libraries
#> For Lua mod support
#find_package(Lua 5.3 REQUIRED)
#Include header directories
#>For ini file parsing
include_directories( "${PROJECT_DEP_DIR}/cpp-feather-ini-parser" )
#>For LUA mod support
#include_directories( "${PROJECT_DEP_DIR}/sol2/single/sol/" )
#include_directories( "${LUA_INCLUDE_DIR}" )
# Pull together all package libraries to link with the main executable
set( LINK_LIBRARIES "" )
#TODO add lines like this: list( APPEND LINK_LIBRARIES ${CURSES_LIBRARIES} )
# Set compiler flags for different release types
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++14 -g -Wall -Weffc++") #TODO Tweak for the project
#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++14 -Wall -Weffc++") #TODO Tweak for the project
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -g -Wall -Weffc++") #TODO Tweak for the project
#set paths for the source file that hold all the version info
set (VERSION_SOURCE_CONFIG_FILE_PATH "${CMAKE_SOURCE_DIR}/src/version.h.in")
set (VERSION_SOURCE_TARGET_FILE_PATH "${CMAKE_SOURCE_DIR}/src/version.h")
#Use this in C++ to pull in the version string
# * create file at VERSION_SOURCE_CONFIG_FILE_PATH (i.e. ${CMAKE_SOURCE_DIR}/src/version.h.in)
# * write it like a normal header but instead of data use
# @PROJECT_NAME@, @VERSION_MAJOR@, @VERSION_MINOR@, @VERSION_PATCH@, @VERSION_GIT@, and @VERSION_STRING@
###############################
#Finished Configuring Project
###############################
#everything else is automatic
#setup version file
#>handle git version string
if ( EXISTS "${CMAKE_SOURCE_DIR}/.git" )
execute_process( COMMAND git rev-parse HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE VERSION_GIT )
string(REGEX REPLACE "\n$" "" VERSION_GIT "${VERSION_GIT}")
endif()
#> add on git repo sha to version number if avalible.
if (VERSION_GIT)
set(VERSION_NUMBER "${VERSION_NUMBER}.${VERSION_GIT}")
endif()
#> Set version string that will be used in the version config file
set( VERSION_STRING "${PROJECT_NAME} Version: ${VERSION_NUMBER}" )
#> Create the version source file if config file is avalible
if ( EXISTS ${VERSION_SOURCE_CONFIG_FILE_PATH} )
configure_file(${VERSION_SOURCE_CONFIG_FILE_PATH} ${VERSION_SOURCE_TARGET_FILE_PATH} @ONLY)
else()
message(WARNING "Could not find version config source file at ${VERSION_SOURCE_CONFIG_FILE_PATH}. Look at CMakeLists.txt VERSION_SOURCE_CONFIG_FILE_PATH variable for more info.")
endif()
#Platform detection
#TODO handle cpu type i.e. 32bit
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
add_definitions( -Dlinux )
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
add_definitions( -Dwindows )
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
add_definitions( -Dmac )
#else
#TODO handle extra platforms/errors
endif()
#Add unit tests directory
#>Enable testing globally. Individual tests may be found in the tests dir as set below
ENABLE_TESTING()
ADD_SUBDIRECTORY( ${PROJECT_TEST_DIR} )
Message("-- See ${PROJECT_BINARY_DIR}/Testing/Temporary/LastTest.log for details on tests.")
# Collect source file paths into a var for later building
file(GLOB_RECURSE PROJECT_SOURCES "${PROJECT_CODE_DIR}/*.cpp")
file(GLOB_RECURSE PROJECT_HEADERS "${PROJECT_HEADER_DIR}/*.h")
set (PROJECT_INCLUDE_DIRS "${PROJECT_HEADER_DIR}")
# Build project and link it
add_library(${PROJECT_NAME} ${LIBRARY_TYPE} ${PROJECT_SOURCES} )
target_include_directories( ${PROJECT_NAME} PRIVATE ${PROJECT_INCLUDE_DIRS} )
target_link_libraries( ${PROJECT_NAME} ${LINK_LIBRARIES} )
#Build example bianries
add_subdirectory(examples/1_minimal)