mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Restructure the COFF metadata handling to use the linker section grouping to emit section start/stop markers in the appropriate location. This allows us to lookup the sections statically without having to the walk the entire image structure. Introduce a constructor for PE/COFF binaries. This will ensure that the registration occurs for all modules appropriately. This should resolve rdar://problem/19045112. The registration should occur prior to `DllMain` being invoked from `DllMainCRTStartup`.
190 lines
7.0 KiB
CMake
190 lines
7.0 KiB
CMake
set(swift_runtime_compile_flags ${SWIFT_RUNTIME_CORE_CXX_FLAGS})
|
|
set(swift_runtime_linker_flags ${SWIFT_RUNTIME_CORE_LINK_FLAGS})
|
|
|
|
if(SWIFT_RUNTIME_CLOBBER_FREED_OBJECTS)
|
|
list(APPEND swift_runtime_compile_flags
|
|
"-DSWIFT_RUNTIME_CLOBBER_FREED_OBJECTS=1")
|
|
endif()
|
|
|
|
if(SWIFT_RUNTIME_CRASH_REPORTER_CLIENT)
|
|
list(APPEND swift_runtime_compile_flags
|
|
"-DSWIFT_HAVE_CRASHREPORTERCLIENT=1")
|
|
endif()
|
|
|
|
set(swift_runtime_leaks_sources)
|
|
if(SWIFT_RUNTIME_ENABLE_LEAK_CHECKER)
|
|
list(APPEND swift_runtime_compile_flags
|
|
"-DSWIFT_RUNTIME_ENABLE_LEAK_CHECKER=1")
|
|
set(swift_runtime_leaks_sources Leaks.mm)
|
|
endif()
|
|
|
|
list(APPEND swift_runtime_compile_flags
|
|
"-D__SWIFT_CURRENT_DYLIB=swiftCore")
|
|
|
|
set(swift_runtime_objc_sources
|
|
ErrorObject.mm
|
|
SwiftObject.mm
|
|
SwiftValue.mm
|
|
Reflection.mm
|
|
"${SWIFT_SOURCE_DIR}/lib/Demangling/OldRemangler.cpp"
|
|
"${SWIFT_SOURCE_DIR}/lib/Demangling/Remangler.cpp")
|
|
|
|
set(swift_runtime_sources
|
|
AnyHashableSupport.cpp
|
|
Array.cpp
|
|
Casting.cpp
|
|
CygwinPort.cpp
|
|
Demangle.cpp
|
|
Enum.cpp
|
|
ErrorObjectConstants.cpp
|
|
ErrorObjectNative.cpp
|
|
Errors.cpp
|
|
ErrorDefaultImpls.cpp
|
|
Exclusivity.cpp
|
|
Heap.cpp
|
|
HeapObject.cpp
|
|
ImageInspectionMachO.cpp
|
|
ImageInspectionELF.cpp
|
|
ImageInspectionCOFF.cpp
|
|
KnownMetadata.cpp
|
|
Metadata.cpp
|
|
MetadataLookup.cpp
|
|
MutexPThread.cpp
|
|
MutexWin32.cpp
|
|
Once.cpp
|
|
Portability.cpp
|
|
ProtocolConformance.cpp
|
|
RefCount.cpp
|
|
RuntimeEntrySymbols.cpp
|
|
RuntimeInvocationsTracking.cpp
|
|
"${SWIFT_SOURCE_DIR}/lib/Demangling/OldDemangler.cpp"
|
|
"${SWIFT_SOURCE_DIR}/lib/Demangling/Demangler.cpp"
|
|
"${SWIFT_SOURCE_DIR}/lib/Demangling/NodePrinter.cpp"
|
|
"${SWIFT_SOURCE_DIR}/lib/Demangling/Context.cpp"
|
|
"${SWIFT_SOURCE_DIR}/lib/Demangling/ManglingUtils.cpp"
|
|
"${SWIFT_SOURCE_DIR}/lib/Demangling/Punycode.cpp")
|
|
|
|
# Acknowledge that the following sources are known.
|
|
set(LLVM_OPTIONAL_SOURCES
|
|
MutexPThread.cpp
|
|
MutexWin32.cpp
|
|
CygwinPort.cpp
|
|
ImageInspectionELF.cpp
|
|
StaticBinaryELF.cpp
|
|
SwiftRT-COFF.cpp
|
|
SwiftRT-ELF.cpp
|
|
${swift_runtime_sources}
|
|
${swift_runtime_objc_sources}
|
|
${swift_runtime_leaks_sources})
|
|
|
|
set(swift_runtime_library_compile_flags ${swift_runtime_compile_flags})
|
|
list(APPEND swift_runtime_library_compile_flags -DswiftCore_EXPORTS)
|
|
list(APPEND swift_runtime_library_compile_flags -I${SWIFT_SOURCE_DIR}/include)
|
|
|
|
set(sdk "${SWIFT_HOST_VARIANT_SDK}")
|
|
if(SWIFT_BUILD_STATIC_STDLIB AND "${sdk}" STREQUAL "LINUX")
|
|
list(REMOVE_ITEM swift_runtime_sources ImageInspectionELF.cpp)
|
|
set(static_binary_lnk_file_list)
|
|
string(TOLOWER "${sdk}" lowercase_sdk)
|
|
|
|
# These two libraries are only used with the static swiftcore
|
|
add_swift_library(swiftImageInspectionShared STATIC
|
|
ImageInspectionELF.cpp
|
|
C_COMPILE_FLAGS ${swift_runtime_library_compile_flags}
|
|
LINK_FLAGS ${swift_runtime_linker_flags})
|
|
set_target_properties(swiftImageInspectionShared PROPERTIES
|
|
ARCHIVE_OUTPUT_DIRECTORY "${SWIFTSTATICLIB_DIR}/${lowercase_sdk}")
|
|
|
|
# Generate the static-executable-args.lnk file used for ELF systems (eg linux)
|
|
set(linkfile "${lowercase_sdk}/static-executable-args.lnk")
|
|
add_custom_command_target(swift_static_binary_${sdk}_args
|
|
COMMAND
|
|
"${CMAKE_COMMAND}" -E copy
|
|
"${SWIFT_SOURCE_DIR}/utils/static-executable-args.lnk"
|
|
"${SWIFTSTATICLIB_DIR}/${linkfile}"
|
|
OUTPUT
|
|
"${SWIFTSTATICLIB_DIR}/${linkfile}"
|
|
DEPENDS
|
|
"${SWIFT_SOURCE_DIR}/utils/static-executable-args.lnk")
|
|
|
|
list(APPEND static_binary_lnk_file_list ${swift_static_binary_${sdk}_args})
|
|
swift_install_in_component(stdlib
|
|
FILES "${SWIFTSTATICLIB_DIR}/${linkfile}"
|
|
DESTINATION "lib/swift_static/${lowercase_sdk}")
|
|
add_custom_target(static_binary_magic ALL DEPENDS ${static_binary_lnk_file_list})
|
|
|
|
add_swift_library(swiftImageInspectionShared OBJECT_LIBRARY TARGET_LIBRARY
|
|
ImageInspectionELF.cpp
|
|
C_COMPILE_FLAGS ${swift_runtime_library_compile_flags}
|
|
LINK_FLAGS ${swift_runtime_linker_flags}
|
|
INSTALL_IN_COMPONENT never_install)
|
|
endif()
|
|
|
|
add_swift_library(swiftRuntime OBJECT_LIBRARY TARGET_LIBRARY
|
|
${swift_runtime_sources}
|
|
${swift_runtime_objc_sources}
|
|
${swift_runtime_leaks_sources}
|
|
C_COMPILE_FLAGS ${swift_runtime_library_compile_flags}
|
|
LINK_FLAGS ${swift_runtime_linker_flags}
|
|
INSTALL_IN_COMPONENT never_install)
|
|
|
|
set(ELFISH_SDKS)
|
|
set(COFF_SDKS)
|
|
foreach(sdk ${SWIFT_CONFIGURED_SDKS})
|
|
if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF")
|
|
list(APPEND ELFISH_SDKS ${sdk})
|
|
elseif("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "COFF")
|
|
list(APPEND COFF_SDKS ${sdk})
|
|
endif()
|
|
endforeach()
|
|
|
|
add_swift_library(swiftImageRegistrationObjectELF
|
|
OBJECT_LIBRARY IS_STDLIB IS_STDLIB_CORE
|
|
SwiftRT-ELF.cpp
|
|
C_COMPILE_FLAGS ${SWIFT_RUNTIME_CORE_CXX_FLAGS}
|
|
LINK_FLAGS ${SWIFT_RUNTIME_CORE_LINK_FLAGS}
|
|
TARGET_SDKS ${ELFISH_SDKS}
|
|
INSTALL_IN_COMPONENT none)
|
|
add_swift_library(swiftImageRegistrationObjectCOFF
|
|
OBJECT_LIBRARY IS_STDLIB IS_STDLIB_CORE
|
|
SwiftRT-COFF.cpp
|
|
C_COMPILE_FLAGS ${SWIFT_RUNTIME_CORE_CXX_FLAGS}
|
|
LINK_FLAGS ${SWIFT_RUNTIME_CORE_LINK_FLAGS}
|
|
TARGET_SDKS ${COFF_SDKS}
|
|
INSTALL_IN_COMPONENT none)
|
|
|
|
foreach(sdk ${SWIFT_CONFIGURED_SDKS})
|
|
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
|
|
set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}")
|
|
set(arch_suffix "${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}")
|
|
|
|
if("${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "ELF" OR
|
|
"${SWIFT_SDK_${sdk}_OBJECT_FORMAT}" STREQUAL "COFF")
|
|
# TODO(compnerd) switch to the generator expression when cmake is upgraded
|
|
# to a version which supports it.
|
|
# set(swiftrtObject "$<TARGET_OBJECTS:swiftImageRegistrationObject${SWIFT_SDK_${sdk}_OBJECT_FORMAT}-${arch_suffix}>")
|
|
set(swiftrtObject ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/swiftImageRegistrationObject${SWIFT_SDK_${sdk}_OBJECT_FORMAT}-${arch_suffix}.dir/SwiftRT-${SWIFT_SDK_${sdk}_OBJECT_FORMAT}.cpp${CMAKE_C_OUTPUT_EXTENSION})
|
|
set(swiftrtPath "${SWIFTLIB_DIR}/${arch_subdir}/swiftrt${CMAKE_C_OUTPUT_EXTENSION}")
|
|
|
|
add_custom_command_target(swiftImageRegistration-${arch_suffix}
|
|
COMMAND
|
|
"${CMAKE_COMMAND}" -E copy "${swiftrtObject}" "${swiftrtPath}"
|
|
OUTPUT
|
|
"${swiftrtPath}"
|
|
DEPENDS
|
|
"${swiftrtObject}")
|
|
swift_install_in_component(stdlib
|
|
FILES
|
|
"${swiftrtPath}"
|
|
DESTINATION
|
|
"lib/swift/${arch_subdir}")
|
|
add_dependencies(swift-stdlib-${arch_suffix} ${swiftImageRegistration-${arch_suffix}})
|
|
|
|
add_custom_target(swiftImageRegistration-${arch_suffix}
|
|
ALL DEPENDS
|
|
${swiftImageRegistration-${arch_suffix}})
|
|
endif()
|
|
endforeach()
|
|
endforeach()
|
|
|