CMake builds on Ubuntu now too.

Punted for now on GL on Linux.  Man that's a beast.

BUG=skia:4269

Review URL: https://codereview.chromium.org/1315753009
This commit is contained in:
mtklein 2015-08-31 06:59:21 -07:00 committed by Commit bot
parent 5406d6f39a
commit 2409abb812
3 changed files with 99 additions and 46 deletions

2
cmake/.gitignore vendored
View File

@ -6,6 +6,6 @@ CMakeCache.txt
CMakeFiles
cmake_install.cmake
libskia.dylib
libskia.*
example
example.png

View 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"

View File

@ -18,10 +18,11 @@
#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;
@ -30,6 +31,11 @@
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} };