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