]> code.bitgloo.com Git - clyne/entityx.git/commitdiff
Fixed compile issues on Windows with Visual Studio 2013.
authorJarrett Chisholm <j.chisholm@chisholmsoft.com>
Wed, 12 Feb 2014 01:17:46 +0000 (20:17 -0500)
committerAlec Thomas <alec@swapoff.org>
Thu, 13 Feb 2014 03:15:11 +0000 (14:15 +1100)
- Made compiler flags dependent on the compiler being used.
- Added check for clang to use the same compiler options as gnu g++

CHANGES.md
CMakeLists.txt
README.md
entityx/3rdparty/simplesignal.h
entityx/Event.h

index e4484afc5664db138e6bb76266dd2e3227af84e1..92583624577c34d1ae2000e00b9c40177bf78f28 100644 (file)
@@ -1,5 +1,11 @@
 # Change Log
 
+## 2014-02-13 - Support for Visual C++
+
+[Jarrett Chisholm](https://github.com/jarrettchisholm) has added conditional compilation support for VC++ and fixed some issues that prevented compilation, so EntityX now fully supports Visual C++!
+
+You will need at least [Visual Studio 2013](http://www.microsoft.com/en-ca/download/details.aspx?id=40787) with [Update 1](http://www.microsoft.com/en-us/download/details.aspx?id=41650) and [Update 2 CTP](http://www.microsoft.com/en-us/download/details.aspx?id=41699) installed. The usual CMake installation instructions should "just work" and correctly provide VC++ support.
+
 ## 2013-10-29 [no-boost branch] - Removed boost dependency for everything except python integration.
 
 This branch requires C++11 support and has removed all the non-boost::python dependecies, reducing the overhead of running entityx.
index fc89cd377a78d391bf69d33fd2ba819fd1b41528..f996eb94e12bd79bc8cd7629adc51bd01ebee421 100644 (file)
@@ -18,18 +18,31 @@ include(${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
 include(CheckCXXSourceCompiles)
 
 # Default compiler args
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Werror -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=sign-compare -std=c++11")
-set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
-set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
-set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
-set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Werror -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=sign-compare -std=c++11")
+       set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
+       set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
+       set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
+       set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
+elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+       # /Zi - Produces a program database (PDB) that contains type information and symbolic debugging information for use with the debugger.
+       # /FS - Allows multiple cl.exe processes to write to the same .pdb file
+       # /DEBUG - Enable debug during linking
+       # /Od - Disables optimization
+       set(CMAKE_CXX_FLAGS_DEBUG "/Zi /FS /DEBUG /Od")
+       # /Ox - Full optimization
+       set(CMAKE_CXX_FLAGS_RELEASE "/Ox -DNDEBUG")
+       set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Ox /Zi /FS /DEBUG")
+endif()
 
 # C++11 feature checks
 include(CheckCXX11Features.cmake)
 
 add_definitions(-DGTEST_USE_OWN_TR1_TUPLE=1)
 set(OLD_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+endif()
 check_cxx_source_compiles(
 "
 #include <memory>
@@ -90,10 +103,21 @@ require(HAS_CXX11_LONG_LONG "C++11 lambdas")
 message("-- Checking misc features")
 require(HAVE_STDINT_H "stdint.h")
 
-set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
-set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
-set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
-set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+       set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
+       set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
+       set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
+       set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
+elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+       # /Zi - Produces a program database (PDB) that contains type information and symbolic debugging information for use with the debugger.
+       # /FS - Allows multiple cl.exe processes to write to the same .pdb file
+       # /DEBUG - Enable debug during linking
+       # /Od - Disables optimization
+       set(CMAKE_CXX_FLAGS_DEBUG "/Zi /FS /DEBUG /Od")
+       # /Ox - Full optimization
+       set(CMAKE_CXX_FLAGS_RELEASE "/Ox -DNDEBUG")
+       set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Ox /Zi /FS /DEBUG")
+endif()
 
 # Things to install
 set(install_libs entityx)
index 503e56f77b0f7e5fbab013d97b492266b06d052b..ee1fe5e9f519b8e0c5c73bdae4f1a5b1f24be6b8 100644 (file)
--- a/README.md
+++ b/README.md
@@ -27,6 +27,7 @@ You can also contact me directly via [email](mailto:alec@swapoff.org) or [Twitte
 
 ## Recent Notable Changes
 
+- 2014-02-13 - Visual C++ support thanks to [Jarrett Chisholm](https://github.com/jarrettchisholm)!
 - 2013-10-29 - Boost has been removed as a primary dependency for builds not using python.
 - 2013-08-21 - Remove dependency on `boost::signal` and switch to embedded [Simple::Signal](http://timj.testbit.eu/2013/cpp11-signal-system-performance/).
 - 2013-08-18 - Destroying an entity invalidates all other references
@@ -320,12 +321,13 @@ while (true) {
 
 EntityX has the following build and runtime requirements:
 
-- A C++ compiler that supports a basic set of C++11 features (ie. Clang >= 3.1, GCC >= 4.7, and maybe (untested) VC++ with the [Nov 2012 CTP](http://www.microsoft.com/en-us/download/details.aspx?id=35515)).
+- A C++ compiler that supports a basic set of C++11 features (ie. Clang >= 3.1, GCC >= 4.7, and Visual C++.
+- For Visual C++ support you will need at least [Visual Studio 2013](http://www.microsoft.com/en-ca/download/details.aspx?id=40787) with [Update 1](http://www.microsoft.com/en-us/download/details.aspx?id=41650) and [Update 2 CTP](http://www.microsoft.com/en-us/download/details.aspx?id=41699) installed.
 - [CMake](http://cmake.org/)
 
 ### C++11 compiler and library support
 
-C++11 support is quite...raw. To make life more interesting, C++ support really means two things: language features supported by the compiler, and library features.
+C++11 support is quite...raw. To make life more interesting, C++ support really means two things: language features supported by the compiler, and library features. EntityX tries to support the most common options, including the default C++ library for the compiler/platform, and libstdc++.
 
 ### Installing on OSX Mountain Lion
 
index 0af26448227ff5bf5237d78b80875bccb8056010..39bb2fb17813f22cf8a23e130e642ec8171d2564 100644 (file)
@@ -2,10 +2,10 @@
 #ifndef SIMPLE_SIGNAL_H__
 #define SIMPLE_SIGNAL_H__
 
-#include <unistd.h>
 #include <assert.h>
 #include <stdint.h>
 #include <vector>
+#include <functional>
 
 namespace Simple {
 
@@ -81,7 +81,7 @@ private:
     void
     unlink ()
     {
-      function = 0;
+      function = nullptr;
       if (next)
         next->prev = prev;
       if (prev)
index dac1bb47891ee385aa5a768e6f86e0a091b63565..8c8a8dc731803c5764106aa0f339fb24296d7e9c 100644 (file)
@@ -160,7 +160,7 @@ class EventManager : entityx::help::NonCopyable {
    */
   template <typename E, typename ... Args>
   void emit(Args && ... args) {
-    E event(std::forward<Args>(args) ...);
+    E event = E(std::forward<Args>(args) ...);
     auto sig = signal_for(E::family());
     sig->emit(static_cast<BaseEvent*>(&event));
   }