⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 295294 in webkit


Ignore:
Timestamp:
Jun 6, 2022, 1:24:52 PM (4 years ago)
Author:
don.olmstead@sony.com
Message:

[CMake] Use playstation_module for shared libs
​https://bugs.webkit.org/show_bug.cgi?id=241049

Reviewed by Ross Kirsling.

The playstation_module function determines how to properly load a shared library. It figures out
if a shared library is being used and if so will create a target to copy it to the directory it
will load from. Additionally it exposes a ${target}_LOAD_AT variable that can be used with
dlopen.

  • Source/JavaScriptCore/shell/playstation/Initializer.cpp:
  • Source/WTF/wtf/PlatformPlayStation.cmake:
  • Source/WebCore/PlatformPlayStation.cmake:
  • Source/WebKit/NetworkProcess/EntryPoint/playstation/NetworkProcessMain.cpp:
  • Source/WebKit/WebProcess/EntryPoint/playstation/WebProcessMain.cpp:
  • Source/cmake/OptionsPlayStation.cmake:
  • Tools/MiniBrowser/playstation/CMakeLists.txt:
  • Tools/MiniBrowser/playstation/main.cpp:
  • Tools/TestWebKitAPI/PlatformPlayStation.cmake:
  • Tools/TestWebKitAPI/playstation/main.cpp:

