Browse Source

Linux Build

jenge 10 years ago
parent
commit
10d5aef710

+ 1 - 0
.gitignore

@@ -12,3 +12,4 @@ Docs/node_modules/*
 Data/AtomicEditor/Deployment/Web/AtomicPlayer.js
 Data/AtomicEditor/Deployment/IOS/AtomicPlayer.app/AtomicPlayer
 node_modules/*
+/.project

+ 12 - 0
CMake/Modules/AtomicLinux.cmake

@@ -0,0 +1,12 @@
+include(AtomicDesktop)
+
+add_definitions(-DATOMIC_PLATFORM_LINUX -DATOMIC_OPENGL -DKNET_UNIX -DHAVE_INT64_T)
+
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x")
+
+find_package(PkgConfig REQUIRED)
+
+#for native file dialog
+pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
+
+list (APPEND ATOMIC_LINK_LIBRARIES pthread GLEW GL dl)

+ 8 - 4
CMakeLists.txt

@@ -1,7 +1,7 @@
 
 project (Atomic)
 
-cmake_minimum_required (VERSION 3.0.2)
+cmake_minimum_required (VERSION 2.8)
 
 set (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules)
 
@@ -10,7 +10,7 @@ add_definitions( -DATOMIC_API= -DATOMIC_STATIC_DEFINE -DATOMIC_ATOMIC2D -DATOMIC
 # this is here as QtCreator is having trouble picking up #include <Atomic/*> without it
 include_directories(${CMAKE_SOURCE_DIR}/Source ${CMAKE_SOURCE_DIR}/Source/AtomicEditor/Source)
 
-set (ATOMIC_LINK_LIBRARIES Atomic Box2D Duktape FreeType JO LZ4 PugiXml  STB)
+set (ATOMIC_LINK_LIBRARIES Atomic Box2D Duktape FreeType JO LZ4 PugiXml STB)
 
 if (NOT ATOMIC_BUILD_2D)
     add_definitions( -DATOMIC_PHYSICS -DATOMIC_3D)
@@ -25,7 +25,7 @@ endif()
 if (MSVC)
 
     include(AtomicWindows)
-    
+
 elseif(APPLE)
 
     if (IOS)
@@ -34,11 +34,15 @@ elseif(APPLE)
         include(AtomicMac)
     endif()
 
+elseif(LINUX)
+
+  include(AtomicLinux)
+
 elseif(ANDROID)
 
     include(AtomicAndroid)
 
-elseif(EMSCRIPTEN)    
+elseif(EMSCRIPTEN)
 
 	include(AtomicWeb)
 

+ 3 - 3
Source/Atomic/Environment/ProcSky.cpp

@@ -20,7 +20,7 @@
 #include "stdint.h"
 #endif
 
-#if defined(EMSCRIPTEN)
+#if defined(EMSCRIPTEN) || defined(ATOMIC_PLATFORM_LINUX)
 #include <stdint.h>
 #endif
 
@@ -32,7 +32,7 @@ extern const char* GEOMETRY_CATEGORY;
 float ProcSky::timeOfDay_ = 0.0f;
 
 ProcSky::ProcSky(Context* context) :
-    Drawable(context, DRAWABLE_GEOMETRY),    
+    Drawable(context, DRAWABLE_GEOMETRY),
     geometry_(new Geometry(context)),
     vertexBuffer_(new VertexBuffer(context_)),
     indexBuffer_(new IndexBuffer(context_)),
@@ -109,7 +109,7 @@ void ProcSky::OnNodeSet(Node* node)
     Drawable::OnNodeSet(node);
 
     if (node && node->GetScene())
-    {     
+    {
         SubscribeToEvent(node->GetScene(), E_SCENEUPDATE, HANDLER(ProcSky, HandleSceneUpdate));
         SubscribeToEvent(E_BEGINVIEWUPDATE, HANDLER(ProcSky, HandleBeginViewUpdate));
     }

+ 5 - 1
Source/AtomicEditor/CMakeLists.txt

@@ -16,6 +16,8 @@ if (APPLE)
     set(MACOSX_BUNDLE_ICON_FILE Atomic.icns)
     set(ATOMIC_EDITOR_ICON ${CMAKE_SOURCE_DIR}/CMake/Modules/Atomic.icns)
     set_source_files_properties(${ATOMIC_EDITOR_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
+elseif(LINUX)
+
 else()
     include_directories (${CMAKE_SOURCE_DIR}/Source/ThirdParty/libcurl/include)
     add_definitions(-DCURL_STATICLIB)
@@ -25,11 +27,13 @@ endif(APPLE)
 
 add_executable(AtomicEditor ${EXE_TYPE} ${SOURCE_FILES} ${ATOMIC_EDITOR_ICON})
 
-target_link_libraries(AtomicEditor ${ATOMIC_LINK_LIBRARIES} AtomicJS Poco nativefiledialog)
+target_link_libraries(AtomicEditor AtomicJS Poco nativefiledialog ${ATOMIC_LINK_LIBRARIES})
 
 if (APPLE)
     set (TARGET_PROPERTIES MACOSX_BUNDLE_INFO_PLIST MacOSXBundleInfo.plist.template)
     target_link_libraries(AtomicEditor curl)
+elseif(LINUX)
+    target_link_libraries(AtomicEditor curl nativefiledialog ${GTK3_LIBRARIES})
 else()
     target_link_libraries(AtomicEditor libcurl Iphlpapi Wldap32)
 endif()

+ 3 - 4
Source/AtomicEditor/Source/License/AELicenseSystem.cpp

@@ -99,7 +99,7 @@ void LicenseSystem::LicenseAgreementConfirmed()
 
 String LicenseSystem::GenerateMachineID()
 {
-#ifdef ATOMIC_PLATFORM_OSX
+#if defined(ATOMIC_PLATFORM_OSX) || defined(ATOMIC_PLATFORM_LINUX)
     String path = getenv("HOME");
 #else
     wchar_t pathName[MAX_PATH];
@@ -115,7 +115,7 @@ String LicenseSystem::GenerateMachineID()
 }
 
 void LicenseSystem::ResetLicense()
-{   
+{
     key_ = "";
     licenseWindows_ = false;
     licenseMac_ = false;
@@ -160,7 +160,7 @@ bool LicenseSystem::LoadLicense()
 }
 
 bool LicenseSystem::ValidateKey(const String& key)
-{    
+{
     if (!key.StartsWith("ATOMIC-"))
         return false;
 
@@ -539,4 +539,3 @@ void LicenseSystem::HandleEditorShutdown(StringHash eventType, VariantMap& event
 }
 
 // END LICENSE MANAGEMENT
-

+ 1 - 1
Source/AtomicEditor/Source/Project/AEProject.h

@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include <Atomic/IO/Filesystem.h>
+#include <Atomic/IO/FileSystem.h>
 #include <Atomic/Core/Object.h>
 
 using namespace Atomic;

+ 2 - 3
Source/AtomicEditor/Source/UI/Modal/UIBuildSettingsIOS.cpp

@@ -112,11 +112,11 @@ void UIBuildSettingsIOS::Refresh()
 
 bool UIBuildSettingsIOS::ParseProvisionData(const String& provisionFile)
 {
-#ifdef ATOMIC_PLATFORM_WINDOWS
+#if defined(ATOMIC_PLATFORM_WINDOWS) || defined(ATOMIC_PLATFORM_LINUX)
 
     return false;
 
-#else    
+#else
     String pdata = GetMobileProvisionData(provisionFile.CString());
 
     if (!pdata.Length())
@@ -194,4 +194,3 @@ bool UIBuildSettingsIOS::OnEvent(const TBWidgetEvent &ev)
 }
 
 }
-

+ 2 - 0
Source/AtomicJS/CMakeLists.txt

@@ -7,6 +7,8 @@ elseif(APPLE)
     else()
       set (JAVASCRIPT_BINDINGS_PLATFORM "IOS")
     endif()
+elseif(LINUX)
+    set (JAVASCRIPT_BINDINGS_PLATFORM "LINUX")
 elseif(ANDROID)
     set (JAVASCRIPT_BINDINGS_PLATFORM "ANDROID")
 elseif (EMSCRIPTEN)

+ 1 - 1
Source/AtomicTool/CMakeLists.txt

@@ -6,7 +6,7 @@ endif()
 
 add_executable(AtomicTool ${ATOMIC_TOOL_SOURCES})
 
-target_link_libraries(AtomicTool ${ATOMIC_LINK_LIBRARIES} ToolCore Poco)
+target_link_libraries(AtomicTool ToolCore Poco ${ATOMIC_LINK_LIBRARIES})
 
 add_dependencies(AtomicTool AtomicEditor)
 

+ 2 - 2
Source/ThirdParty/CMakeLists.txt

@@ -23,12 +23,12 @@ endif()
 if (NOT IOS AND NOT ANDROID AND NOT EMSCRIPTEN)
     add_subdirectory(LibCpuId)
     add_subdirectory(SQLite)
-    add_subdirectory(TurboBadger)    
+    add_subdirectory(TurboBadger)
     add_subdirectory(Poco)
     add_subdirectory(nativefiledialog)
 endif ()
 
-if (APPLE AND NOT IOS)
+if (LINUX OR APPLE AND NOT IOS)
     add_subdirectory(GLEW)
 endif()
 

+ 4 - 0
Source/ThirdParty/LibCpuId/src/libcpuid_types.h

@@ -52,7 +52,11 @@ typedef signed char		int8_t;
 typedef unsigned char		uint8_t;
 typedef signed short		int16_t;
 typedef unsigned short		uint16_t;
+
+#ifndef HAVE_INT64_T
 typedef signed long long	int64_t;
+#endif
+
 typedef unsigned long long	uint64_t;
 
 #endif

+ 1 - 2
Source/ThirdParty/TurboBadger/CMakeLists.txt

@@ -3,7 +3,7 @@ include_directories("${CMAKE_CURRENT_SOURCE_DIR}" ../FreeType/include ../SDL/inc
 
 if(APPLE)
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -Wall -Wextra -Wno-unused-parameter")
-    add_definitions(-DMACOSX)
+  add_definitions(-DMACOSX)
 endif(APPLE)
 
 add_definitions(-DTB_FONT_RENDERER_FREETYPE)
@@ -15,4 +15,3 @@ file (GLOB H_FILES *.h image/*.h animation/*.h parser/*.h renderers/*.h utf8/*.h
 set (SOURCE_FILES ${C_FILES} ${H_FILES})
 
 add_library(TurboBadger ${SOURCE_FILES})
-

+ 1 - 1
Source/ThirdParty/TurboBadger/tb_config.h

@@ -106,7 +106,7 @@
 #define TB_FILE_POSIX
 #define TB_TARGET_LINUX
 #define TB_SYSTEM_LINUX
-#define TB_CLIPBOARD_GLFW
+#define TB_CLIPBOARD_DUMMY
 #endif
 
 #ifdef MACOSX

+ 8 - 0
Source/ThirdParty/nativefiledialog/CMakeLists.txt

@@ -9,5 +9,13 @@ if (MSVC)
     set (SOURCE_FILES ${SOURCE_FILES} nfd_win.cpp )
 endif( MSVC)
 
+if (LINUX)
+    set (SOURCE_FILES ${SOURCE_FILES} nfd_gtk.c )    
+    include_directories(${GTK3_INCLUDE_DIRS})
+    link_directories(${GTK3_LIBRARY_DIRS})
+    add_definitions(${GTK3_CFLAGS_OTHER})
+
+endif(LINUX)
+
 
 add_library(nativefiledialog ${SOURCE_FILES})

+ 32 - 22
Source/ThirdParty/nativefiledialog/nfd_gtk.c

@@ -25,7 +25,7 @@ static void AddTypeToFilterName( const char *typebuf, char *filterName, size_t b
         strncat( filterName, SEP, bufsize - len - 1 );
         len += strlen(SEP);
     }
-    
+
     strncat( filterName, typebuf, bufsize - len - 1 );
 }
 
@@ -36,34 +36,34 @@ static void AddFiltersToDialog( GtkWidget *dialog, const char *filterList )
     const char *p_filterList = filterList;
     char *p_typebuf = typebuf;
     char filterName[NFD_MAX_STRLEN] = {0};
-    
+
     if ( !filterList || strlen(filterList) == 0 )
         return;
 
     filter = gtk_file_filter_new();
     while ( 1 )
     {
-        
+
         if ( NFDi_IsFilterSegmentChar(*p_filterList) )
         {
             char typebufWildcard[NFD_MAX_STRLEN];
             /* add another type to the filter */
             assert( strlen(typebuf) > 0 );
             assert( strlen(typebuf) < NFD_MAX_STRLEN-1 );
