summaryrefslogtreecommitdiffstats
path: root/cmake/Functions.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/Functions.cmake')
-rw-r--r--cmake/Functions.cmake45
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()