# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

Library("winlauncher-freestanding")

FORCE_STATIC_LIB = True

# Our patched NtMapViewOfSection can be called before the process's import
# table is populated.  Don't let the compiler insert any instrumentation
# that might call an import.
NO_PGO = True

UNIFIED_SOURCES += [
    "DllBlocklist.cpp",
    "LoaderPrivateAPI.cpp",
    "ModuleLoadFrame.cpp",
    "SharedSection.cpp",
]

# This library must be compiled in a freestanding environment, as its code must
# not assume that it has access to any runtime libraries.
if CONFIG["CC_TYPE"] == "clang-cl":
    CXXFLAGS += ["-Xclang"]

CXXFLAGS += [
    "-ffreestanding",
]

# Forcibly include Freestanding.h into all source files in this library.
if CONFIG["CC_TYPE"] == "clang-cl":
    CXXFLAGS += ["-FI"]
else:
    CXXFLAGS += ["-include"]

CXXFLAGS += [SRCDIR + "/Freestanding.h"]

OS_LIBS += [
    "ntdll",
    "ntdll_freestanding",
]

if CONFIG["COMPILE_ENVIRONMENT"] and CONFIG["LLVM_DLLTOOL"]:
    GeneratedFile(
        "%sntdll_freestanding.%s" % (CONFIG["LIB_PREFIX"], CONFIG["LIB_SUFFIX"]),
        script="gen_ntdll_freestanding_lib.py",
        inputs=["ntdll_freestanding.def"],
        flags=[CONFIG["LLVM_DLLTOOL"]] + CONFIG["LLVM_DLLTOOL_FLAGS"],
    )

DisableStlWrapping()

with Files("**"):
    BUG_COMPONENT = ("Firefox", "Launcher Process")
