Jenkinsfile 2.85 KB
Newer Older
Paul's avatar
Paul committed
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

def rocmtestnode(variant, name, body) {
    def image = 'miopen'
    def cmake_build = { compiler, flags ->
        def cmd = """
            rm -rf build
            mkdir build
            cd build
            CXX=${compiler} CXXFLAGS='-Werror' cmake -DCMAKE_CXX_FLAGS_DEBUG='-g -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=undefined' ${flags} .. 
            CTEST_PARALLEL_LEVEL=32 make -j32 check
        """
        echo cmd
        sh cmd
    }
    node(name) {
        stage("checkout ${variant}") {
            env.HSA_ENABLE_SDMA=0 
            checkout scm
        }
        stage("image ${variant}") {
            try {
                docker.build("${image}", "--build-arg .")
            } catch(Exception ex) {
                docker.build("${image}", "--build-arg --no-cache .")

            }
        }
        withDockerContainer(image: image, args: '--device=/dev/kfd --device=/dev/dri --group-add video') {
            timeout(time: 1, unit: 'HOURS') {
                body(cmake_build)
            }
        }
    }
}
@NonCPS
def rocmtest(m) {
    def builders = [:]
    for(e in m) {
        def label = e.key;
        def action = e.value;
        builders[label] = {
            action(label)
        }
    }
    parallel builders
}

@NonCPS
def rocmnode(name, body) {
    def node_name = 'rocmtest || rocm'
    if(name == 'fiji') {
        node_name = 'rocmtest && fiji';
    } else if(name == 'vega') {
        node_name = 'rocmtest && vega';
    } else {
        node_name = name
    }
    return { label ->
        rocmtestnode(label, node_name, body)
    }
}

@NonCPS
def rocmnode(body) {
    rocmnode('rocmtest || rocm', body)
}

// Static checks
rocmtest tidy: rocmnode('rocm') { cmake_build ->
    stage('Clang Tidy') {
        sh '''
            rm -rf build
            mkdir build
            cd build
            CXX='clang++-5.0' cmake .. 
            make -j8 -k analyze
        '''
    }
}, format: rocmnode('rocm') { cmake_build ->
    stage('Clang Format') {
        sh '''
            find . -iname \'*.h\' \
                -o -iname \'*.hpp\' \
                -o -iname \'*.cpp\' \
                -o -iname \'*.h.in\' \
                -o -iname \'*.hpp.in\' \
                -o -iname \'*.cpp.in\' \
                -o -iname \'*.cl\' \
            | grep -v 'build/' \
            | xargs -n 1 -P 1 -I{} -t sh -c \'clang-format-5.0 -style=file {} | diff - {}\'
        '''
    }
}, clang: rocmnode('rocm') { cmake_build ->
    stage('Clang Debug') {
        cmake_build('clang++-5.0', '-DCMAKE_BUILD_TYPE=debug')
    }
    stage('Clang Release') {
        cmake_build('clang++-5.0', '-DCMAKE_BUILD_TYPE=release')
    }
}, gcc: rocmnode('rocm') { cmake_build ->
    stage('GCC Debug') {
        cmake_build('g++-5', '-DCMAKE_BUILD_TYPE=debug')
    }
    stage('GCC Release') {
        cmake_build('g++-5', '-DCMAKE_BUILD_TYPE=release')
    }
}