haikuwebkit/Source/cmake/OptionsHaiku.cmake

285 lines
11 KiB
CMake

include(GNUInstallDirs)
include(VersioningUtils)
SET(PROJECT_VERSION_MAJOR 1)
SET(PROJECT_VERSION_MINOR 8)
SET(PROJECT_VERSION_PATCH 2)
SET(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
add_definitions(-DHAIKU_WEBKIT_VERSION=\"${PROJECT_VERSION}\")
add_definitions(-DBUILDING_HAIKU__=1)
CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(JAVASCRIPTCORE 25 4 7)
# Force libstdc++ to export std::isinf and friends. This should be fixed on
# Haiku side ultimately.
add_definitions(-D_GLIBCXX_USE_C99_MATH)
set(ENABLE_WEBKIT OFF)
set(ENABLE_WEBKIT_LEGACY ON)
set(USE_ANGLE_EGL OFF)
# To get assertions in release mode, we replace all -DNDEBUG with -UNDEBUG
# (they are automatically added by CMake and there is no "release with asserts"
# build available in WebKit)
#foreach(flag_var
# CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
# CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
# if(${flag_var} MATCHES "-DNDEBUG")
# string(REGEX REPLACE "-DNDEBUG" "-UNDEBUG" ${flag_var} "${${flag_var}}")
# endif(${flag_var} MATCHES "-DNDEBUG")
#endforeach(flag_var)
#set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fvisibility-inlines-hidden")
find_package(LibGcrypt 1.7.0 REQUIRED)
FIND_PACKAGE(SQLite3 REQUIRED)
FIND_PACKAGE(LibXml2 2.8.0 REQUIRED)
FIND_PACKAGE(LibXslt 1.1.7 REQUIRED)
find_package(ICU REQUIRED COMPONENTS data i18n uc)
find_package(Threads REQUIRED)
FIND_PACKAGE(JPEG REQUIRED)
FIND_PACKAGE(PNG REQUIRED)
find_package(WebP REQUIRED COMPONENTS demux)
FIND_PACKAGE(ZLIB REQUIRED)
set(USE_ICU_UNICODE 1)
set(DATA_INSTALL_DIR "data/WebKit" CACHE PATH "Installation path for data")
set(HEADER_INSTALL_DIR "develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}" CACHE PATH "Installation path for header files")
set(THEME_BINARY_DIR ${CMAKE_BINARY_DIR}/WebCore/platform/efl/DefaultTheme)
set(WEB_INSPECTOR_DIR "${DATA_INSTALL_DIR}/inspector")
set(WEBINSPECTORUI_DIR "${CMAKE_SOURCE_DIR}/Source/WebInspectorUI")
add_definitions(-DDATA_DIR="${CMAKE_INSTALL_PREFIX}/${DATA_INSTALL_DIR}")
WEBKIT_OPTION_BEGIN()
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_3D_TRANSFORMS PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCESSIBILITY PRIVATE OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ATTACHMENT_ELEMENT PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS3_TEXT PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_DEVICE_ADAPTATION PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_SELECTORS_LEVEL4 PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DARK_MODE_CSS PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DATALIST_ELEMENT PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DOWNLOAD_ATTRIBUTE PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ENCRYPTED_MEDIA PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FILTERS_LEVEL_2 PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FULLSCREEN_API PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GAMEPAD PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_GEOLOCATION PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_COLOR PRIVATE ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_DATE PRIVATE ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_DATETIMELOCAL PRIVATE ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_MONTH PRIVATE ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_TIME PRIVATE ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_WEEK PRIVATE ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_CAPTURE PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_CONTROLS_SCRIPT PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_SOURCE PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_STREAM PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEMORY_SAMPLER PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MHTML PRIVATE ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MOUSE_CURSOR_SCALE PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NETSCAPE_PLUGIN_API PRIVATE OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NOTIFICATIONS PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_RESOLUTION_MEDIA_QUERY PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SAMPLING_PROFILER PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SPEECH_SYNTHESIS PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SPELLCHECK PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_CRYPTO PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_EVENTS PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_SLIDER PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_AUDIO PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_CRYPTO PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_XSLT PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER PRIVATE OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PUBLIC_SUFFIX_LIST PRIVATE OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_REMOTE_INSPECTOR PRIVATE OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SMOOTH_SCROLLING PRIVATE OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBGL PRIVATE OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_SYSTEM_MALLOC PRIVATE ON)
WEBKIT_OPTION_END()
if (ENABLE_WEBKIT AND ENABLE_NETSCAPE_PLUGIN_API)
set(ENABLE_PLUGIN_PROCESS 1)
endif ()
IF (ENABLE_WEB_AUDIO)
SET(USE_FFMPEG 1)
ADD_DEFINITIONS(-DUSE_FFMPEG=1)
ADD_DEFINITIONS(-DUSE_WEBAUDIO_FFMPEG=1)
ENDIF ()
set(USE_3D_GRAPHICS 0)
add_definitions(-DUSE_3D_GRAPHICS=0)
if (ENABLE_WEBGL)
find_package(OpenGL REQUIRED)
option(ENABLE_EGL ON)
if (ENABLE_EGL)
find_package(EGL REQUIRED)
endif ()
if (EGL_FOUND)
SET_AND_EXPOSE_TO_BUILD(USE_EGL TRUE)
option(ENABLE_GLES2 ON)
if (ENABLE_GLES2)
find_package(GLES REQUIRED)
endif ()
if (OPENGLES2_FOUND)
set(USE_OPENGL_ES_2 1)
add_definitions(-DUSE_OPENGL_ES_2=1)
endif ()
endif ()
if (EGL_FOUND)
set(USE_GRAPHICS_SURFACE 1)
endif ()
endif ()
if (ENABLE_INSPECTOR)
set(WEB_INSPECTOR_DIR "${DATA_INSTALL_DIR}/inspector")
add_definitions(-DWEB_INSPECTOR_DIR=\"${CMAKE_BINARY_DIR}/${WEB_INSPECTOR_DIR}\")
add_definitions(-DWEB_INSPECTOR_INSTALL_DIR=\"${CMAKE_INSTALL_PREFIX}/${WEB_INSPECTOR_DIR}\")
endif ()
# Packaging data
if(CMAKE_HAIKU_SECONDARY_ARCH)
# Building for secondary architecture, setup the suffix
set(PACKAGE_SUFFIX _${CMAKE_HAIKU_SECONDARY_ARCH})
endif()
SET(CPACK_SOURCE_GENERATOR TBZ2)
set(CPACK_GENERATOR HPKG)
# Optimize binary size for release builds by removing dead sections
if (CMAKE_BUILD_TYPE STREQUAL Release AND CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS "-ffunction-sections -fdata-sections ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-ffunction-sections -fdata-sections ${CMAKE_CXX_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--gc-sections ${CMAKE_SHARED_LINKER_FLAGS}")
endif ()
# Haiku actually make use of rtti in several places, so we can't really disable
# it, unlike on other platforms...
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -frtti")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -frtti")
string(TOLOWER ${CMAKE_HOST_SYSTEM_PROCESSOR} LOWERCASE_CMAKE_HOST_SYSTEM_PROCESSOR)
if (CMAKE_COMPILER_IS_GNUCC AND "${LOWERCASE_CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "x86")
# i686 is the official requirement for Haiku, let's try to keep this working
# for everyone.
set(CMAKE_C_FLAGS "-march=i686 ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-march=i686 ${CMAKE_CXX_FLAGS}")
endif()
if (CMAKE_COMPILER_IS_GNUCC AND "${LOWERCASE_CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
# GCC port issue? This is not needed for other platforms.
set(CMAKE_EXE_LINKER_FLAGS "-pie ${CMAKE_EXE_LINKER_FLAGS}")
endif()
SET_AND_EXPOSE_TO_BUILD(USE_TEXTURE_MAPPER OFF)
SET_AND_EXPOSE_TO_BUILD(USE_TEXTURE_MAPPER_GL OFF)
SET_AND_EXPOSE_TO_BUILD(ENABLE_GRAPHICS_CONTEXT_GL OFF)
SET_AND_EXPOSE_TO_BUILD(USE_EGL FALSE)
SET_AND_EXPOSE_TO_BUILD(USE_TILED_BACKING_STORE OFF)
SET_AND_EXPOSE_TO_BUILD(USE_COORDINATED_GRAPHICS OFF)
set(DERIVED_SOURCES_DIR "${CMAKE_BINARY_DIR}/DerivedSources")
set(DERIVED_SOURCES_WEBKIT_DIR ${DERIVED_SOURCES_DIR}/WebKit)
set(DERIVED_SOURCES_HAIKU_API_DIR ${DERIVED_SOURCES_WEBKIT_DIR}/haiku)
set(FORWARDING_HEADERS_DIR ${DERIVED_SOURCES_DIR}/ForwardingHeaders)
if (ENABLE_WEB_CRYPTO)
find_package(Libtasn1 REQUIRED)
if (NOT LIBTASN1_FOUND)
message(FATAL_ERROR "libtasn1 is required to enable Web Crypto API support.")
endif ()
SET_AND_EXPOSE_TO_BUILD(USE_GCRYPT TRUE)
endif ()
if (ENABLE_WEBGL)
set(ENABLE_WEBGL 1)
if (USE_GRAPHICS_SURFACE)
add_definitions(-DUSE_GRAPHICS_SURFACE=1)
endif ()
endif ()
SET_AND_EXPOSE_TO_BUILD(ENABLE_GRAPHICS_CONTEXT_3D FALSE)
if (ENABLE_SPELLCHECK)
find_package(Enchant REQUIRED)
endif ()
if (ENABLE_ACCESSIBILITY)
find_package(ATK REQUIRED)
else ()
SET_AND_EXPOSE_TO_BUILD(HAVE_ACCESSIBILITY FALSE)
endif ()
if (ENABLE_INDEXED_DATABASE)
set(USE_LEVELDB 1)
add_definitions(-DUSE_LEVELDB=1)
endif ()
set(JavaScriptCore_LIBRARY_TYPE SHARED)
set(SHOULD_INSTALL_JS_SHELL ON)
set(WEBKIT_CPACK_ALL_PORTS 1) # Until we can safely extract only the sources used by Haiku
set(WEBKIT_CPACK_ADD_TOOLS 1) # Mainly for generate_webkit_info.sh
set(CPACK_PACKAGE_NAME "haikuwebkit${PACKAGE_SUFFIX}")
set(CPACK_PACKAGE_VENDOR "Haiku Project")
set(CPACK_HAIKU_PACKAGE_COPYRIGHT "1998-2013 Apple Inc., Google Inc., Haiku Inc., et al")
set(CPACK_HAIKU_PACKAGE_LICENSES "GNU LGPL v2" "GNU LGPL v2.1" "MIT")
# TODO apple webkit (needs to be added inside package)
set(CPACK_HAIKU_PACKAGE_REVISION "1")
set(CPACK_HAIKU_PACKAGE_PROVIDES
"lib:libWebKit${PACKAGE_SUFFIX} = ${PROJECT_VERSION}"
)
set(CPACK_HAIKU_PACKAGE_REQUIRES
"haiku${PACKAGE_SUFFIX} >= r1~alpha4_pm-1"
"icu${PACKAGE_SUFFIX} >= 4.8.1.1"
"lib:libjpeg${PACKAGE_SUFFIX} >= 9"
"lib:libpng${PACKAGE_SUFFIX} >= 15.12.0"
"lib:libsqlite3${PACKAGE_SUFFIX} >= 0.8.6"
"lib:libxml2${PACKAGE_SUFFIX} >= 2.8.0"
"lib:libxslt${PACKAGE_SUFFIX} >= 1.1.18"
)
set(CPACK_HAIKU_devel_PACKAGE_PROVIDES
"devel:libWebKit${PACKAGE_SUFFIX} = ${PROJECT_VERSION}"
)
set(CPACK_HAIKU_devel_PACKAGE_REQUIRES
"haiku${PACKAGE_SUFFIX}_devel >= r1~alpha4_pm-1"
"icu${PACKAGE_SUFFIX}_devel >= 4.8.1.1"
"devel:libjpeg${PACKAGE_SUFFIX} >= 9"
"devel:libpng${PACKAGE_SUFFIX} >= 15.12.0"
"devel:libsqlite3${PACKAGE_SUFFIX} >= 0.8.6"
"devel:libxml2${PACKAGE_SUFFIX} >= 2.8.0"
"devel:libxslt${PACKAGE_SUFFIX} >= 1.1.18"
)
include(CPackComponent)
cpack_add_component(devel)
# These could be shared with other flavors of CPack, if they are used anywhere.
# Maybe move them to non-Haiku specific place.
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Open source web browser engine")
set(CPACK_PACKAGE_DESCRIPTION "WebKit is an open source web browser engine.
WebKit is also the name of the Mac OS X system framework version of the engine
that's used by Safari, Dashboard, Mail, and many other OS X applications.
WebKit's HTML and JavaScript code began as a branch of the KHTML and KJS
libraries from KDE.")
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})