summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/nasm/package.py
blob: 78bc05da254129e056d2fc8cc15044e0c1869fc8 (plain) (blame)
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
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import glob
import os

from spack.package import *


class Nasm(AutotoolsPackage, Package):
    """NASM (Netwide Assembler) is an 80x86 assembler designed for
    portability and modularity. It includes a disassembler as well."""

    homepage = "https://www.nasm.us"
    url = "https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz"
    list_url = "https://www.nasm.us/pub/nasm/releasebuilds"
    list_depth = 1
    tags = ["windows"]

    build_system("autotools", conditional("generic", when="platform=windows"), default="autotools")

    license("BSD-2-Clause")

    version("2.15.05", sha256="9182a118244b058651c576baa9d0366ee05983c4d4ae1d9ddd3236a9f2304997")
    version("2.14.02", sha256="b34bae344a3f2ed93b2ca7bf25f1ed3fb12da89eeda6096e3551fd66adeae9fc")
    version("2.13.03", sha256="23e1b679d64024863e2991e5c166e19309f0fe58a9765622b35bd31be5b2cc99")
    version("2.11.06", sha256="3a72476f3cb45294d303f4d34f20961b15323ac24e84eb41bc130714979123bb")

    # Fix compilation with GCC 8
    # https://bugzilla.nasm.us/show_bug.cgi?id=3392461
    patch(
        "https://src.fedoraproject.org/rpms/nasm/raw/0cc3eb244bd971df81a7f02bc12c5ec259e1a5d6/f/0001-Remove-invalid-pure_func-qualifiers.patch",
        level=1,
        sha256="ac9f315d204afa6b99ceefa1fe46d4eed2b8a23c7315d32d33c0f378d930e950",
        when="@2.13.03 %gcc@8:",
    )

    with when("platform=windows"):
        depends_on("perl")
        patch("msvc.mak.patch", when="@2.15.05")

    conflicts("%intel@:14", when="@2.14:", msg="Intel <= 14 lacks support for C11")

    build_system("autotools", "generic", default="autotools")

    def patch(self):
        # Remove flags not recognized by the NVIDIA compiler
        if self.spec.satisfies("%nvhpc@:20.11"):
            filter_file(
                r'CFLAGS="\$pa_add_cflags__old_cflags -Werror=.*"',
                'CFLAGS="$pa_add_cflags__old_cflags"',
                "configure",
            )
            filter_file(
                r'CFLAGS="\$pa_add_flags__old_flags -Werror=.*"',
                'CFLAGS="$pa_add_flags__old_flags"',
                "configure",
            )


class GenericBuilder(spack.build_systems.generic.GenericBuilder):
    def install(self, pkg, spec, prefix):
        with working_dir(self.stage.source_path, create=True):
            # build NASM with nmake
            touch("asm\\warnings.time")
            nmake("/f", "Mkfiles\\msvc.mak")

            # install manually because the nmake file defines
            # no install target
            # This install tree schema mimics the pattern established
            # by the NASM windows installer
            build_dir = self.stage.source_path
            rdoff_dir = os.path.join(build_dir, "rdoff")
            binaries = glob.glob(os.path.join(build_dir, "*.exe"))
            rdoff = glob.glob(os.path.join(rdoff_dir, "*.exe"))
            rdoff.extend(glob.glob(os.path.join(rdoff_dir, "*.lib")))

            for file in binaries:
                install(file, self.prefix)

            os.makedirs(self.prefix.rdoff)

            for file in rdoff:
                install(file, self.prefix.rdoff)