Pārlūkot izejas kodu

Building on Windows

Josh Engebretson 11 gadi atpakaļ
vecāks
revīzija
d3e7c77435

+ 34 - 2
CMakeLists.txt

@@ -3,9 +3,13 @@ project (Atomic)
 
 cmake_minimum_required (VERSION 2.8.6)
 
+include (CMakeDependentOption)
+
 set (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules)
 
-add_definitions(-DATOMIC_PHYSICS -DATOMIC_NETWORK -DATOMIC_ATOMIC2D -DATOMIC_TBUI)
+cmake_dependent_option (ATOMIC_STATIC_RUNTIME "Use static C/C++ runtime libraries and eliminate the need for runtime DLLs installation (VS only)" TRUE "MSVC" FALSE)
+
+add_definitions(-DATOMIC_STATIC_DEFINE -DATOMIC_PHYSICS -DATOMIC_NETWORK -DATOMIC_ATOMIC2D -DATOMIC_TBUI)
 
 set (ATOMIC_LINK_LIBRARIES Atomic Box2D Bullet Civetweb Detour Duktape FreeType JO kNet
                            LibCpuId LZ4 PugiXml Recast SDL SQLite StanHull STB TurboBadger)
@@ -14,6 +18,35 @@ if (MSVC)
 
     set (CMAKE_DEBUG_POSTFIX _d)
 
