summaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CMakeLists.txt264
1 files changed, 182 insertions, 82 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dbe709e..3343b7e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,105 +1,205 @@
-cmake_minimum_required(VERSION 3.5)
+cmake_minimum_required(VERSION 3.14)
project(AltCraft)
-set(CMAKE_CXX_STANDARD 14)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
-set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
+include(get_cpm)
if (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release)
endif()
-##########
-# SOURCES
-##########
-file(GLOB_RECURSE MANIFEST "./src/*.manifest")
-file(GLOB_RECURSE SOURCES "./src/*.cpp")
-file(GLOB_RECURSE HEADERS "./src/*.hpp")
+############
+# LIBRARIES
+############
-add_executable(AltCraft ${HEADERS} ${SOURCES} ${MANIFEST})
+find_package(Threads)
-################
-# CONFIGURATION
-################
-option(ENABLE_OPTICK "Enable profiler \"Optick \"?" OFF)
+find_package(OpenGL REQUIRED)
+
+
+CPMAddPackage("gh:g-truc/glm@0.9.9.8#0.9.9.8")
+
+
+CPMAddPackage("gh:bombomby/optick@1.3.1.0#1.3.1.0")
+
+
+CPMAddPackage(
+ GITHUB_REPOSITORY Perlmint/glew-cmake
+ VERSION 2.2.0
+ GIT_TAG glew-cmake-2.2.0
+ OPTIONS
+ "glew-cmake_BUILD_SHARED OFF"
+)
-#Configure Optick
-if (${ENABLE_OPTICK})
- add_definitions(-DUSE_OPTICK=1)
-else()
- add_definitions(-DUSE_OPTICK=0)
-endif()
-#Configure easlylogging++
-set(LOGGER_DEFINITIONS "-DELPP_THREAD_SAFE -DELPP_FEATURE_PERFORMANCE_TRACKING")
+CPMAddPackage(
+ NAME json
+ GITHUB_REPOSITORY nlohmann/json
+ VERSION 3.9.1
+ OPTIONS
+ "JSON_BuildTests OFF"
+)
+
+
+CPMAddPackage(
+ NAME SDL2
+ GITHUB_REPOSITORY libsdl-org/SDL
+ VERSION 2.0.14
+ GIT_TAG release-2.0.14
+ OPTIONS
+ "SDL_SHARED ON"
+ "SDL_STATIC OFF"
+)
+
+
+CPMAddPackage(
+ NAME easyloggingpp
+ GITHUB_REPOSITORY amrayn/easyloggingpp
+ VERSION 9.97.0
+ OPTIONS "build_static_lib ON"
+)
+target_include_directories(easyloggingpp PUBLIC ${easyloggingpp_SOURCE_DIR}/src)
+target_compile_definitions(easyloggingpp PUBLIC ELPP_THREAD_SAFE ELPP_FEATURE_PERFORMANCE_TRACKING)
if (LINUX)
- set(LOGGER_DENITIONS "${LOGGER_DEFINITIPNS} -DELPP_FEATURE_CRASH_LOG -DELPP_STL_LOGGING")
-endif ()
-add_definitions(${LOGGER_DEFINITIONS})
-
-#Set compiler's flags and setup platfrom-dependent libraries
-if (CMAKE_COMPILER_IS_GNUCXX)
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Wextra -Wno-error=unused-parameter")
- #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
- #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
- #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
- #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -p")
- set(PLATFORM_LIBRARIES "stdc++fs")
+ target_compile_definitions(easyloggingpp PUBLIC ELPP_FEATURE_CRASH_LOG ELPP_STL_LOGGING)
endif ()
-if(MSVC AND CMAKE_BUILD_TYPE MATCHES Release)
- target_compile_definitions(AltCraft PRIVATE USE_SDL_MAIN)
- set_target_properties(AltCraft PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
-endif(MSVC AND CMAKE_BUILD_TYPE MATCHES Release)
-target_link_libraries(AltCraft ${PLATFORM_LIBRARIES})
+CPMAddPackage(
+ NAME stb
+ GITHUB_REPOSITORY nothings/stb
+ GIT_TAG ea2f937a01ce39795ab02b6c6e30173b4f1ed46c
+ DOWNLOAD_ONLY TRUE
+)
+if(stb_ADDED)
+ add_library(stb INTERFACE)
+ target_include_directories(stb INTERFACE ${stb_SOURCE_DIR})
+endif()
-############
-# LIBRARIES
-############
-#Setup dependencies (GLEW, glm, nlohmann/json, easylogging++)
-add_subdirectory(external)
-target_include_directories(AltCraft PUBLIC external/include)
-target_link_libraries(AltCraft deps)
+CPMAddPackage(
+ NAME imgui
+ GITHUB_REPOSITORY ocornut/imgui
+ VERSION 1.52
+ DOWNLOAD_ONLY TRUE
+)
+if(imgui_ADDED)
+ file(GLOB imgui_sources ${imgui_SOURCE_DIR}/*.cpp)
+ add_library(imgui STATIC ${imgui_sources})
+ target_include_directories(imgui SYSTEM PUBLIC $<BUILD_INTERFACE:${imgui_SOURCE_DIR}>)
+endif()
+
-target_include_directories(AltCraft PUBLIC external/optick)
-if (${ENABLE_OPTICK})
- target_link_libraries(AltCraft optick)
+CPMAddPackage(
+ NAME SDL2_net
+ GITHUB_REPOSITORY libsdl-org/SDL_net
+ VERSION 2.0.1
+ GIT_TAG release-2.0.1
+ DOWNLOAD_ONLY YES
+)
+if(SDL2_net_ADDED)
+ file(GLOB SDL2_net_sources ${SDL2_net_SOURCE_DIR}/*.c)
+ list(REMOVE_ITEM SDL2_net_sources "${SDL2_net_SOURCE_DIR}/chatd.c")
+ add_library(SDL2_net STATIC ${SDL2_net_sources})
+ target_link_libraries(SDL2_net SDL2)
+ IF (WIN32)
+ target_link_libraries(SDL2_net ws2_32 iphlpapi)
+ ENDIF()
+ target_include_directories(SDL2_net SYSTEM PUBLIC $<BUILD_INTERFACE:${SDL2_net_SOURCE_DIR}>)
endif()
-#Setup SDL2
-find_package(SDL2 REQUIRED)
-target_link_libraries(AltCraft ${SDL2_LIBRARY})
-target_include_directories(AltCraft PUBLIC ${SDL2_INCLUDE_DIR})
-#Setup SDL2_net
-find_package(SDL2_net REQUIRED)
-target_link_libraries(AltCraft ${SDL2_NET_LIBRARIES})
-target_include_directories(AltCraft PUBLIC ${SDL2_NET_INCLUDE_DIRS})
+CPMAddPackage(
+ NAME zlib
+ GITHUB_REPOSITORY madler/zlib
+ VERSION 1.2.11
+ DOWNLOAD_ONLY ON
+)
+if(zlib_ADDED)
+ file(GLOB zlib_sources ${zlib_SOURCE_DIR}/*.c)
+ add_library(zlib STATIC ${zlib_sources})
+
+ include(CheckIncludeFile)
+ check_include_file(unistd.h Z_HAVE_UNISTD_H)
+ if(Z_HAVE_UNISTD_H)
+ target_compile_definitions(zlib PRIVATE Z_HAVE_UNISTD_H)
+ endif()
+
+ if(MSVC)
+ target_compile_definitions(zlib PRIVATE _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE)
+ endif()
+ target_include_directories(zlib PUBLIC ${zlib_SOURCE_DIR})
+endif()
+
-#Setup OpenGL
-find_package(OpenGL REQUIRED)
-target_link_libraries(AltCraft ${OPENGL_LIBRARIES})
-target_include_directories(AltCraft PUBLIC ${OPENGL_INCLUDE_DIRS})
-
-#Setup Zlib
-find_package(ZLIB REQUIRED)
-target_link_libraries(AltCraft ${ZLIB_LIBRARIES})
-target_include_directories(AltCraft PUBLIC ${ZLIB_INCLUDE_DIRS})
-
-#Setup Lua
-find_package(Lua REQUIRED)
-target_link_libraries(AltCraft ${LUA_LIBRARIES})
-target_include_directories(AltCraft PUBLIC ${LUA_INCLUDE_DIR})
-
-#################
-# COPY RESOURCES
-#################
-
-add_custom_command(TARGET AltCraft PRE_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_directory
- ${CMAKE_SOURCE_DIR}/cwd $<TARGET_FILE_DIR:AltCraft>)
+CPMAddPackage(
+ NAME lua
+ GITHUB_REPOSITORY lua/lua
+ VERSION 5.4.3
+ DOWNLOAD_ONLY YES
+)
+if(lua_ADDED)
+ file(GLOB lua_sources ${lua_SOURCE_DIR}/*.c)
+ list(REMOVE_ITEM lua_sources "${lua_SOURCE_DIR}/lua.c" "${lua_SOURCE_DIR}/luac.c" "${lua_SOURCE_DIR}/onelua.c")
+ add_library(lua STATIC ${lua_sources})
+ target_include_directories(lua SYSTEM PUBLIC $<BUILD_INTERFACE:${lua_SOURCE_DIR}>)
+endif()
+
+
+CPMAddPackage(
+ NAME sol2
+ GITHUB_REPOSITORY ThePhD/sol2
+ VERSION 3.2.2
+ DOWNLOAD_ONLY YES
+)
+if(sol2_ADDED)
+ add_library(sol2 INTERFACE IMPORTED)
+ target_include_directories(sol2 SYSTEM INTERFACE ${sol2_SOURCE_DIR}/include)
+ target_link_libraries(sol2 INTERFACE lua)
+endif()
+
+
+###########
+# AltCraft
+###########
+
+file(GLOB ac_manifest "./src/*.manifest")
+file(GLOB ac_sources "./src/*.cpp")
+
+add_executable(AltCraft ${ac_sources} ${ac_manifest})
+
+target_compile_features(AltCraft PRIVATE cxx_std_17)
+
+target_link_libraries(AltCraft
+ Threads::Threads
+ OpenGL::GL
+ glm
+ stb
+ easyloggingpp
+ libglew_static
+ nlohmann_json::nlohmann_json
+ imgui
+ SDL2
+ SDL2main
+ SDL2_net
+ OptickCore
+ zlib
+ sol2
+)
+
+set_target_properties(AltCraft SDL2 OptickCore PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
+)
+
+set_target_properties(AltCraft PROPERTIES
+ VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/cwd/
+ CXX_EXTENSIONS OFF
+ CXX_STANDARD_REQUIRED ON
+)
+
+set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT AltCraft)
+
+if(MSVC AND CMAKE_BUILD_TYPE MATCHES Release)
+ set_target_properties(AltCraft PROPERTIES WIN32_EXECUTABLE ON)
+endif()