Canonical link: ​https://commits.webkit.org/251340@main

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/shell/playstation/Initializer.cpp

    r282295 r295294  
    4747    loadLibraryOrExit("libJavaScriptCore");
    4848#endif
    49     loadLibraryOrExit("libicu");
     49    loadLibraryOrExit(ICU_LOAD_AT);
    5050}
  • trunk/Source/WTF/wtf/PlatformPlayStation.cmake

    r292406 r295294  
    2929)
    3030
    31 PLAYSTATION_COPY_REQUIREMENTS(WTF_CopySharedLibs
    32     FILES
    33         ${ICU_LIBRARIES}
     31PLAYSTATION_COPY_MODULES(WTF
     32    TARGETS
     33        ICU
    3434)
  • trunk/Source/WebCore/PlatformPlayStation.cmake

    r286922 r295294  
    8585    find_file(${EGL_EXTRA_NAME}_FOUND ${EGL_EXTRA_NAME} PATH_SUFFIXES bin)
    8686    if (${EGL_EXTRA_NAME}_FOUND)
    87         list(APPEND EGL_EXTRAS ${${EGL_EXTRA_NAME}_FOUND})
     87        set(_src ${${EGL_EXTRA_NAME}_FOUND})
     88        get_filename_component(_filename ${_src} NAME)
     89        set(_dst "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${_filename}")
     90
     91        add_custom_command(OUTPUT ${_dst}
     92            COMMAND ${CMAKE_COMMAND} -E copy ${_src} ${_dst}
     93            MAIN_DEPENDENCY ${_src}
     94            VERBATIM
     95        )
     96
     97        list(APPEND EGL_EXTRAS ${_dst})
    8898    endif ()
    8999endforeach ()
    90100
    91 PLAYSTATION_COPY_REQUIREMENTS(WebCore_CopySharedLibs
    92     FILES
    93         ${CURL_LIBRARIES}
    94         ${Cairo_LIBRARIES}
    95         ${EGL_LIBRARIES}
    96         ${EGL_EXTRAS}
    97         ${FREETYPE_LIBRARIES}
    98         ${Fontconfig_LIBRARIES}
    99         ${HarfBuzz_LIBRARIES}
    100         ${JPEG_LIBRARIES}
    101         ${OPENSSL_LIBRARIES}
    102         ${PNG_LIBRARIES}
    103         ${WebKitRequirements_LIBRARY}
    104         ${WebP_LIBRARIES}
     101if (EGL_EXTRAS)
     102    add_custom_target(EGLExtras_Copy ALL DEPENDS ${EGL_EXTRAS})
     103    set_target_properties(EGLExtras_Copy PROPERTIES FOLDER "PlayStation")
     104    list(APPEND WebCore_INTERFACE_DEPENDENCIES EGLExtras_Copy)
     105endif ()
     106
     107PLAYSTATION_COPY_MODULES(WebCore
     108    TARGETS
     109        CURL
     110        Cairo
     111        EGL
     112        Fontconfig
     113        Freetype
     114        HarfBuzz
     115        JPEG
     116        OpenSSL
     117        PNG
     118        WebKitRequirements
     119        WebP
    105120)
  • trunk/Source/WebKit/NetworkProcess/EntryPoint/playstation/NetworkProcessMain.cpp

    r282295 r295294  
    5252        exit(EXIT_FAILURE);
    5353    }
    54     loadLibraryOrExit("libcurl");
    55     loadLibraryOrExit("libicu");
    56     loadLibraryOrExit("libSceNKWebKitRequirements");
     54    loadLibraryOrExit(CURL_LOAD_AT);
     55    loadLibraryOrExit(ICU_LOAD_AT);
     56    loadLibraryOrExit(WebKitRequirements_LOAD_AT);
    5757#if !ENABLE(STATIC_JSC)
    5858    loadLibraryOrExit("libJavaScriptCore");
  • trunk/Source/WebKit/WebProcess/EntryPoint/playstation/WebProcessMain.cpp

    r282295 r295294  
    4848    }
    4949
    50     loadLibraryOrExit("libpng16");
    51     loadLibraryOrExit("libicu");
    52     loadLibraryOrExit("libfreetype");
    53     loadLibraryOrExit("libfontconfig");
    54     loadLibraryOrExit("libharfbuzz");
    55     loadLibraryOrExit("libcairo");
    56     loadLibraryOrExit("libSceNKWebKitRequirements");
     50    loadLibraryOrExit(PNG_LOAD_AT);
     51    loadLibraryOrExit(ICU_LOAD_AT);
     52    loadLibraryOrExit(Freetype_LOAD_AT);
     53    loadLibraryOrExit(Fontconfig_LOAD_AT);
     54    loadLibraryOrExit(HarfBuzz_LOAD_AT);
     55    loadLibraryOrExit(Cairo_LOAD_AT);
     56    loadLibraryOrExit(WebKitRequirements_LOAD_AT);
    5757#if !ENABLE(STATIC_JSC)
    5858    loadLibraryOrExit("libJavaScriptCore");
  • trunk/Source/cmake/OptionsPlayStation.cmake

    r294906 r295294  
    77set(CMAKE_CONFIGURATION_TYPES "Debug" "Release")
    88
     9include(PlayStationModule)
    910include(Sign)
    1011
    … …  
    4142
    4243set(USE_WPE_BACKEND_PLAYSTATION OFF)
     44set(PlayStationModule_TARGETS ICU::uc)
    4345
    4446if (ENABLE_WEBCORE)
    … …  
    4951        ProcessLauncher
    5052        SQLite3
     53        WebKitResources
    5154        ZLIB
    5255    )
    … …  
    5962
    6063        SET_AND_EXPOSE_TO_BUILD(USE_WPE_BACKEND_PLAYSTATION ON)
     64
     65        list(APPEND PlayStationModule_TARGETS WPE::PlayStation)
    6166    else ()
    6267        list(APPEND WebKitRequirements_COMPONENTS libwpe)
    … …  
    7984    find_package(Threads REQUIRED)
    8085    find_package(WebP REQUIRED COMPONENTS demux)
     86
     87    list(APPEND PlayStationModule_TARGETS
     88        CURL::libcurl
     89        Cairo::Cairo
     90        Fontconfig::Fontconfig
     91        Freetype::Freetype
     92        HarfBuzz::HarfBuzz
     93        ICU::uc
     94        OpenSSL::SSL
     95        PNG::PNG
     96        WebKitRequirements::WebKitResources
     97    )
    8198endif ()
    8299
    … …  
    206223endif ()
    207224
     225if (ENABLE_MINIBROWSER)
     226    find_library(TOOLKIT_LIBRARY ToolKitten)
     227    if (NOT TOOLKIT_LIBRARY)
     228        message(FATAL_ERROR "ToolKit library required to run MiniBrowser")
     229    endif ()
     230endif ()
     231
    208232# Create a shared JavaScriptCore with WTF and bmalloc exposed through it.
    209233#
    … …  
    253277        ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ebootparam.ini
    254278)
     279set_target_properties(playstation_tools_copy PROPERTIES FOLDER "PlayStation")
    255280
    256281macro(WEBKIT_EXECUTABLE _target)
    … …  
    269294endmacro()
    270295
    271 set_property(GLOBAL PROPERTY playstation_copied_requirements)
    272 
    273 function(PLAYSTATION_COPY_REQUIREMENTS target_name)
    274     set(oneValueArgs PREFIX DESTINATION)
    275     set(multiValueArgs FILES)
    276     cmake_parse_arguments(opt "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    277     if (opt_PREFIX)
    278         set(prefix ${opt_PREFIX})
    279     else ()
    280         set(prefix ${WEBKIT_LIBRARIES_DIR})
    281     endif ()
    282     if (opt_DESTINATION)
    283         set(destination ${opt_DESTINATION})
    284     else ()
    285         set(destination ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
    286     endif ()
    287 
    288     set(files_to_copy)
    289     list(REMOVE_DUPLICATES opt_FILES)
    290     foreach (file IN LISTS opt_FILES)
    291         if (NOT (${file} MATCHES ".*_stub_weak\.a" OR
    292                  ${file} MATCHES ".*\.sprx" OR
    293                  ${file} MATCHES ".*\.elf" OR
    294                  ${file} MATCHES ".*\.self"))
    295             continue()
    296         endif ()
    297         file(RELATIVE_PATH _relative ${prefix} ${file})
    298         if (NOT ${_relative} MATCHES "^\.\./.*")
    299             get_filename_component(lib ${file} NAME)
    300             list(APPEND files_to_copy ${lib})
     296macro(PLAYSTATION_MODULES)
     297    set(oneValueArgs DESTINATION)
     298    set(multiValueArgs TARGETS)
     299    cmake_parse_arguments(opt "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
     300
     301    foreach (_target IN LISTS opt_TARGETS)
     302        string(REGEX MATCH "^(.+)::(.+)$" _is_stub "${_target}")
     303        set(_target_name ${CMAKE_MATCH_1})
     304        playstation_module(${_target_name} TARGET ${_target} FOLDER "PlayStation")
     305
     306        if (${_target_name}_LOAD_AT)
     307            EXPOSE_STRING_VARIABLE_TO_BUILD(${_target_name}_LOAD_AT)
    301308        endif ()
    302309    endforeach ()
    303 
    304     set(dst_requirements)
    305     get_property(copied_requirements GLOBAL PROPERTY playstation_copied_requirements)
    306     foreach (basefilename IN LISTS files_to_copy)
    307         string(REPLACE "_stub_weak.a" ".sprx" filename ${basefilename})
    308         set(src_file "${prefix}/bin/${filename}")
    309         list(FIND copied_requirements ${src_file} found)
    310         if (${found} GREATER_EQUAL 0)
    311             continue()
     310endmacro()
     311
     312macro(PLAYSTATION_COPY_MODULES _target_name)
     313    set(multiValueArgs TARGETS)
     314    cmake_parse_arguments(opt "" "" "${multiValueArgs}" ${ARGN})
     315
     316    foreach (_target IN LISTS opt_TARGETS)
     317        if (TARGET ${_target}_CopyModule)
     318            list(APPEND ${_target_name}_INTERFACE_DEPENDENCIES ${_target}_CopyModule)
    312319        endif ()
    313         if (NOT EXISTS ${src_file})
    314             continue()
    315         endif ()
    316         list(APPEND copied_requirements ${src_file})
    317         set(dst_file "${destination}/${filename}")
    318         add_custom_command(OUTPUT ${dst_file}
    319             COMMAND ${CMAKE_COMMAND} -E copy ${src_file} ${dst_file}
    320             MAIN_DEPENDENCY ${file}
    321             VERBATIM
    322         )
    323         list(APPEND dst_requirements ${dst_file})
    324320    endforeach ()
    325     add_custom_target(${target_name} ALL DEPENDS ${dst_requirements})
    326     set_property(GLOBAL PROPERTY playstation_copied_requirements ${copied_requirements} ${dst_requirements})
    327 endfunction()
     321endmacro()
     322
     323PLAYSTATION_MODULES(TARGETS ${PlayStationModule_TARGETS})
     324
     325# These should be made into proper CMake targets
     326if (EGL_LIBRARIES)
     327    playstation_module(EGL TARGET ${EGL_LIBRARIES} FOLDER "PlayStation")
     328    if (EGL_LOAD_AT)
     329        EXPOSE_STRING_VARIABLE_TO_BUILD(EGL_LOAD_AT)
     330    endif ()
     331endif ()
     332
     333if (TOOLKIT_LIBRARY)
     334    playstation_module(ToolKitten TARGET ${TOOLKIT_LIBRARY} FOLDER "PlayStation")
     335    if (ToolKitten_LOAD_AT)
     336        EXPOSE_STRING_VARIABLE_TO_BUILD(ToolKitten_LOAD_AT)
     337    endif ()
     338endif ()
    328339
    329340check_symbol_exists(memmem string.h HAVE_MEMMEM)
  • trunk/Tools/MiniBrowser/playstation/CMakeLists.txt

    r277660 r295294  
    11find_library(TOOLKIT_LIBRARY ToolKitten)
    2 
    3 PLAYSTATION_COPY_REQUIREMENTS(MiniBrowser_CopySharedLibs
    4     FILES ${TOOLKIT_LIBRARY}
    5 )
     2set(MiniBrowser_DEPENDENCIES ToolKitten_CopyModule)
    63
    74set(MiniBrowser_PRIVATE_INCLUDE_DIRECTORIES
    85    ${CMAKE_BINARY_DIR}
    9     "${TOOLS_DIR}/playstation/"
    106)
    117
    … …  
    2319    ${C_STD_LIBRARY}
    2420    ${KERNEL_LIBRARY}
     21    ${TOOLKIT_LIBRARY}
     22)
     23set(MiniBrowser_FRAMEWORKS WebKit)
    2524
    26     ${TOOLKIT_LIBRARY}
    27 
    28     WebKit::WebKit
    29 )
    30 
    31 set(PLAYSTATION_MiniBrowser_REQUIRED_SHARED_LIBRARIES
    32     libToolKitten
    33     libcairo
    34     libfontconfig
    35     libfreetype
    36     libharfbuzz
    37     libicu
    38     libpng16
    39 )
    40 
    41 link_directories(${WEBKIT_LIBRARIES_DIR}/lib)
    4225WEBKIT_EXECUTABLE_DECLARE(MiniBrowser)
    4326WEBKIT_EXECUTABLE(MiniBrowser)
    44 
    45 # MiniBrowser won't work without these processes
    46 add_dependencies(MiniBrowser WebProcess NetworkProcess)
    4727
    4828target_link_options(MiniBrowser PRIVATE -Wl,--no-demangle)
  • trunk/Tools/MiniBrowser/playstation/main.cpp

    r287985 r295294  
    4949    setenv_np("WebInspectorServerPort", "868", 1);
    5050
    51     loadLibraryOrExit("libpng16");
    52     loadLibraryOrExit("libicu");
    53     loadLibraryOrExit("libfontconfig");
    54     loadLibraryOrExit("libfreetype");
    55     loadLibraryOrExit("libharfbuzz");
    56     loadLibraryOrExit("libcairo");
    57     loadLibraryOrExit("libToolKitten");   
    58     loadLibraryOrExit("libSceNKWebKitRequirements");
     51    loadLibraryOrExit(PNG_LOAD_AT);
     52    loadLibraryOrExit(ICU_LOAD_AT);
     53    loadLibraryOrExit(Fontconfig_LOAD_AT);
     54    loadLibraryOrExit(Freetype_LOAD_AT);
     55    loadLibraryOrExit(HarfBuzz_LOAD_AT);
     56    loadLibraryOrExit(Cairo_LOAD_AT);
     57    loadLibraryOrExit(ToolKitten_LOAD_AT);
     58    loadLibraryOrExit(WebKitRequirements_LOAD_AT);
    5959#if !(defined(ENABLE_STATIC_JSC) && ENABLE_STATIC_JSC)
    6060    loadLibraryOrExit("libJavaScriptCore");
  • trunk/Tools/TestWebKitAPI/PlatformPlayStation.cmake

    r285061 r295294  
    1010    generic/UtilitiesGeneric.cpp
    1111)
     12list(APPEND TestWTF_PRIVATE_INCLUDE_DIRECTORIES
     13    ${WEBKIT_LIBRARIES_DIR}/include
     14)
    1215
    1316list(APPEND TestJavaScriptCore_SOURCES
    1417    ${test_main_SOURCES}
    1518)
     19list(APPEND TestJavaScriptCore_PRIVATE_INCLUDE_DIRECTORIES
     20    ${WEBKIT_LIBRARIES_DIR}/include
     21)
    1622
    1723list(APPEND TestWebCore_SOURCES
    1824    ${test_main_SOURCES}
     25)
     26list(APPEND TestWebCore_PRIVATE_INCLUDE_DIRECTORIES
     27    ${WEBKIT_LIBRARIES_DIR}/include
    1928)
    2029
    … …  
    3645        playstation/PlatformUtilitiesPlayStation.cpp
    3746        playstation/PlatformWebViewPlayStation.cpp
     47    )
     48    list(APPEND TestWebKit_PRIVATE_INCLUDE_DIRECTORIES
     49        ${WEBKIT_LIBRARIES_DIR}/include
    3850    )
    3951
  • trunk/Tools/TestWebKitAPI/playstation/main.cpp

    r282295 r295294  
    2626#include "config.h"
    2727#include "TestsController.h"
    28 #include "process-initialization/nk-testwebkitapi.h"
    2928#include <dlfcn.h>
     29#include <process-initialization/nk-testwebkitapi.h>
    3030
    3131static void loadLibraryOrExit(const char* name)
    … …  
    3939int main(int argc, char** argv)
    4040{
    41     loadLibraryOrExit("libicu");
     41    loadLibraryOrExit(ICU_LOAD_AT);
    4242#if defined(BUILDING_TestWebCore) || defined(BUILDING_TestWebKit)
    43     loadLibraryOrExit("libpng16");
    44     loadLibraryOrExit("libfontconfig");
    45     loadLibraryOrExit("libfreetype");
    46     loadLibraryOrExit("libharfbuzz");
    47     loadLibraryOrExit("libcairo");
    48     loadLibraryOrExit("libSceNKWebKitRequirements");
     43    loadLibraryOrExit(PNG_LOAD_AT);
     44    loadLibraryOrExit(Fontconfig_LOAD_AT);
     45    loadLibraryOrExit(Freetype_LOAD_AT);
     46    loadLibraryOrExit(HarfBuzz_LOAD_AT);
     47    loadLibraryOrExit(Cairo_LOAD_AT);
     48    loadLibraryOrExit(WebKitRequirements_LOAD_AT);
    4949#endif
    5050#if defined(BUILDING_TestWebCore) || defined(BUILDING_TestWebKit) || defined(BUILDING_TestJavaScriptCore)
    … …  
    5454#endif
    5555#if defined(BUILDING_TestWebKit)
    56     if (!((dlopen("libcrypto", RTLD_NOW) && dlopen("libssl", RTLD_NOW)) || dlopen("LibreSSL", RTLD_NOW))) {
    57         fprintf(stderr, "Failed to load SSL library.\n");
    58         exit(EXIT_FAILURE);
    59     }
    60     loadLibraryOrExit("libcurl");
     56    loadLibraryOrExit(OpenSSL_LOAD_AT);
     57    loadLibraryOrExit(CURL_LOAD_AT);
    6158    loadLibraryOrExit("libWebKit");
    6259#endif
Note: See TracChangeset for help on using the changeset viewer.