-            
+
             snprintf( typebufWildcard, NFD_MAX_STRLEN, "*.%s", typebuf );
             AddTypeToFilterName( typebuf, filterName, NFD_MAX_STRLEN );
-            
+
             gtk_file_filter_add_pattern( filter, typebufWildcard );
-            
+
             p_typebuf = typebuf;
             memset( typebuf, 0, sizeof(char) * NFD_MAX_STRLEN );
         }
-        
+
         if ( *p_filterList == ';' || *p_filterList == '\0' )
         {
             /* end of filter -- add it to the dialog */
-            
+
             gtk_file_filter_set_name( filter, filterName );
             gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter );
 
@@ -72,7 +72,7 @@ static void AddFiltersToDialog( GtkWidget *dialog, const char *filterList )
             if ( *p_filterList == '\0' )
                 break;
 
-            filter = gtk_file_filter_new();            
+            filter = gtk_file_filter_new();
         }
 
         if ( !NFDi_IsFilterSegmentChar( *p_filterList ) )
@@ -83,7 +83,7 @@ static void AddFiltersToDialog( GtkWidget *dialog, const char *filterList )
 
         p_filterList++;
     }
-    
+
     /* always append a wildcard option to the end*/
 
     filter = gtk_file_filter_new();
@@ -111,7 +111,7 @@ static nfdresult_t AllocPathSet( GSList *fileList, nfdpathset_t *pathSet )
     GSList *node;
     nfdchar_t *p_buf;
     size_t count = 0;
