1 include(GNUInstallDirs)
   2 
   3 set(WEBKITJAVA_API_VERSION 4.0)
   4 
   5 set(ICU_UNICODE TRUE)
   6 SET_AND_EXPOSE_TO_BUILD(USE_IMAGEIO TRUE)
   7 SET_AND_EXPOSE_TO_BUILD(USE_TEXTURE_MAPPER TRUE)
   8 if (ICU_UNICODE)
   9     SET_AND_EXPOSE_TO_BUILD(USE_ICU_UNICODE TRUE)
  10 else ()
  11     SET_AND_EXPOSE_TO_BUILD(USE_JAVA_UNICODE TRUE)
  12 endif ()
  13 
  14 # Eventloop
  15 SET_AND_EXPOSE_TO_BUILD(WTF_DEFAULT_EVENT_LOOP 0)
  16 if (WIN32)
  17     SET_AND_EXPOSE_TO_BUILD(USE_WINDOWS_EVENT_LOOP 1)
  18 elseif (APPLE)
  19     SET_AND_EXPOSE_TO_BUILD(USE_COCOA_EVENT_LOOP 1)
  20 elseif (UNIX)
  21     SET_AND_EXPOSE_TO_BUILD(USE_GENERIC_EVENT_LOOP 1)
  22 endif ()
  23 
  24 # These are shared variables, but we special case their definition so that we can use the
  25 # CMAKE_INSTALL_* variables that are populated by the GNUInstallDirs macro.
  26 set(LIB_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}" CACHE PATH "Absolute path to library installation directory")
  27 set(EXEC_INSTALL_DIR "${CMAKE_INSTALL_FULL_BINDIR}" CACHE PATH "Absolute path to executable installation directory")
  28 
  29 set(SQLITE_LIBRARIES SqliteJava)
  30 set(LIBXML2_LIBRARIES XMLJava)
  31 set(LIBXSLT_LIBRARIES XSLTJava)
  32 
  33 if (WIN32)
  34     #### ICU ####
  35     set (ICU_JAVA_COMMON_LIB sicuuc)
  36     set (ICU_JAVA_I18N_LIBRARIES sicuin)
  37     set (ICU_JAVA_DATA_LIB ${CMAKE_BINARY_DIR}/lib/sicudt.lib)
  38     #### ICU-END ####
  39 elseif (APPLE)
  40     # set(USE_CF 1)
  41     add_definitions(-DUSE_CF=1)
  42     add_definitions(-DJSC_OBJC_API_ENABLED=0)
  43 
  44     #### ICU ####
  45     set(ICU_JAVA_COMMON_LIB icuuc)
  46     set(ICU_JAVA_I18N_LIBRARIES icui18n)
  47     set(ICU_JAVA_DATA_LIB ${CMAKE_BINARY_DIR}/lib/libicudata.a)
  48     #### ICU-END ####
  49 
  50     set(CMAKE_MACOSX_RPATH TRUE)
  51     set(CMAKE_INSTALL_RPATH "@loader_path/.")
  52     set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
  53 elseif (UNIX)
  54     #### ICU ####
  55     set(ICU_JAVA_COMMON_LIB icuuc)
  56     set(ICU_JAVA_I18N_LIBRARIES icui18n)
  57     set(ICU_JAVA_DATA_LIB ${CMAKE_BINARY_DIR}/lib/libicudata.a)
  58     #### ICU-END ####
  59 
  60     set(CMAKE_SKIP_RPATH TRUE)
  61 else ()
  62     message(FATAL_ERROR "Configure icu library path")
  63 endif ()
  64 
  65 set(ICU_INCLUDE_DIRS
  66     "${THIRDPARTY_DIR}/icu/source/common"
  67     "${THIRDPARTY_DIR}/icu/source/i18n"
  68 )
  69 set(ICU_LIBRARIES ${ICU_JAVA_COMMON_LIB} ${ICU_JAVA_DATA_LIB})
  70 set(ICU_I18N_LIBRARIES ${ICU_JAVA_I18N_LIBRARIES} ${ICU_JAVA_COMMON_LIB} ${ICU_JAVA_DATA_LIB})
  71 set(ICU_DATA_LIBRARIES ${ICU_JAVA_DATA_LIB})
  72 
  73 find_package(JNI REQUIRED)
  74 find_package(Threads REQUIRED)
  75 
  76 if (WIN32)
  77     # Second, for multi-config builds (e.g. msvc)
  78     foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
  79         string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
  80         set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_BINARY_DIR}/bin")
  81         set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_BINARY_DIR}/lib")
  82         set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_BINARY_DIR}/lib")
  83     endforeach (OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
  84 
  85     # Copied from OptionsWindows.cmake
  86     add_definitions(-DNOMINMAX -DUNICODE -D_UNICODE -D_WINDOWS -DWINVER=0x601)
  87     add_definitions(
  88         /wd4018 /wd4068 /wd4099 /wd4100 /wd4127 /wd4138 /wd4146 /wd4180 /wd4189
  89         /wd4201 /wd4206 /wd4244 /wd4251 /wd4267 /wd4275 /wd4288 /wd4291 /wd4305
  90         /wd4309 /wd4344 /wd4355 /wd4389 /wd4396 /wd4456 /wd4457 /wd4458 /wd4459
  91         /wd4481 /wd4503 /wd4505 /wd4510 /wd4512 /wd4530 /wd4610 /wd4611 /wd4646
  92         /wd4702 /wd4706 /wd4722 /wd4800 /wd4819 /wd4951 /wd4952 /wd4996 /wd6011
  93         /wd6031 /wd6211 /wd6246 /wd6255 /wd6387
  94     )
  95 
  96     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:ICF /OPT:REF")
  97     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:ICF /OPT:REF")
  98 
  99     # We do not use exceptions
 100     add_definitions(-D_HAS_EXCEPTIONS=0)
 101     add_compile_options(/EHa- /EHc- /EHs- /fp:except-)
 102 
 103     # We have some very large object files that have to be linked
 104     add_compile_options(/analyze- /bigobj)
 105 
 106     # Use CRT security features
 107     add_definitions(-D_CRT_SECURE_NO_WARNINGS)
 108 
 109     # Turn off certain link features
 110     add_compile_options(/Gy- /openmp- /GF-)
 111 
 112     # Specify the source code encoding
 113     add_compile_options(/utf-8 /validate-charset)
 114 
 115     # If <winsock2.h> is not included before <windows.h> redefinition errors occur
 116     # unless _WINSOCKAPI_ is defined before <windows.h> is included
 117     add_definitions(-D_WINSOCKAPI_=)
 118 
 119     if (NOT ${CMAKE_GENERATOR} MATCHES "Ninja")
 120         add_definitions(/MP)
 121     endif ()
 122     if (NOT ${CMAKE_CXX_FLAGS} STREQUAL "")
 123         string(REGEX REPLACE "(/EH[a-z]+) " "\\1- " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable C++ exceptions
 124         string(REGEX REPLACE "/EHsc$" "/EHs- /EHc- " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable C++ exceptions
 125         string(REGEX REPLACE "/GR " "/GR- " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable RTTI
 126         string(REGEX REPLACE "/W3" "/W4" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Warnings are important
 127     endif ()
 128 
 129 elseif(APPLE)
 130 else()
 131     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--export-dynamic")
 132 endif()
 133 
 134 WEBKIT_OPTION_BEGIN()
 135 
 136 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS_COMPOSITING PRIVATE ON)
 137 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DATALIST_ELEMENT PRIVATE ON)
 138 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON)
 139 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ICONDATABASE PUBLIC OFF)
 140 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_TOUCH_EVENTS PUBLIC OFF)
 141 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO PUBLIC ON)
 142 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_3D_TRANSFORMS PRIVATE ON)
 143 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCESSIBILITY PRIVATE OFF)
 144 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_CSS3_TEXT PRIVATE OFF)
 145 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DATALIST_ELEMENT PRIVATE ON)
 146 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DOWNLOAD_ATTRIBUTE PRIVATE OFF)
 147 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTPDIR PRIVATE ON)
 148 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FULLSCREEN_API PRIVATE ON)
 149 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INDEXED_DATABASE PRIVATE OFF)
 150 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_COLOR PRIVATE ON)
 151 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LINK_PREFETCH PRIVATE ON)
 152 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MEDIA_CONTROLS_SCRIPT PRIVATE ON)
 153 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_MHTML PRIVATE ON)
 154 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NAVIGATOR_CONTENT_UTILS PRIVATE OFF)
 155 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NETSCAPE_PLUGIN_API PRIVATE ON)
 156 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_NOTIFICATIONS PRIVATE ON)
 157 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_QUOTA PRIVATE OFF)
 158 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_RESOLUTION_MEDIA_QUERY PRIVATE ON)
 159 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_VIDEO_TRACK PRIVATE ON)
 160 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBGL PRIVATE OFF)
 161 
 162 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_DATE PRIVATE ON)
 163 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_DATETIMELOCAL PRIVATE ON)
 164 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE PRIVATE ON)
 165 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_MONTH PRIVATE ON)
 166 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_TIME PRIVATE ON)
 167 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INPUT_TYPE_WEEK PRIVATE ON)
 168 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_REMOTE_INSPECTOR PRIVATE OFF)
 169 
 170 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_INTL PRIVATE OFF)
 171 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEB_AUDIO PRIVATE OFF)
 172 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_SUBTLE_CRYPTO PRIVATE OFF)
 173 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_PUBLIC_SUFFIX_LIST PRIVATE OFF)
 174 
 175 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FTL_JIT PUBLIC OFF)
 176 WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_WEBASSEMBLY PRIVATE OFF)
 177 
 178 if (WIN32)
 179     # FIXME: Port bmalloc to Windows. https://bugs.webkit.org/show_bug.cgi?id=143310
 180     WEBKIT_OPTION_DEFAULT_PORT_VALUE(USE_SYSTEM_MALLOC PRIVATE ON)
 181 endif ()
 182 
 183 
 184 # Finalize the value for all options. Do not attempt to use an option before
 185 # this point, and do not attempt to change any option after this point.
 186 WEBKIT_OPTION_END()
 187 
 188 
 189 set(ENABLE_WEBKIT OFF)
 190 set(ENABLE_WEBKIT2 OFF)
 191 add_definitions(-DBUILDING_JAVA__=1)
 192 add_definitions(-DDATA_DIR="${CMAKE_INSTALL_DATADIR}")
 193 # add_definitions(-DUSE_CROSS_PLATFORM_CONTEXT_MENUS=1)
 194 
 195 set(FORWARDING_HEADERS_DIR ${DERIVED_SOURCES_DIR}/ForwardingHeaders)
 196 
 197 
 198 set(WTF_LIBRARY_TYPE STATIC)
 199 set(JavaScriptCore_LIBRARY_TYPE STATIC)
 200 set(WebCore_LIBRARY_TYPE STATIC)
 201 set(WebCoreTestSupport_LIBRARY_TYPE STATIC)
 202 set(PAL_LIBRARY_TYPE STATIC)
 203 
 204 
 205 if (CMAKE_MAJOR_VERSION LESS 3)
 206     # Before CMake 3 it was necessary to use a build script instead of using cmake --build directly
 207     # to preserve colors and pretty-printing.
 208 
 209     build_command(COMMAND_LINE_TO_BUILD)
 210     # build_command unconditionally adds -i (ignore errors) for make, and there's
 211     # no reasonable way to turn that off, so we just replace it with -k, which has
 212     # the same effect, except that the return code will indicate that an error occurred.
 213     # See: http://www.cmake.org/cmake/help/v3.0/command/build_command.html
 214     string(REPLACE " -i" " -k" COMMAND_LINE_TO_BUILD ${COMMAND_LINE_TO_BUILD})
 215     file(WRITE
 216         ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/build.sh
 217         "#!/bin/sh\n"
 218         "${COMMAND_LINE_TO_BUILD} $@"
 219     )
 220     file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/build.sh
 221         DESTINATION ${CMAKE_BINARY_DIR}
 222         FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE
 223     )
 224 endif ()
 225