diff options
Diffstat (limited to 'tools/profiler/moz.build')
-rw-r--r-- | tools/profiler/moz.build | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/tools/profiler/moz.build b/tools/profiler/moz.build new file mode 100644 index 0000000000..92047997fa --- /dev/null +++ b/tools/profiler/moz.build @@ -0,0 +1,225 @@ +# -*- 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/. + +if CONFIG["MOZ_GECKO_PROFILER"]: + DEFINES["MOZ_REPLACE_MALLOC_PREFIX"] = "profiler" + XPIDL_MODULE = "profiler" + XPIDL_SOURCES += [ + "gecko/nsIProfiler.idl", + ] + EXPORTS += [ + "public/GeckoProfilerReporter.h", + "public/ProfilerChild.h", + "public/ProfilerCodeAddressService.h", + "public/shared-libraries.h", + ] + UNIFIED_SOURCES += [ + "core/PageInformation.cpp", + "core/platform.cpp", + "core/ProfileBuffer.cpp", + "core/ProfileBufferEntry.cpp", + "core/ProfiledThreadData.cpp", + "core/ProfilerBacktrace.cpp", + "core/ProfilerCodeAddressService.cpp", + "core/ProfilerMarkers.cpp", + "gecko/ChildProfilerController.cpp", + "gecko/nsProfilerStartParams.cpp", + "gecko/ProfilerChild.cpp", + "gecko/ProfilerIOInterposeObserver.cpp", + ] + if CONFIG["MOZ_REPLACE_MALLOC"] and CONFIG["MOZ_PROFILER_MEMORY"]: + SOURCES += [ + "core/memory_hooks.cpp", # Non-unified because of order of #includes + ] + + XPCOM_MANIFESTS += [ + "gecko/components.conf", + ] + + if CONFIG["OS_TARGET"] == "Darwin": + # This file cannot be built in unified mode because it includes + # "nsLocalFile.h", which pulls in a system header which uses a type + # called TextRange, which conflicts with mozilla::TextRange due to + # a "using namespace mozilla;" declaration from a different file. + SOURCES += [ + "gecko/nsProfiler.cpp", + ] + else: + UNIFIED_SOURCES += [ + "gecko/nsProfiler.cpp", + ] + + if CONFIG["OS_TARGET"] in ("Android", "Linux", "FreeBSD"): + if CONFIG["CPU_ARCH"] in ("arm", "aarch64", "x86", "x86_64", "mips64"): + UNIFIED_SOURCES += [ + "lul/AutoObjectMapper.cpp", + "lul/LulCommon.cpp", + "lul/LulDwarf.cpp", + "lul/LulDwarfSummariser.cpp", + "lul/LulElf.cpp", + "lul/LulMain.cpp", + "lul/platform-linux-lul.cpp", + ] + # These files cannot be built in unified mode because of name clashes with mozglue headers on Android. + SOURCES += [ + "core/shared-libraries-linux.cc", + ] + if not CONFIG["MOZ_CRASHREPORTER"]: + SOURCES += [ + "/toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc", + "/toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc", + "/toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc", + "/toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc", + ] + if not CONFIG["HAVE_GETCONTEXT"]: + SOURCES += [ + "/toolkit/crashreporter/google-breakpad/src/common/linux/breakpad_getcontext.S" + ] + if CONFIG["CPU_ARCH"] == "x86_64" and CONFIG["OS_TARGET"] == "Linux": + UNIFIED_SOURCES += [ + "core/PowerCounters-linux.cpp", + ] + if CONFIG["CPU_ARCH"] == "arm" and CONFIG["OS_TARGET"] != "FreeBSD": + SOURCES += [ + "core/EHABIStackWalk.cpp", + ] + elif CONFIG["OS_TARGET"] == "Darwin": + UNIFIED_SOURCES += [ + "core/shared-libraries-macos.cc", + ] + if CONFIG["CPU_ARCH"] == "aarch64": + UNIFIED_SOURCES += [ + "core/PowerCounters-mac-arm64.cpp", + ] + if CONFIG["CPU_ARCH"] == "x86_64": + UNIFIED_SOURCES += [ + "core/PowerCounters-mac-amd64.cpp", + ] + elif CONFIG["OS_TARGET"] == "WINNT": + if CONFIG["CC_TYPE"] == "clang-cl": + UNIFIED_SOURCES += [ + "core/PowerCounters-win.cpp", + ] + SOURCES += [ + "core/shared-libraries-win32.cc", + ] + + LOCAL_INCLUDES += [ + "/caps", + "/docshell/base", + "/ipc/chromium/src", + "/mozglue/linker", + "/netwerk/base", + "/netwerk/protocol/http", + "/toolkit/components/jsoncpp/include", + "/toolkit/crashreporter/google-breakpad/src", + "/tools/profiler/core/", + "/tools/profiler/gecko/", + "/xpcom/base", + ] + + if CONFIG["OS_TARGET"] == "Android": + DEFINES["ANDROID_NDK_MAJOR_VERSION"] = CONFIG["ANDROID_NDK_MAJOR_VERSION"] + DEFINES["ANDROID_NDK_MINOR_VERSION"] = CONFIG["ANDROID_NDK_MINOR_VERSION"] + LOCAL_INCLUDES += [ + # We need access to Breakpad's getcontext(3) which is suitable for Android + "/toolkit/crashreporter/google-breakpad/src/common/android/include", + ] + + if CONFIG["MOZ_VTUNE"]: + DEFINES["MOZ_VTUNE_INSTRUMENTATION"] = True + UNIFIED_SOURCES += [ + "core/VTuneProfiler.cpp", + ] + + XPCSHELL_TESTS_MANIFESTS += ["tests/xpcshell/xpcshell.ini"] + MOCHITEST_CHROME_MANIFESTS += ["tests/chrome/chrome.ini"] + BROWSER_CHROME_MANIFESTS += ["tests/browser/browser.ini"] + +UNIFIED_SOURCES += [ + "core/MicroGeckoProfiler.cpp", + "core/ProfilerBindings.cpp", + "core/ProfilerThreadRegistration.cpp", + "core/ProfilerThreadRegistrationData.cpp", + "core/ProfilerThreadRegistry.cpp", + "core/ProfilerUtils.cpp", + "gecko/ProfilerParent.cpp", +] + +IPDL_SOURCES += [ + "gecko/PProfiler.ipdl", + "gecko/ProfilerTypes.ipdlh", +] + +include("/ipc/chromium/chromium-config.mozbuild") + +EXPORTS += [ + "public/ChildProfilerController.h", + "public/GeckoProfiler.h", + "public/MicroGeckoProfiler.h", + "public/ProfilerBindings.h", + "public/ProfilerControl.h", + "public/ProfilerParent.h", + "public/ProfilerRustBindings.h", +] + +EXPORTS.mozilla += [ + "public/ProfileBufferEntrySerializationGeckoExtensions.h", + "public/ProfileJSONWriter.h", + "public/ProfilerCounts.h", + "public/ProfilerLabels.h", + "public/ProfilerMarkers.h", + "public/ProfilerMarkersDetail.h", + "public/ProfilerMarkersPrerequisites.h", + "public/ProfilerMarkerTypes.h", + "public/ProfilerRunnable.h", + "public/ProfilerState.h", + "public/ProfilerThreadPlatformData.h", + "public/ProfilerThreadRegistration.h", + "public/ProfilerThreadRegistrationData.h", + "public/ProfilerThreadRegistrationInfo.h", + "public/ProfilerThreadRegistry.h", + "public/ProfilerThreadSleep.h", + "public/ProfilerThreadState.h", + "public/ProfilerUtils.h", +] + +GeneratedFile( + "rust-api/src/gecko_bindings/profiling_categories.rs", + script="../../mozglue/baseprofiler/build/generate_profiling_categories.py", + entry_point="generate_rust_enums", + inputs=["../../mozglue/baseprofiler/build/profiling_categories.yaml"], +) + +CONFIGURE_SUBST_FILES += [ + "rust-api/extra-bindgen-flags", +] + + +if CONFIG["COMPILE_ENVIRONMENT"]: + CbindgenHeader("profiler_ffi_generated.h", inputs=["rust-api"]) + + EXPORTS.mozilla += [ + "!profiler_ffi_generated.h", + ] + +USE_LIBS += [ + "jsoncpp", +] + +FINAL_LIBRARY = "xul" + +if CONFIG["ENABLE_TESTS"]: + DIRS += ["tests/gtest"] + +if CONFIG["CC_TYPE"] in ("clang", "gcc"): + CXXFLAGS += [ + "-Wno-error=stack-protector", + "-Wno-ignored-qualifiers", # due to use of breakpad headers + ] + +with Files("**"): + BUG_COMPONENT = ("Core", "Gecko Profiler") |