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