130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun######################################################################## 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun# CMake build script for Google Typography sfntly. 330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruncmake_minimum_required(VERSION 2.6.2) 430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunset(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "good configs" FORCE) 530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunset(CMAKE_LEGACY_CYGWIN_WIN32 0) 630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunproject(sfntly) 830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun# For gcc, make the default be debug build and valgrind friendly. 1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunif(CMAKE_COMPILER_IS_GNUCXX) 1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if(NOT CMAKE_BUILD_TYPE) 1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun set(CMAKE_BUILD_TYPE Debug) 1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_definitions("-DDEBUG -D_DEBUG -g -fno-inline -fno-omit-frame-pointer -fno-builtin") 1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun endif(NOT CMAKE_BUILD_TYPE) 1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunendif(CMAKE_COMPILER_IS_GNUCXX) 1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib) 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin) 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src ext/gtest/include ext/gtest 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${CMAKE_CURRENT_SOURCE_DIR}/src/sample ${CMAKE_CURRENT_SOURCE_DIR}/src/sample/subtly) 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun# The following simulates Chrome compilation flags 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_definitions(-DSFNTLY_NO_EXCEPTION) 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunif(CMAKE_COMPILER_IS_GNUCXX) 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_definitions(-D__wur=__attribute__\(\(warn_unused_result\)\) -Wall -Werror -fno-exceptions) 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunendif(CMAKE_COMPILER_IS_GNUCXX) 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun# Use STL for TinyXML library 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_definitions(-DTIXML_USE_STL) 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun# Enable CMap and Bitmap handling 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_definitions(-DSFNTLY_EXPERIMENTAL) 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun# VC specific flags 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunif(MSVC10 OR MSVC90) 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi /nologo /W4 /WX /O2 /Ob2 /Oy /GF /Gm- /MT /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /GR-") 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Zi /nologo /W4 /WX /Od /Oy- /RTC1 /MTd /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /GR-") 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_definitions(-D_UNICODE -DUNICODE) 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ext/icu/include) 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun link_directories(${CMAKE_CURRENT_SOURCE_DIR}/ext/icu/lib) 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunendif(MSVC10 OR MSVC90) 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SFNTLY_CORE_FILES src/sfntly/*.h src/sfntly/*.cc) 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SFNTLY_PORT_FILES src/sfntly/port/*.h src/sfntly/port/*.cc) 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SFNTLY_DATA_FILES src/sfntly/data/*.h src/sfntly/data/*.cc) 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SFNTLY_MATH_FILES src/sfntly/math/*.h src/sfntly/math/*.cc) 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SFNTLY_TABLE_COMMON_FILES src/sfntly/table/*.h src/sfntly/table/*.cc) 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SFNTLY_TABLE_BITMAP_FILES src/sfntly/table/bitmap/*.h src/sfntly/table/bitmap/*.cc) 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SFNTLY_TABLE_CORE_FILES src/sfntly/table/core/*.h src/sfntly/table/core/*.cc) 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SFNTLY_TABLE_TTF_FILES src/sfntly/table/truetype/*.h src/sfntly/table/truetype/*.cc) 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun source_group(core FILES ${SFNTLY_CORE_FILES}) 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun source_group(ports FILES ${SFNTLY_PORT_FILES}) 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun source_group(data FILES ${SFNTLY_DATA_FILES}) 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun source_group(math FILES ${SFNTLY_MATH_FILES}) 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun source_group(table FILES ${SFNTLY_TABLE_COMMON_FILES}) 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun source_group(table\\bitmap FILES ${SFNTLY_TABLE_BITMAP_FILES}) 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun source_group(table\\core FILES ${SFNTLY_TABLE_CORE_FILES}) 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun source_group(table\\truetype FILES ${SFNTLY_TABLE_TTF_FILES}) 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_library(sfntly 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SFNTLY_CORE_FILES} 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SFNTLY_PORT_FILES} 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SFNTLY_DATA_FILES} 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SFNTLY_MATH_FILES} 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SFNTLY_TABLE_COMMON_FILES} 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SFNTLY_TABLE_BITMAP_FILES} 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SFNTLY_TABLE_CORE_FILES} 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SFNTLY_TABLE_TTF_FILES}) 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB_RECURSE SIMPLE_SUBSETTER src/sample/subsetter/*.h src/sample/subsetter/*.cc 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sfntly/tools/*.h src/sfntly/tools/*.cc) 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_executable(subsetter ${SIMPLE_SUBSETTER}) 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(subsetter sfntly icuuc) 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunif(CMAKE_COMPILER_IS_GNUCXX) 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(subsetter pthread) 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunendif(CMAKE_COMPILER_IS_GNUCXX) 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB TINYXML src/test/tinyxml/*.cpp) 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_library(tinyxml 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${TINYXML}) 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB TEST_CASES src/test/*.cc src/test/autogenerated/*.cc) 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB CHROME_SUBSETTER_LIB 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sample/chromium/subsetter_impl.h 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sample/chromium/subsetter_impl.cc 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sample/chromium/font_subsetter.cc 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sample/chromium/font_subsetter.h) 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_executable(unit_test 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${TEST_CASES} ${CHROME_SUBSETTER_LIB} 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ext/gtest/src/gtest-all.cc 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ext/gtest/src/gtest_main.cc) 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(unit_test sfntly icuuc tinyxml) 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunif(CMAKE_COMPILER_IS_GNUCXX) 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(unit_test pthread) 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunendif(CMAKE_COMPILER_IS_GNUCXX) 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun # subtly targets 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SUBTLY_FILES src/sample/subtly/*.h src/sample/subtly/*.cc) 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun file(GLOB SUBTLY_MAINS src/sample/subtly/*main.cc) 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun list(REMOVE_ITEM SUBTLY_FILES ${SUBTLY_MAINS}) 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_library(subtly 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${SUBTLY_FILES}) 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_executable(subtly_subsetter 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sample/subtly/subsetter_main.cc) 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(subtly_subsetter subtly sfntly icuuc) 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunif(CMAKE_COMPILER_IS_GNUCXX) 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(subtly_subsetter pthread) 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunendif(CMAKE_COMPILER_IS_GNUCXX) 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_executable(subtly_merger 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sample/subtly/merger_main.cc) 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(subtly_merger subtly sfntly icuuc) 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunif(CMAKE_COMPILER_IS_GNUCXX) 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(subtly_merger pthread) 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunendif(CMAKE_COMPILER_IS_GNUCXX) 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_executable(subtly_debug 11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sample/subtly/debug_main.cc) 11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(subtly_debug subtly sfntly icuuc) 11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunif(CMAKE_COMPILER_IS_GNUCXX) 11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(subtly_debug pthread) 11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunendif(CMAKE_COMPILER_IS_GNUCXX) 11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun add_executable(chrome_subsetter 11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ${CHROME_SUBSETTER_LIB} 11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun src/sample/chromium/chrome_subsetter.cc 11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ) 12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(chrome_subsetter sfntly icuuc) 12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun if(CMAKE_COMPILER_IS_GNUCXX) 12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun target_link_libraries(chrome_subsetter pthread) 12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun endif(CMAKE_COMPILER_IS_GNUCXX) 124