-    
+
     assert(fileList);
     assert(pathSet);
 
@@ -140,7 +140,7 @@ static nfdresult_t AllocPathSet( GSList *fileList, nfdpathset_t *pathSet )
         nfdchar_t *path = (nfdchar_t*)(node->data);
         size_t byteLen = strlen(path)+1;
         ptrdiff_t index;
-        
+
         memcpy( p_buf, path, byteLen );
         g_free(node->data);
 
@@ -153,7 +153,7 @@ static nfdresult_t AllocPathSet( GSList *fileList, nfdpathset_t *pathSet )
     }
 
     g_slist_free( fileList );
-    
+
     return NFD_OKAY;
 }
 
@@ -162,13 +162,13 @@ static void WaitForCleanup(void)
     while (gtk_events_pending())
         gtk_main_iteration();
 }
-                                 
+
 /* public */
 
 nfdresult_t NFD_OpenDialog( const char *filterList,
                             const nfdchar_t *defaultPath,
                             nfdchar_t **outPath )
-{    
+{
     GtkWidget *dialog;
     nfdresult_t result;
 
@@ -257,7 +257,7 @@ nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList,
             gtk_widget_destroy(dialog);
             return NFD_ERROR;
         }
-        
+
         result = NFD_OKAY;
     }
 
