summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt126
1 files changed, 126 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..7116a55
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,126 @@
+cmake_minimum_required(VERSION 3.3)
+
+project(WaveWorks CXX)
+
+CMAKE_POLICY(SET CMP0057 NEW) # Enable IN_LIST
+
+SET(GW_DEPS_ROOT $ENV{GW_DEPS_ROOT})
+
+IF(NOT EXISTS ${GW_DEPS_ROOT}/CMakeModules)
+ MESSAGE(FATAL_ERROR "Could not find CMakeModules at ${GW_DEPS_ROOT}")
+ENDIF()
+
+LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
+LIST(APPEND CMAKE_MODULE_PATH ${GW_DEPS_ROOT}/CMakeModules)
+
+MESSAGE(${CMAKE_MODULE_PATH})
+
+# TODO: Fail if we didn't find deps
+
+IF(CMAKE_CONFIGURATION_TYPES)
+ SET(CMAKE_CONFIGURATION_TYPES debug release)
+ SET(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
+ "Reset config to what we need"
+ FORCE)
+
+ SET(CMAKE_SHARED_LINKER_FLAGS_CHECKED "")
+ SET(CMAKE_SHARED_LINKER_FLAGS_PROFILE "")
+
+ENDIF()
+
+SET(GW_DEPS_ROOT $ENV{GW_DEPS_ROOT})
+
+# Handle different platforms. So far, Windows, PS4, XBone, Linux... More?
+IF(NOT DEFINED TARGET_BUILD_PLATFORM) # Not defined, default to Windows
+ SET(TARGET_BUILD_PLATFORM "Windows")
+ENDIF()
+
+SET(PLATFORM_LIST Windows PS4 XBoxOne OSX Android)
+
+IF (NOT ${TARGET_BUILD_PLATFORM} IN_LIST PLATFORM_LIST)
+ MESSAGE(FATAL_ERROR "Invalid platform:" ${TARGET_BUILD_PLATFORM})
+ENDIF()
+
+IF(TARGET_BUILD_PLATFORM STREQUAL "Windows")
+ SET(CMAKE_CXX_FLAGS "/Wall /wd4514 /wd4820 /wd4127 /wd4710 /wd4711 /d2Zi+ /WX /W4 /GF /GS- /GR- /Gd /fp:fast")
+
+ SET(CMAKE_CXX_FLAGS_DEBUG "/Od /MTd /RTCu")
+ SET(CMAKE_CXX_FLAGS_CHECKED "/Ox /MT")
+ SET(CMAKE_CXX_FLAGS_PROFILE "/Ox /MT")
+ SET(CMAKE_CXX_FLAGS_RELEASE "/Ox /MT")
+
+ IF(CMAKE_CL_64)
+ ADD_DEFINITIONS(-DWIN64)
+ ENDIF(CMAKE_CL_64)
+
+
+ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "PS4")
+ SET(CMAKE_CXX_FLAGS "-fdiagnostics-show-option -fno-rtti -fno-exceptions -ffast-math -ffunction-sections -fdata-sections -Werror -ferror-limit=0 -Wall -Wextra -fstrict-aliasing -Wstrict-aliasing=2 -pedantic -Weverything -Wno-documentation-deprecated-sync -Wno-documentation-unknown-command -Wno-float-equal -Wno-padded -Wno-weak-vtables -Wno-cast-align -Wno-conversion -Wno-missing-noreturn -Wno-missing-variable-declarations -Wno-shift-sign-overflow -Wno-covered-switch-default -Wno-exit-time-destructors -Wno-global-constructors -Wno-missing-prototypes -Wno-unreachable-code -Wno-unused-macros -Wno-unused-member-function -Wno-used-but-marked-unused -Wno-weak-template-vtables -Wno-deprecated")
+
+ SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
+ SET(CMAKE_CXX_FLAGS_CHECKED "-O2")
+ SET(CMAKE_CXX_FLAGS_PROFILE "-O2")
+ SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
+
+ELSEIF(TARGET_BUILD_PLATFORM STREQUAL "XBoxOne")
+ SET(CMAKE_CXX_FLAGS "/Wall /wd4512 /wd4324 /wd4127 /wd4505 /wd4100 /wd4714 /WX /W4 /GF /GR- /Gd /fp:fast /Zp16 /favor:AMD64 /MDd")
+
+ SET(CMAKE_CXX_FLAGS_DEBUG "/Od")
+ SET(CMAKE_CXX_FLAGS_CHECKED "/Ox")
+ SET(CMAKE_CXX_FLAGS_PROFILE "/Ox /Oi /Zi")
+ SET(CMAKE_CXX_FLAGS_RELEASE "/0x /Oi")
+
+ SET(CMAKE_SHARED_LINKER_FLAGS "/IGNORE:4221")
+
+
+ENDIF()
+
+
+# Default to appending "DEBUG", "PROFILE", etc to produced artifacts
+IF(NOT DEFINED APPEND_CONFIG_NAME)
+ SET(APPEND_CONFIG_NAME ON)
+ENDIF()
+
+IF (APPEND_CONFIG_NAME)
+ MESSAGE("Appending config to output names")
+
+ SET(CMAKE_DEBUG_POSTFIX "_debug")
+ SET(CMAKE_RELEASE_POSTFIX "")
+ENDIF()
+
+IF (TARGET_BUILD_PLATFORM STREQUAL "Windows")
+ IF(CMAKE_CL_64)
+ SET(LIBPATH_SUFFIX "win64")
+ ELSE(CMAKE_CL_64)
+ SET(LIBPATH_SUFFIX "Win32")
+ ENDIF(CMAKE_CL_64)
+
+ SET(CMAKE_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}.${LIBPATH_SUFFIX}")
+ SET(CMAKE_RELEASE_POSTFIX "${CMAKE_RELEASE_POSTFIX}.${LIBPATH_SUFFIX}")
+ENDIF()
+
+
+IF(NOT DEFINED WW_OUTPUT_DIR)
+ # If there's no output dir set, default to something somewhat sensible.
+ SET(WW_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/Lib/cmake/)
+ENDIF()
+
+# Only set this once, to avoid cascading sets.
+IF(NOT DEFINED FINAL_OUTPUT_DIR)
+ # We assume that WW_OUTPUT_DIR is a RELATIVE path.
+ SET(FINAL_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/${WW_OUTPUT_DIR})
+ENDIF()
+
+MESSAGE("Final Output Directory: " ${FINAL_OUTPUT_DIR})
+
+# Override the default output directories for all configurations.
+SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${FINAL_OUTPUT_DIR})
+SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${FINAL_OUTPUT_DIR})
+SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${FINAL_OUTPUT_DIR})
+
+SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${FINAL_OUTPUT_DIR})
+SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${FINAL_OUTPUT_DIR})
+SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${FINAL_OUTPUT_DIR})
+
+# Include all of the projects
+INCLUDE(compiler/cmake/NvWaveWorks.cmake)