File: HalideTargetHelpers.cmake

package info (click to toggle)
halide 21.0.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 55,752 kB
  • sloc: cpp: 289,334; ansic: 22,751; python: 7,486; makefile: 4,299; sh: 2,508; java: 1,549; javascript: 282; pascal: 207; xml: 127; asm: 9
file content (99 lines) | stat: -rw-r--r-- 3,282 bytes parent folder | download | duplicates (3)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
cmake_minimum_required(VERSION 3.28)

##
# Utilities for manipulating Halide target triples
##

macro(_Halide_target_arch_os arch os)
    string(TOLOWER "${arch}" arch)
    list(TRANSFORM arch REPLACE "^.*(x86|arm|powerpc|hexagon|wasm|riscv).*$" "\\1")
    list(TRANSFORM arch REPLACE "^i.?86.*$" "x86")
    list(TRANSFORM arch REPLACE "^(amd|ia|em)64t?$" "x86")
    list(TRANSFORM arch REPLACE "^ppc(64(le)?)?$" "powerpc")
    list(TRANSFORM arch REPLACE "^aarch(64)?$" "arm")

    string(TOLOWER "${os}" os)
    list(TRANSFORM os REPLACE "^darwin$" "osx")
    list(TRANSFORM os REPLACE "^emscripten$" "wasmrt")

    # Fix up emscripten usage
    if (os STREQUAL "wasmrt" AND arch STREQUAL "x86")
        set(arch "wasm")
    endif ()
endmacro()

function(_Halide_host_target OUTVAR)
    _Halide_target_arch_os("${CMAKE_HOST_SYSTEM_PROCESSOR}" "${CMAKE_HOST_SYSTEM_NAME}")

    cmake_host_system_information(RESULT is_64bit QUERY IS_64BIT)
    if (is_64bit)
        set(bits 64)
    else ()
        set(bits 32)
    endif ()

    set(${OUTVAR} "${arch}-${bits}-${os}" PARENT_SCOPE)
endfunction()

function(_Halide_cmake_target OUTVAR)
    math(EXPR bits "8 * ${CMAKE_SIZEOF_VOID_P}")
    if (CMAKE_OSX_ARCHITECTURES)
        set(${OUTVAR} "")
        foreach (processor IN LISTS CMAKE_OSX_ARCHITECTURES)
            _Halide_target_arch_os("${processor}" "${CMAKE_SYSTEM_NAME}")
            list(APPEND ${OUTVAR} "${arch}-${bits}-${os}")
        endforeach ()
        list(REMOVE_DUPLICATES ${OUTVAR}) # defensive
    else ()
        _Halide_target_arch_os("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_SYSTEM_NAME}")
        set(${OUTVAR} "${arch}-${bits}-${os}")
    endif ()
    set(${OUTVAR} "${${OUTVAR}}" PARENT_SCOPE)
endfunction()

##
# Set Halide `host` and `cmake` meta-target values
##

if (NOT DEFINED Halide_HOST_TARGET)
    _Halide_host_target(Halide_HOST_TARGET)
endif ()

set(Halide_HOST_TARGET "${Halide_HOST_TARGET}"
    CACHE STRING "Halide target triple matching the Halide library")

if (NOT DEFINED Halide_CMAKE_TARGET)
    _Halide_cmake_target(Halide_CMAKE_TARGET)
endif ()

set(Halide_CMAKE_TARGET "${Halide_CMAKE_TARGET}"
    CACHE STRING "Halide target triple matching the CMake target")

##
# Cache variable to control the global target for add_halide_library.
##

if (NOT DEFINED Halide_TARGET)
    if (NOT "$ENV{HL_TARGET}" STREQUAL "")
        set(Halide_TARGET "$ENV{HL_TARGET}")
    elseif (Halide_HOST_TARGET STREQUAL Halide_CMAKE_TARGET)
        set(Halide_TARGET "host")
    else ()
        set(Halide_TARGET "${Halide_CMAKE_TARGET}")
    endif ()
endif ()

set(Halide_TARGET "${Halide_TARGET}"
    CACHE STRING "The default target to use when AOT compiling")

##
# Print the active values of all special target triples.
##

get_property(${CMAKE_FIND_PACKAGE_NAME}_MESSAGE_PRINTED GLOBAL PROPERTY ${CMAKE_FIND_PACKAGE_NAME}_MESSAGE_PRINTED)
if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY AND NOT ${CMAKE_FIND_PACKAGE_NAME}_MESSAGE_PRINTED)
    message(STATUS "Halide 'host' platform triple:   ${Halide_HOST_TARGET}")
    message(STATUS "Halide 'cmake' platform triple:  ${Halide_CMAKE_TARGET}")
    message(STATUS "Halide default AOT target:       ${Halide_TARGET}")
    set_property(GLOBAL PROPERTY ${CMAKE_FIND_PACKAGE_NAME}_MESSAGE_PRINTED 1)
endif ()