summaryrefslogtreecommitdiffstats
path: root/cmake/QtGnConfigHelpers.cmake
blob: 62469c09828f0b0549cb2bb160ecbbbeb38cabd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause

# These are functions aim to create cmake files with configuration needed by GnGen
#  * gn_config_target.cmake
#  * gn_config_c.cmake
#  * gn_config_cxx.cmake
#  * gn_static.cmake

function(get_config_filenames c_config cxx_config static_config target_config)
    set(${target_config} gn_config_target.cmake PARENT_SCOPE)
    set(${cxx_config} gn_config_cxx.cmake PARENT_SCOPE)
    set(${c_config} gn_config_c.cmake PARENT_SCOPE)
    set(${static_config} gn_static.cmake PARENT_SCOPE)
endfunction()

function(create_cxx_configs cmake_target arch)
    get_config_filenames(c_config_file_name cxx_config_file_name static_config_file_name target_config_file_name)
    create_c_config(${cmake_target} ${arch} ${c_config_file_name})
    create_cxx_config(${cmake_target} ${arch} ${cxx_config_file_name})
    create_static_config(${cmake_target} ${arch} ${static_config_file_name})
endfunction()

function(create_cxx_config cmake_target arch config_file_name)
    if(NOT QT_SUPERBUILD AND QT_WILL_INSTALL)
        get_target_property(moc_file_path Qt6::moc IMPORTED_LOCATION)
    else()
        if(CMAKE_CROSSCOMPILING)
            set(moc_file_path "${QT_HOST_PATH}/${INSTALL_LIBEXECDIR}/moc${CMAKE_EXECUTABLE_SUFFIX}")
        else()
            set(moc_file_path "${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR}/moc${CMAKE_EXECUTABLE_SUFFIX}")
        endif()
    endif()
    file(GENERATE
        OUTPUT $<CONFIG>/${arch}/${config_file_name}
        CONTENT "\
            set(GN_INCLUDES \"$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>\")\n\
            set(GN_DEFINES \"$<TARGET_PROPERTY:COMPILE_DEFINITIONS>\")\n\
            set(GN_LINK_OPTIONS \"$<TARGET_PROPERTY:LINK_OPTIONS>\")\n\
            set(GN_CXX_COMPILE_OPTIONS \"$<TARGET_PROPERTY:COMPILE_OPTIONS>\")\n\
            set(GN_MOC_PATH \"${moc_file_path}\")"
#           set(GN_LIBS $<TARGET_PROPERTY:LINK_LIBRARIES>)
        CONDITION $<COMPILE_LANGUAGE:CXX>
        TARGET ${cmake_target}
    )
endfunction()

function(create_static_config cmake_target arch config_file_name)
    list(APPEND libs Png Jpeg Harfbuzz Freetype Zlib)
    foreach(lib IN LISTS libs)
        string(TOUPPER ${lib} out)
        set(lib Qt::${lib}Private)
        list(APPEND contents "set(GN_${out}_INCLUDES \"$<$<STREQUAL:$<TARGET_NAME_IF_EXISTS:${lib}>,${lib}>:$<TARGET_PROPERTY:${lib},INTERFACE_INCLUDE_DIRECTORIES>>\")")
    endforeach()
    list(JOIN contents "\n" contents)
    file(GENERATE
        OUTPUT $<CONFIG>/${arch}/${config_file_name}
        CONTENT "${contents}"
    )
endfunction()

function(create_c_config cmake_target arch config_file_name)
    file(GENERATE
          OUTPUT $<CONFIG>/${arch}/${config_file_name}
          CONTENT "set(GN_C_COMPILE_OPTIONS \"$<TARGET_PROPERTY:COMPILE_OPTIONS>\")"
          CONDITION $<COMPILE_LANGUAGE:C>
          TARGET ${cmake_target})
endfunction()

function(create_gn_target_config target config_file_name)
    get_target_property(element_list ${target} ELEMENTS)
    get_target_property(prefix ${target} PREFIX)
    file(WRITE ${config_file_name}
        "set(PREFIX ${prefix})\nset(ELEMENTS ${element_list})\n"
    )
    foreach(element IN LISTS element_list)
         get_target_property(prop ${target} ${prefix}_${element})
         if(prop)
             file(APPEND ${config_file_name} "set(${prefix}_${element} ${prop})\n")
         endif()
    endforeach()
endfunction()