285 lines
11 KiB
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})
|