diff options
Diffstat (limited to 'cmake/Functions.cmake')
-rw-r--r-- | cmake/Functions.cmake | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake index 89f4cdd39..a5209e260 100644 --- a/cmake/Functions.cmake +++ b/cmake/Functions.cmake @@ -300,7 +300,7 @@ function(get_install_config result) set(${result} "Release" PARENT_SCOPE) elseif("RelWithDebInfo" IN_LIST CMAKE_CONFIGURATION_TYPES) set(${result} "RelWithDebInfo" PARENT_SCOPE) - elseif("Debug" IN_LIST CMAKE_CONFIGURATION_TYPE) + elseif("Debug" IN_LIST CMAKE_CONFIGURATION_TYPES) set(${result} "Debug" PARENT_SCOPE) else() # assume MinSizeRel ? @@ -408,7 +408,18 @@ function(get_copy_of_response_file result target rsp) add_dependencies(${cmakeTarget} ${cmakeTarget}_${rsp}_copy_${config}) endfunction() -function(extend_cmake_target target buildDir completeStatic) +function(add_archiver_options target buildDir completeStatic) + get_target_property(config ${target} CONFIG) + string(TOUPPER ${config} cfg) + get_target_property(ninjaTarget ${target} NINJA_TARGET) + get_target_property(cmakeTarget ${target} CMAKE_TARGET) + set(objects_out "${buildDir}/${cmakeTarget}_objects.o") + add_library(GnObject_${cmakeTarget}_${config} OBJECT IMPORTED GLOBAL) + target_link_libraries(${cmakeTarget} PRIVATE $<$<CONFIG:${config}>:GnObject_${cmakeTarget}_${config}>) + set_property(TARGET GnObject_${cmakeTarget}_${config} PROPERTY IMPORTED_OBJECTS_${cfg} ${objects_out}) +endfunction() + +function(add_linker_options target buildDir completeStatic) get_target_property(config ${target} CONFIG) get_target_property(ninjaTarget ${target} NINJA_TARGET) get_target_property(cmakeTarget ${target} CMAKE_TARGET) @@ -419,6 +430,10 @@ function(extend_cmake_target target buildDir completeStatic) set(libs_rsp "${buildDir}/${ninjaTarget}_libs.rsp") set_target_properties(${cmakeTarget} PROPERTIES STATIC_LIBRARY_OPTIONS "@${objects_rsp}") if(LINUX) + get_gn_arch(cpu ${TEST_architecture_arch}) + if(CMAKE_CROSSCOMPILING AND cpu STREQUAL "arm" AND ${config} STREQUAL "Debug") + target_link_options(${cmakeTarget} PRIVATE "LINKER:--long-plt") + endif() target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${objects_rsp}>") if(NOT completeStatic) target_link_libraries(${cmakeTarget} PRIVATE @@ -429,7 +444,6 @@ function(extend_cmake_target target buildDir completeStatic) target_link_libraries(${cmakeTarget} PRIVATE "$<1:-Wl,--no-fatal-warnings $<$<CONFIG:${config}>:@${libs_rsp}> -Wl,--no-fatal-warnings>" ) - endif() if(MACOS) target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${objects_rsp}>") @@ -440,6 +454,7 @@ function(extend_cmake_target target buildDir completeStatic) endif() if(WIN32) get_copy_of_response_file(objects_rsp ${target} objects) + target_link_options(${cmakeTarget} PRIVATE /DELAYLOAD:mf.dll /DELAYLOAD:mfplat.dll /DELAYLOAD:mfreadwrite.dll) target_link_options(${cmakeTarget} PRIVATE "$<$<CONFIG:${config}>:@${objects_rsp}>") if(NOT completeStatic) get_copy_of_response_file(archives_rsp ${target} archives) @@ -452,7 +467,7 @@ function(extend_cmake_target target buildDir completeStatic) endif() endfunction() -function(add_rsp_command target buildDir completeStatic) +function(add_intermediate_archive target buildDir completeStatic) get_target_property(config ${target} CONFIG) get_target_property(arch ${target} ARCH) get_target_property(ninjaTarget ${target} NINJA_TARGET) @@ -493,13 +508,15 @@ function(add_rsp_command target buildDir completeStatic) ) endfunction() -function(add_ios_rsp_command target buildDir completeStatic) +function(add_intermediate_object target buildDir completeStatic) get_target_property(config ${target} CONFIG) get_target_property(arch ${target} ARCH) get_target_property(ninjaTarget ${target} NINJA_TARGET) get_target_property(cmakeTarget ${target} CMAKE_TARGET) string(TOUPPER ${config} cfg) - get_ios_target_triple_and_sysroot(args ${arch}) + if(IOS) + get_ios_target_triple_and_sysroot(args ${arch}) + endif() set(objects_rsp "${buildDir}/${ninjaTarget}_objects.rsp") set(objects_out "${buildDir}/${cmakeTarget}_objects.o") add_custom_command( @@ -628,8 +645,10 @@ function(get_v8_arch result targetArch hostArch) set(${result} "mipsel" PARENT_SCOPE) elseif(hostArch STREQUAL "mipsel64") set(${result} "mipsel" PARENT_SCOPE) + elseif(hostArch IN_LIST list32) + set(${result} "${hostArch}" PARENT_SCOPE) else() - message(DEBUG "Unsupported architecture: ${hostArch}") + message(FATAL_ERROR "Unsupported architecture: ${hostArch}") endif() else() # assume 64bit target which matches 64bit host @@ -1081,11 +1100,17 @@ function(add_gn_build_aritfacts_to_target cmakeTarget ninjaTarget module buildDi LINK_DEPENDS ${buildDir}/${config}/${arch}/${ninjaTarget}.stamp ) if(QT_IS_MACOS_UNIVERSAL) - add_rsp_command(${target} ${buildDir}/${config}/${arch} ${completeStatic}) + add_intermediate_archive(${target} ${buildDir}/${config}/${arch} ${completeStatic}) elseif(IOS) - add_ios_rsp_command(${target} ${buildDir}/${config}/${arch} ${completeStatic}) + add_intermediate_object(${target} ${buildDir}/${config}/${arch} ${completeStatic}) else() - extend_cmake_target(${target} ${buildDir}/${config}/${arch} ${completeStatic}) + if(MACOS AND QT_FEATURE_static) + # mac archiver does not support @file notation, do intermediate object istead + add_intermediate_object(${target} ${buildDir}/${config}/${arch} ${completeStatic}) + add_archiver_options(${target} ${buildDir}/${config}/${arch} ${completeStatic}) + else() + add_linker_options(${target} ${buildDir}/${config}/${arch} ${completeStatic}) + endif() endif() unset(target) endforeach() |