File: help_package.cmake

package info (click to toggle)
amdsmi 6.1.2%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 4,744 kB
  • sloc: cpp: 30,276; python: 15,627; ansic: 6,319; sh: 586; makefile: 21
file content (151 lines) | stat: -rw-r--r-- 6,563 bytes parent folder | download
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# This module provides common functions used for building
# and packaging ROCm projects

option(CMAKE_VERBOSE_MAKEFILE "Enable verbose output" ON)
option(CMAKE_EXPORT_COMPILE_COMMANDS "Export compile commands for linters and autocompleters" ON)

function(generic_add_rocm)
    set(ROCM_DIR
        "/opt/rocm"
        CACHE STRING "ROCm directory.")
    if(DEFINED ENV{ROCM_RPATH} AND NOT DEFINED LIB_RUNPATH)
        set(LIB_RUNPATH "\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/../lib64" PARENT_SCOPE)
    endif()

    set(CMAKE_INSTALL_PREFIX ${ROCM_DIR} CACHE STRING "Default installation directory.")
    set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE STRING "Default packaging prefix.")
    # add package search paths
    set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} /usr/local PARENT_SCOPE)
    set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /usr/lib64 /usr/lib/x86_64-linux-gnu PARENT_SCOPE)
endfunction()

function(generic_package)
    # Used by test and example CMakeLists
    set(SHARE_INSTALL_PREFIX "share/${CMAKE_PROJECT_NAME}" CACHE STRING "Tests and Example install directory")

    if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.4.0)
        message("Compiler version is " ${CMAKE_CXX_COMPILER_VERSION})
        message(FATAL_ERROR "Require at least gcc-5.4.0")
    endif()

    if("${CMAKE_BUILD_TYPE}" STREQUAL Release)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2" PARENT_SCOPE)
    else()
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb -O0 -DDEBUG" PARENT_SCOPE)
    endif()

    # Add address sanitizer
    # derived from:
    # https://github.com/RadeonOpenCompute/ROCm-OpenCL-Runtime/blob/e176056061bf11fdd98b58dd57deb4ac5625844d/amdocl/CMakeLists.txt#L27
    if(${ADDRESS_SANITIZER})
        set(ASAN_COMPILER_FLAGS "-fno-omit-frame-pointer -fsanitize=address")
        set(ASAN_LINKER_FLAGS "-fsanitize=address")

        if(BUILD_SHARED_LIBS)
            set(ASAN_COMPILER_FLAGS "${ASAN_COMPILER_FLAGS} -shared-libsan")
            set(ASAN_LINKER_FLAGS "${ASAN_LINKER_FLAGS} -shared-libsan")
        else()
            set(ASAN_LINKER_FLAGS "${ASAN_LINKER_FLAGS} -static-libsan")
        endif()

        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ASAN_COMPILER_FLAGS}" PARENT_SCOPE)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ASAN_COMPILER_FLAGS}" PARENT_SCOPE)
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ASAN_LINKER_FLAGS}" PARENT_SCOPE)
        set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${ASAN_LINKER_FLAGS}" PARENT_SCOPE)
    else()
        ## Security breach mitigation flags
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFORTIFY_SOURCE=2 -fstack-protector-all -Wcast-align" PARENT_SCOPE)
        ## More security breach mitigation flags
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-z,noexecstack -Wl,-znoexecheap -Wl,-z,relro" PARENT_SCOPE)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wtrampolines -Wl,-z,now" PARENT_SCOPE)
    endif()

    # Clang does not set the build-id
    # similar to if(NOT CMAKE_COMPILER_IS_GNUCC)
    if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id=sha1" PARENT_SCOPE)
        set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1" PARENT_SCOPE)
    endif()

    # configure packaging
    # cpack version is populated with CMAKE_PROJECT_VERSION implicitly
    set(CPACK_PACKAGE_NAME
        ${CMAKE_PROJECT_NAME}
        CACHE STRING "")
    set(CPACK_PACKAGE_VENDOR
        "Advanced Micro Devices, Inc."
        CACHE STRING "")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
        "Placeholder Tool"
        CACHE STRING "")
    set(CPACK_PACKAGE_DESCRIPTION
        "This package contains the AMD ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}."
        CACHE STRING "")
    set(CPACK_PACKAGING_INSTALL_PREFIX
        "${CMAKE_INSTALL_PREFIX}"
        CACHE STRING "Default packaging prefix.")
    set(CPACK_RESOURCE_FILE_LICENSE
        "${CMAKE_CURRENT_SOURCE_DIR}/License.txt"
        CACHE STRING "")
    set(CPACK_RPM_PACKAGE_LICENSE
        "MIT"
        CACHE STRING "")
    set(CPACK_GENERATOR
        "DEB;RPM"
        CACHE STRING "Default packaging generators.")
    set(CPACK_DEB_COMPONENT_INSTALL ON PARENT_SCOPE)
    set(CPACK_RPM_COMPONENT_INSTALL ON PARENT_SCOPE)
    mark_as_advanced(CPACK_PACKAGE_NAME CPACK_PACKAGE_VENDOR CPACK_PACKAGE_CONTACT CPACK_PACKAGE_DESCRIPTION_SUMMARY
        CPACK_PACKAGE_DESCRIPTION CPACK_RESOURCE_FILE_LICENSE CPACK_RPM_PACKAGE_LICENSE CPACK_GENERATOR)

    # Debian package specific variables
    if(DEFINED ENV{CPACK_DEBIAN_PACKAGE_RELEASE})
        set(CPACK_DEBIAN_PACKAGE_RELEASE $ENV{CPACK_DEBIAN_PACKAGE_RELEASE} PARENT_SCOPE)
    else()
        set(CPACK_DEBIAN_PACKAGE_RELEASE "local" PARENT_SCOPE)
    endif()
    message("Using CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_DEBIAN_PACKAGE_RELEASE}")
    set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" PARENT_SCOPE)

    # RPM package specific variables
    if(DEFINED ENV{CPACK_RPM_PACKAGE_RELEASE})
        set(CPACK_RPM_PACKAGE_RELEASE $ENV{CPACK_RPM_PACKAGE_RELEASE} PARENT_SCOPE)
    else()
        set(CPACK_RPM_PACKAGE_RELEASE "local" PARENT_SCOPE)
    endif()
    message("Using CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_PACKAGE_RELEASE}")
    set(CPACK_RPM_FILE_NAME "RPM-DEFAULT" PARENT_SCOPE)
    set(CPACK_RPM_PACKAGE_AUTOREQ 0 PARENT_SCOPE)
    set(CPACK_RPM_PACKAGE_AUTOPROV 0 PARENT_SCOPE)
    list(
        APPEND
        CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
        "/lib"
        "/usr/sbin"
        "/lib/systemd"
        "/lib/systemd/system"
        "/usr"
        "/opt")

    # PACKAGE-tests need PACKAGE
    set(CPACK_DEBIAN_TESTS_PACKAGE_DEPENDS "${CPACK_PACKAGE_NAME}" PARENT_SCOPE)
    set(CPACK_RPM_TESTS_PACKAGE_REQUIRES "${CPACK_PACKAGE_NAME}" PARENT_SCOPE)

    # Treat runtime group as package base.
    # Without it - the base package would be named 'rdc-runtime'
    # resulting in rdc-runtime*.deb and rdc-runtime*.rpm
    set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${CPACK_PACKAGE_NAME}" PARENT_SCOPE)
    set(CPACK_RPM_RUNTIME_PACKAGE_NAME "${CPACK_PACKAGE_NAME}" PARENT_SCOPE)
endfunction()

# this function goes after 'include(CPack)'
function(generic_package_post)
    # PACKAGE package, no postfix
    cpack_add_component_group("runtime")
    cpack_add_component(dev GROUP runtime)
    cpack_add_component(unspecified GROUP runtime)

    # PACKAGE-tests package, -tests postfix
    cpack_add_component_group("tests")
    cpack_add_component(tests GROUP tests)
endfunction()