@@ -269,6 +269,7 @@ nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList,
 
 nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList,
                             const nfdchar_t *defaultPath,
+                            const nfdchar_t *defaultFilename,
                             nfdchar_t **outPath )
 {
     GtkWidget *dialog;
@@ -285,18 +286,18 @@ nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList,
                                           GTK_FILE_CHOOSER_ACTION_SAVE,
                                           "_Cancel", GTK_RESPONSE_CANCEL,
                                           "_Save", GTK_RESPONSE_ACCEPT,
-                                          NULL ); 
+                                          NULL );
     gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(dialog), TRUE );
 
-    /* Build the filter list */    
+    /* Build the filter list */
     AddFiltersToDialog(dialog, filterList);
-    
-    result = NFD_CANCEL;    
+
+    result = NFD_CANCEL;
     if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT )
     {
         char *filename;
         filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) );
-        
+
         {
             size_t len = strlen(filename);
             *outPath = NFDi_Malloc( len + 1 );
@@ -316,6 +317,15 @@ nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList,
     gtk_widget_destroy(dialog);
 
     WaitForCleanup();
-    
+
     return result;
 }
+
+nfdresult_t NFD_ChooseDirectory( const nfdchar_t *prompt,
+                                 const nfdchar_t *defaultPath,
+                                 nfdchar_t **outPath )
+{
+
+  return NFD_ERROR;
+
+}