+    if (ATOMIC_STATIC_RUNTIME)
+        set(CompilerFlags
+            CMAKE_CXX_FLAGS
+            CMAKE_CXX_FLAGS_DEBUG
+            CMAKE_CXX_FLAGS_RELEASE
+            CMAKE_C_FLAGS
+            CMAKE_C_FLAGS_DEBUG
+            CMAKE_C_FLAGS_RELEASE
+        )
+        foreach(CompilerFlag ${CompilerFlags})
+            string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
+        endforeach()
+    endif ()
+
+    add_definitions (-D_CRT_SECURE_NO_WARNINGS)
+    set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /fp:fast /Zi /GS-")
+    set (CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELWITHDEBINFO})
+    set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} /fp:fast /Zi /GS- /D _SECURE_SCL=0")
+    set (CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
+    # SSE flag is redundant if already compiling as 64bit
+    if (ATOMIC_SSE AND NOT ATOMIC_64BIT)
+        set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:SSE")
+        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE")
+    endif ()
+    set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /DEBUG")
+    set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF")
+
+    list (APPEND ATOMIC_LINK_LIBRARIES MojoShader user32 gdi32 winmm imm32 ole32 oleaut32 version uuid d3d9 d3dcompiler)
+
 else()
 
     add_definitions(-DATOMIC_OPENGL)
@@ -29,7 +62,6 @@ if (APPLE)
 
 endif()
 
-
 add_subdirectory(Source)
 
 #if (IS_DIRECTORY ./AtomicEditor)

+ 0 - 1
Notes.txt

@@ -1 +0,0 @@
--DCMAKE_BUILD_TYPE=Debug -DATOMIC_TBUI=1 -DATOMIC_JAVASCRIPT=1 -DATOMIC_TOOLS=0 -DATOMIC_ANGELSCRIPT=0 -DATOMIC_SAMPLES=0 -DATOMIC_MACOSX_BUNDLE=1

+ 45 - 0
Source/Atomic/Atomic.h

@@ -3,6 +3,49 @@
 #ifndef ATOMIC_API_H
 #define ATOMIC_API_H
 
+#ifdef _MSC_VER
+
+#pragma warning(disable: 4251)
+#pragma warning(disable: 4275)
+
+#ifdef ATOMIC_STATIC_DEFINE
+#  define ATOMIC_API
+#  define ATOMIC_NO_EXPORT
+#else
+#  ifndef ATOMIC_API
+#    ifdef ATOMIC_EXPORTS
+        /* We are building this library */
+#      define ATOMIC_API __declspec(dllexport)
+#    else
+        /* We are using this library */
+#      define ATOMIC_API __declspec(dllimport)
+#    endif
+#  endif
+
+#  ifndef ATOMIC_NO_EXPORT
+#    define ATOMIC_NO_EXPORT 
+#  endif
+#endif
+
+#ifndef ATOMIC_DEPRECATED
+#  define ATOMIC_DEPRECATED __declspec(deprecated)
+#endif
+
+#ifndef ATOMIC_DEPRECATED_EXPORT
+#  define ATOMIC_DEPRECATED_EXPORT ATOMIC_API ATOMIC_DEPRECATED
+#endif
+
+#ifndef ATOMIC_DEPRECATED_NO_EXPORT
+#  define ATOMIC_DEPRECATED_NO_EXPORT ATOMIC_NO_EXPORT ATOMIC_DEPRECATED
+#endif
+
+#define DEFINE_NO_DEPRECATED 0
+#if DEFINE_NO_DEPRECATED
+# define ATOMIC_NO_DEPRECATED
+#endif
+
+#else
+
 #ifdef ATOMIC_STATIC_DEFINE
 #  define ATOMIC_API
 #  define ATOMIC_NO_EXPORT
@@ -41,3 +84,5 @@
 
 #endif
 
+#endif
+

+ 3 - 4
Source/Atomic/CMakeLists.txt

@@ -25,13 +25,12 @@ file (GLOB UI_SOURCE UI/*.cpp UI/*.h)
 file (GLOB GRAPHICS_SOURCE Graphics/*.cpp Graphics/*.h)
 
 if (MSVC)
-
+    file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D9/*.cpp Graphics/Direct3D9/*.h)
 else()
 
 # for kNet
-add_definitions (-DUNIX)
-
-file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
+    add_definitions (-DUNIX)
+    file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
 
 endif()
 

+ 1 - 1
Source/Atomic/Graphics/Direct3D9/D3D9Graphics.cpp

@@ -58,7 +58,7 @@
 #include "../../Graphics/VertexDeclaration.h"
 #include "../../Graphics/Zone.h"
 
-#include <SDL/SDL_syswm.h>
+#include <SDL/include/SDL_syswm.h>
 
 #include "../../DebugNew.h"
 

+ 1 - 1
Source/Atomic/Graphics/Direct3D9/D3D9GraphicsImpl.h

@@ -25,7 +25,7 @@
 #include "../../Math/Color.h"
 
 #include <d3d9.h>
-#include <SDL/SDL.h>
+#include <SDL/include/SDL.h>
 
 namespace Atomic
 {

+ 4 - 0
Source/ThirdParty/CMakeLists.txt

@@ -20,3 +20,7 @@ add_subdirectory(TurboBadger)
 if (APPLE)
     add_subdirectory(GLEW)
 endif()
+
+if (MSVC)
+    add_subdirectory(MojoShader)
+endif()

+ 12 - 0
Source/ThirdParty/MojoShader/CMakeLists.txt

@@ -0,0 +1,12 @@
+
+# Define target name
+set (TARGET_NAME MojoShader)
+
+# Define source files
+file (GLOB SOURCE_FILES *.c)
+
+if (MSVC)
+    add_definitions (-D_CRT_SECURE_NO_WARNINGS=1 -TP)
+endif (MSVC)
+
+add_library(MojoShader ${SOURCE_FILES})

+ 9 - 9
Source/ThirdParty/SDL/CMakeLists.txt

@@ -14,18 +14,18 @@ if (WIN32)
     if (MINGW)
         add_definitions (-DUNICODE=1)
     endif ()
-    CHECK_INCLUDE_FILES (wbemcli.h HAVE_WBEMCLI_H)
-    if (HAVE_WBEMCLI_H)
+    #CHECK_INCLUDE_FILES (wbemcli.h HAVE_WBEMCLI_H)
+    #if (HAVE_WBEMCLI_H)
         add_definitions (-DSDL_JOYSTICK_DINPUT)
         add_definitions (-DSDL_HAPTIC_DINPUT)
         set (HAPTIC_DRIVER windows)
-    else ()
-        message (STATUS "Building SDL without DX joystick support due to missing wbemcli.h")
-        message (STATUS "For MSVC, get it from Windows 7 SDK. For MinGW, get it from eg. Wine sources or from MinGW-w64")
-        add_definitions (-DSDL_JOYSTICK_WINMM)
-        add_definitions (-DSDL_HAPTIC_DUMMY)
-        set (HAPTIC_DRIVER dummy)
-    endif ()
+    #else ()
+    #    message (STATUS "Building SDL without DX joystick support due to missing wbemcli.h")
+    #    message (STATUS "For MSVC, get it from Windows 7 SDK. For MinGW, get it from eg. Wine sources or #from MinGW-w64")
+    #    add_definitions (-DSDL_JOYSTICK_WINMM)
+    #    add_definitions (-DSDL_HAPTIC_DUMMY)
+    #    set (HAPTIC_DRIVER dummy)
+    #endif ()
     file (GLOB SYS_C_FILES
         src/audio/directsound/*.c src/haptic/${HAPTIC_DRIVER}/*.c src/joystick/windows/*.c src/core/windows/*.c src/loadso/windows/*.c
         src/power/windows/*.c src/thread/windows/*.c src/thread/generic/SDL_syscond.c src/timer/windows/*.c src/video/windows/*.c src/joystick/dummy/*.c

+ 7 - 1
Source/Tools/AtomicPlayer/CMakeLists.txt

@@ -5,6 +5,12 @@ include_directories(${CMAKE_SOURCE_DIR}/Source/ThirdParty)
 # Define source files
 file (GLOB SOURCE_FILES *.cpp *.h )
 
-add_executable(AtomicPlayer ${SOURCE_FILES})
+if (MSVC)
+
+set (EXE_TYPE WIN32)
+
+endif()
+
+add_executable(AtomicPlayer ${EXE_TYPE} ${SOURCE_FILES})
 
 target_link_libraries(AtomicPlayer ${ATOMIC_LINK_LIBRARIES})

+ 9 - 0
Source/Tools/JSBind/JSBModule.cpp

@@ -350,6 +350,15 @@ void JSBModule::Load(const String &moduleJSONFilename)
 
     this->name_ = moduleJSON.GetString("name");
 
+    if (this->name_ == "Graphics")
+    {
+#ifdef _MSC_VER
+        sources.AddString("Graphics/Direct3D9");
+#else
+        sources.AddString("Graphics/OpenGL");
+#endif
+    }
+
     for (unsigned j = 0; j < sources.GetSize(); j++)
     {
         String sourceFolder = sources.GetString(j);

+ 1 - 1
Source/Tools/JSBind/modules/Graphics.json

@@ -1,6 +1,6 @@
 {
 	"name" : "Graphics",
-	"sources" : ["Graphics", "Graphics/OpenGL"],
+	"sources" : ["Graphics"],
 	"includes" : ["../../Scene/Scene.h", "../../Graphics/Animation.h", "../../Graphics/OcclusionBuffer.h", "../../Scene/ValueAnimation.h"],
 	"classes" : ["Graphics", "Texture", "Texture2D", "Model", "Material", "Drawable", 
 				 "Viewport", "Renderer", "Octree", "Zone", "StaticModel", "Camera", "Light", "RenderPath",