diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 264 |
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() |