+ 1 - 2
Source/ToolCore/License/LicenseSystem.cpp

@@ -108,7 +108,7 @@ void LicenseSystem::LicenseAgreementConfirmed()
 
 String LicenseSystem::GenerateMachineID()
 {
-#ifdef ATOMIC_PLATFORM_OSX
+#if defined(ATOMIC_PLATFORM_OSX) || defined(ATOMIC_PLATFORM_LINUX) 
     String path = getenv("HOME");
 #else
     wchar_t pathName[MAX_PATH];
@@ -604,4 +604,3 @@ void LicenseSystem::RequestServerActivation(const String& key)
 }
 
 // END LICENSE MANAGEMENT
-

+ 15 - 3
Source/Tools/PackageTool/CMakeLists.txt

@@ -15,13 +15,13 @@ if (MSVC)
 
     add_custom_command(OUTPUT "${EDITORDATA_PAK}"
                        COMMAND $<TARGET_FILE:PackageTool> "${CMAKE_SOURCE_DIR}/Data/AtomicEditor/Resources/EditorData" "${EDITORDATA_PAK}" -c
-                       COMMAND ${CMAKE_COMMAND} 
+                       COMMAND ${CMAKE_COMMAND}
                        ARGS -E copy \"${EDITORDATA_PAK}\" \"$<TARGET_FILE_DIR:AtomicEditor>/EditorData.pak\"
                        DEPENDS PackageTool ${EDITORDATA_FILES})
 
     add_custom_command(OUTPUT "${COREDATA_PAK}"
                       COMMAND $<TARGET_FILE:PackageTool> "${CMAKE_SOURCE_DIR}/Data/AtomicPlayer/Resources/CoreData" "${COREDATA_PAK}" -c
-                      COMMAND ${CMAKE_COMMAND} 
+                      COMMAND ${CMAKE_COMMAND}
                       ARGS -E copy \"${COREDATA_PAK}\" \"$<TARGET_FILE_DIR:AtomicEditor>/CoreData.pak\"
                       DEPENDS PackageTool ${COREDATA_FILES})
 
@@ -36,7 +36,19 @@ elseif (APPLE)
                       COMMAND $<TARGET_FILE:PackageTool> "${CMAKE_SOURCE_DIR}/Data/AtomicPlayer/Resources/CoreData" "${COREDATA_PAK}" -c
                       COMMAND rsync -u "${COREDATA_PAK}" "$<TARGET_FILE_DIR:AtomicEditor>/../Resources/CoreData.pak"
                       DEPENDS PackageTool ${COREDATA_FILES})
+
+elseif (LINUX)
+
+    add_custom_command(OUTPUT "${EDITORDATA_PAK}"
+                       COMMAND $<TARGET_FILE:PackageTool> "${CMAKE_SOURCE_DIR}/Data/AtomicEditor/Resources/EditorData" "${EDITORDATA_PAK}" -c
+                       COMMAND rsync -u "${EDITORDATA_PAK}" "$<TARGET_FILE_DIR:AtomicEditor>/EditorData.pak"
+                       DEPENDS PackageTool ${EDITORDATA_FILES})
+
+    add_custom_command(OUTPUT "${COREDATA_PAK}"
+                      COMMAND $<TARGET_FILE:PackageTool> "${CMAKE_SOURCE_DIR}/Data/AtomicPlayer/Resources/CoreData" "${COREDATA_PAK}" -c
+                      COMMAND rsync -u "${COREDATA_PAK}" "$<TARGET_FILE_DIR:AtomicEditor>/CoreData.pak"
+                      DEPENDS PackageTool ${COREDATA_FILES})
+
 endif()
 
 add_custom_target(BuildEditorFiles ALL DEPENDS AtomicEditor "${EDITORDATA_PAK}" "${COREDATA_PAK}")
-