Revision fa136cb5417a554c2b7c85001235e2aace214732 authored by Steven Johnson on 29 August 2023, 16:21:59 UTC, committed by GitHub on 29 August 2023, 16:21:59 UTC
* Fix CMake test for generator_aot_multitarget

* Ensure that multitarget AOT builds have consistent random numbers

If a Generator uses random_float() (or the int or uint versions), and is used in a multitarget build, we weren't resetting the counters for random generation between each subtarget... meaning that each subtarget would get a different random sequence, leading to some ery hard-to-debug test failures when running on different hardware variants. This PR ensures that the relevant counters are all reset before each subtarget is generated, so that each should see the same sequence of random number generation.

* Update CMakeLists.txt

* Update multitarget_aottest.cpp

* Combine float/uint counters
1 parent fe9f0b7
Raw File
TargetExportScript.cmake
cmake_minimum_required(VERSION 3.22)

include(CheckLinkerFlag)

function(target_export_script TARGET)
    set(options)
    set(oneValueArgs LINK_EXE APPLE_LD GNU_LD)
    set(multiValueArgs)
    cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

    get_property(target_type TARGET ${TARGET} PROPERTY TYPE)
    if (NOT target_type MATCHES "(SHARED|MODULE)_LIBRARY")
        # Linker scripts do nothing on non-shared libraries.
        return()
    endif ()

    if (MSVC)
        ## TODO: implement something similar for Windows/link.exe
        # https://github.com/halide/Halide/issues/4651
        return()
    endif ()

    if (XCODE)
        # There is a bug in Xcode where -Xlinker flags in the OTHER_LDFLAGS
        # property creates a bogus dependency on a file named -Xlinker. No
        # idea how this happens. CMake translates the EXPORTED_SYMBOLS_FLAG
        # below to -Xlinker -exported_symbols_list -Xlinker ${ARG_APPLE_LD}
        # which by rights should work, and in fact Xcode prints a link line
        # that DOES work, but the aforementioned bug breaks the check. Going
        # through the "official" Xcode attribute is a reasonable workaround.
        set_property(TARGET "${TARGET}" PROPERTY XCODE_ATTRIBUTE_EXPORTED_SYMBOLS_FILE "${ARG_APPLE_LD}")
        return()
    endif ()

    ## More linkers support the GNU syntax (ld, lld, gold), so try it first.
    set(VERSION_SCRIPT_FLAG "LINKER:--version-script=${ARG_GNU_LD}")
    check_linker_flag(CXX "${VERSION_SCRIPT_FLAG}" LINKER_HAS_FLAG_VERSION_SCRIPT)
    if (LINKER_HAS_FLAG_VERSION_SCRIPT)
        target_link_options(${TARGET} PRIVATE "${VERSION_SCRIPT_FLAG}")
        set_property(TARGET ${TARGET} APPEND PROPERTY LINK_DEPENDS "${ARG_GNU_LD}")
        return()
    endif ()

    ## The Apple linker expects a different flag.
    set(EXPORTED_SYMBOLS_FLAG "LINKER:-exported_symbols_list,${ARG_APPLE_LD}")
    check_linker_flag(CXX "${EXPORTED_SYMBOLS_FLAG}" LINKER_HAS_FLAG_EXPORTED_SYMBOLS_LIST)
    if (LINKER_HAS_FLAG_EXPORTED_SYMBOLS_LIST)
        target_link_options(${TARGET} PRIVATE "${EXPORTED_SYMBOLS_FLAG}")
        set_property(TARGET ${TARGET} APPEND PROPERTY LINK_DEPENDS "${ARG_APPLE_LD}")
        return()
    endif ()

    message(WARNING "Unknown linker! Could not attach Halide linker script.")
endfunction()
back to top