CMake builds on Ubuntu now too.
authormtklein <mtklein@chromium.org>
Mon, 31 Aug 2015 13:59:21 +0000 (06:59 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 31 Aug 2015 13:59:21 +0000 (06:59 -0700)
Punted for now on GL on Linux.  Man that's a beast.

BUG=skia:4269

Review URL: https://codereview.chromium.org/1315753009

cmake/.gitignore
cmake/CMakeLists.txt
cmake/example.cpp

index 8c39254a4fe98541fb83dc9a49e5d3d337351020..9a079bc01bfa5083d4013dd31422be0ca2b0e328 100644 (file)
@@ -6,6 +6,6 @@ CMakeCache.txt
 CMakeFiles
 cmake_install.cmake
 
-libskia.dylib
+libskia.*
 example
 example.png
index 91785a344a14b5296aecc57a5c79bbedf228962c..ea98cd145fcb07247da5bdd8562adc7ffdb58b70 100644 (file)
@@ -12,7 +12,7 @@ endif ()
 file (GLOB_RECURSE srcs ../src/*.cpp)
 
 function (find_include_dirs out)
-    file (GLOB_RECURSE headers ${ARGV})
+    file (GLOB_RECURSE headers ${ARGN})
     foreach (path ${headers})
         get_filename_component (dir ${path} PATH)
         list (APPEND include_dirs ${dir})
@@ -32,7 +32,7 @@ list (APPEND srcs             ../third_party/etc1/etc1.cpp ../third_party/ktx/kt
 list (APPEND private_includes ../third_party/etc1          ../third_party/ktx)
 
 function (remove_srcs)
-    file (GLOB_RECURSE to_remove ${ARGV})
+    file (GLOB_RECURSE to_remove ${ARGN})
     list (REMOVE_ITEM srcs ${to_remove})
     set (srcs ${srcs} PARENT_SCOPE)
 endfunction()
@@ -41,6 +41,14 @@ endfunction()
 remove_srcs (../src/core/SkForceCPlusPlusLinking.cpp)
 # This file forces linking for all our supported image decoders.  We're more fine-grained.
 remove_srcs (../src/images/SkForceLinking.cpp)
+# Chrome only?
+remove_srcs (../src/ports/SkFontHost_fontconfig.cpp
+             ../src/fonts/SkFontMgr_fontconfig.cpp
+             ../src/ports/SkFontConfigInterface_direct.cpp)
+# Alternative font managers.
+remove_srcs (../src/ports/SkFontMgr_custom*.cpp)
+# Not actually used by Skia.
+remove_srcs (../src/utils/SkThreadUtils_pthread_*.cpp)
 
 # Skia sure ships a lot of code no one uses.
 remove_srcs (../src/animator/* ../src/*nacl* ../src/svg/* ../src/views/* ../src/xml/*)
@@ -52,13 +60,26 @@ endif()
 
 # Remove OS-specific source files.
 if (NOT WIN32)
-    remove_srcs(../src/utils/win/* ../src/*_win*.cpp ../src/*xps* ../src/gpu/gl/angle/* ../src/*WIC* ../src/*DWRITE*)
+    remove_srcs(../src/*XPS*
+                ../src/*_win*.cpp
+                ../src/gpu/gl/angle/*
+                ../src/ports/SkImageDecoder_WIC.cpp
+                ../src/utils/win/*)
 endif()
-if (NOT LINUX)
-    remove_srcs(../src/*linux* ../src/*FreeType* ../src/*FontConfig* ../src/*FontMgr_custom*)
+if (APPLE OR NOT UNIX)
+    remove_srcs(../src/gpu/gl/glx/*
+                ../src/images/SkImageDecoder_FactoryDefault.cpp
+                ../src/ports/SkFontMgr_fontconfig*.cpp
+                ../src/*FreeType*)
 endif()
 if (NOT ANDROID)
-    remove_srcs(../src/*android* ../src/*hwui*)
+    remove_srcs(../src/*Hwui* ../src/*android*)
+endif()
+if (NOT APPLE)
+    remove_srcs(../src/*darwin*
+                ../src/ports/SkImageDecoder_CG.cpp
+                ../src/utils/mac/*
+                ../src/*mac*)
 endif()
 
 # Remove processor-specific source files.
@@ -78,10 +99,8 @@ remove_srcs(
     ../src/gpu/gl/SkCreatePlatformGLContext*.cpp     # For internal testing only.
     ../src/gpu/gl/command_buffer/*
     ../src/gpu/gl/egl/*
-    ../src/gpu/gl/glx/*
     ../src/gpu/gl/iOS/*
     ../src/gpu/gl/mesa/*
-    ../src/images/SkImageDecoder_FactoryDefault.cpp
     ../src/opts/SkBitmapProcState_opts_none.cpp
     ../src/opts/SkBlitMask_opts_none.cpp
     ../src/opts/SkBlitRow_opts_none.cpp
@@ -89,9 +108,7 @@ remove_srcs(
     ../src/ports/SkGlobalInitialization_chromium.cpp
     ../src/ports/SkImageDecoder_empty.cpp
     ../src/ports/SkImageGenerator_none.cpp
-    ../src/ports/SkTLS_none.cpp
-    ../src/utils/SkThreadUtils_pthread_other.cpp
-    )
+    ../src/ports/SkTLS_none.cpp)
 
 remove_srcs(../src/codec/*)  # TODO: Requires Chromium's libjpeg-turbo, and incompatible giflib.
 
@@ -103,39 +120,80 @@ set_source_files_properties(${sse41_srcs} PROPERTIES COMPILE_FLAGS -msse4.1)
 
 # Detect our optional dependencies.
 # If we can't find them, don't build the parts of Skia that use them.
-
-find_package (GIF)
-find_package (JPEG)
-find_package (LUA)
-find_package (PNG)
+find_package (Lua)
 find_package (ZLIB)
 # No find_package for libwebp as far as I can tell, so simulate it here.
 find_path (WEBP_INCLUDE_DIRS "webp/decode.h")
 find_library (WEBP_LIBRARIES webp)
 
-if (NOT GIF_FOUND)
+if (UNIX AND NOT APPLE)
+    find_package (Freetype)
+    # Same deal for fontconfig.
+    find_path (FONTCONFIG_INCLUDE_DIRS "fontconfig/fontconfig.h")
+    find_library (FONTCONFIG_LIBRARIES fontconfig)
+    find_package (GIF)
+    find_package (JPEG)
+    find_package (PNG)
+endif()
+
+# TODO: macro away this if (found) ... else() ... endif() stuff.
+
+if (GIF_FOUND)
+    list (APPEND private_includes ${GIF_INCLUDE_DIRS})
+    list (APPEND libs             ${GIF_LIBRARIES})
+else()
     remove_srcs(../src/images/*gif*)
 endif()
-if (NOT JPEG_FOUND)
+
+if (JPEG_FOUND)
+    list (APPEND private_includes ${JPEG_INCLUDE_DIRS})
+    list (APPEND libs             ${JPEG_LIBRARIES})
+else()
     remove_srcs(../src/images/*jpeg*)
 endif()
-if (NOT LUA_FOUND)
-    remove_srcs(../src/utils/*lua*)
+
+if (LUA_FOUND)
+    list (APPEND private_includes ${LUA_INCLUDE_DIR})
+    list (APPEND libs             ${LUA_LIBRARIES})
+else()
+    remove_srcs(../src/utils/*Lua*)
 endif()
-if (NOT PNG_FOUND)
+
+if (PNG_FOUND)
+    list (APPEND private_includes ${PNG_INCLUDE_DIRS})
+    list (APPEND libs             ${PNG_LIBRARIES})
+else()
     remove_srcs(../src/images/*png*)
 endif()
-if (NOT ZLIB_FOUND)
-    remove_srcs(../src/pdf/*.cpp ../src/doc/SkDocument_PDF.cpp)
-else()
+
+if (ZLIB_FOUND)
+    list (APPEND private_includes ${ZLIB_INCLUDE_DIRS})
+    list (APPEND libs             ${ZLIB_LIBRARIES})
     remove_srcs(../src/doc/SkDocument_PDF_None.cpp)
+else()
+    remove_srcs(../src/pdf/*.cpp ../src/doc/SkDocument_PDF.cpp)
 endif()
-if (NOT WEBP_INCLUDE_DIRS OR NOT WEBP_LIBRARIES)
+
+if (WEBP_INCLUDE_DIRS AND WEBP_LIBRARIES)
+    list (APPEND private_includes ${WEBP_INCLUDE_DIRS})
+    list (APPEND libs             ${WEBP_LIBRARIES})
+else()
     remove_srcs(../src/images/*webp*)
 endif()
 
+if (FREETYPE_FOUND)
+    list (APPEND private_includes ${FREETYPE_INCLUDE_DIRS})
+    list (APPEND libs             ${FREETYPE_LIBRARIES})
+endif()
+
+if (FONTCONFIG_INCLUDE_DIRS AND FONTCONFIG_LIBRARIES)
+    list (APPEND private_includes ${FONTCONFIG_INCLUDE_DIRS})
+    list (APPEND libs             ${FONTCONFIG_LIBRARIES})
+endif()
+
 if (APPLE)
-    find_library(APPLICATION_SERVICES_FRAMEWORK ApplicationServices)
+    find_library(APPLICATION_SERVICES_FRAMEWORK ApplicationServices REQUIRED)
+    list (APPEND libs ${APPLICATION_SERVICES_FRAMEWORK})
 endif()
 
 # This is our main output, libskia.so.
@@ -149,23 +207,12 @@ target_compile_definitions(skia
 
 target_include_directories(skia
     PUBLIC  ${public_includes}
-    PRIVATE ${private_includes}
-            ${GIF_INCLUDE_DIRS}
-            ${JPEG_INCLUDE_DIRS}
-            ${LUA_INCLUDE_DIRS}
-            ${PNG_INCLUDE_DIRS}
-            ${WEBP_INCLUDE_DIRS}
-            ${ZLIB_INCLUDE_DIRS})
+    PRIVATE ${private_includes})
 
 target_link_libraries(skia
     PUBLIC
-    PRIVATE ${APPLICATION_SERVICES_FRAMEWORK}
-            ${GIF_LIBRARIES}
-            ${JPEG_LIBRARIES}
-            ${LUA_LIBRARIES}
-            ${PNG_LIBRARIES}
-            ${WEBP_LIBRARIES}
-            ${ZLIB_LIBRARIES})
+    PRIVATE ${libs})
+
 
 set_target_properties(skia PROPERTIES
     COMPILE_FLAGS "-fno-exceptions -fno-rtti -Wno-deprecated-declarations"
index ea10bed759ccb94497809eaad5772dc3873cc1b4..2fc91d52205d9c1badbb8245069365f3919598d0 100644 (file)
 #include <iostream>
 #include <memory>
 
+// These setup_gl_context() are not meant to represent good form.
+// They are just quick hacks to get us going.
 #if defined(__APPLE__)
     #include <OpenGL/OpenGL.h>
-    static void setup_gl_context() {
-        // This is not meant to represent good form.  It's just a quick hack to get us going.
+    static bool setup_gl_context() {
         CGLPixelFormatAttribute attributes[] = { (CGLPixelFormatAttribute)0 };
         CGLPixelFormatObj format;
         GLint npix;
         CGLCreateContext(format, nullptr, &context);
         CGLSetCurrentContext(context);
         CGLReleasePixelFormat(format);
+        return true;
+    }
+#else
+    static bool setup_gl_context() {
+        return false;
     }
 #endif
 
@@ -53,10 +59,10 @@ static std::shared_ptr<SkSurface> create_opengl_surface(int w, int h) {
 }
 
 int main(int, char**) {
-    setup_gl_context();
+    bool gl_ok = setup_gl_context();
     srand(time(nullptr));
-    std::shared_ptr<SkSurface> surface = (rand() % 2) ? create_raster_surface(320, 240)
-                                                      : create_opengl_surface(320, 240);
+    std::shared_ptr<SkSurface> surface = (gl_ok && rand() % 2) ? create_opengl_surface(320, 240)
+                                                               : create_raster_surface(320, 240);
 
     // Create a left-to-right green-to-purple gradient shader.
     SkPoint pts[] = { {0,0}, {320,240} };