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