chrome-devtools-frontend
Version:
Chrome DevTools UI
169 lines (138 loc) • 5.82 kB
Plain Text
# Copyright 2023 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
set(CXX_DEBUGGING_BUILD_REVISION 0 CACHE STRING "Project build revision")
set(CXX_DEBUGGING_BUILD_PATCH 0 CACHE STRING "Project build patch")
cmake_minimum_required(VERSION 3.16)
cmake_policy(SET CMP0048 NEW)
project(DevToolsCXXDebuggingExtension VERSION 0.2.${CXX_DEBUGGING_BUILD_REVISION}.${CXX_DEBUGGING_BUILD_PATCH} LANGUAGES CXX)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 17)
set(REPO_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../..)
set(THIRD_PARTY_DIR ${PROJECT_SOURCE_DIR}/third_party)
set(DEVTOOLS_SOURCE_DIR ${REPO_SOURCE_DIR})
set(CXX_DEBUGGING_GEN_DIR ${PROJECT_BINARY_DIR}/gen)
set(CXX_DEBUGGING_BINARY_DIR ${PROJECT_BINARY_DIR}/bin)
set(CXX_DEBUGGING_SOURCE_DIR ${PROJECT_SOURCE_DIR})
option(CXX_DEBUGGING_USE_SANITIZERS "Enable sanitizers" OFF)
# Compile typescript sources
find_program(TS_COMPILER tsc PATHS ${DEVTOOLS_SOURCE_DIR}/node_modules/.bin REQUIRED NO_DEFAULT_PATH)
set(TS_COMPILER_ARGS -p ${CMAKE_CURRENT_SOURCE_DIR} --outDir ${PROJECT_BINARY_DIR})
exec_program(${TS_COMPILER} ${CMAKE_CURRENT_SOURCE_DIR}
ARGS ${TS_COMPILER_ARGS} --listFiles
OUTPUT_VARIABLE TS_COMPILER_INPUTS
RETURN_VALUE TS_COMPILER_RETVAL)
if (NOT ${TS_COMPILER_RETVAL} EQUAL 0)
message(FATAL_ERROR "Running tsc failed:\n${TS_COMPILER_INPUTS}")
endif()
string(REPLACE "\n" ";" TS_COMPILER_INPUTS ${TS_COMPILER_INPUTS})
set(TS_COMPILER_OUTPUTS)
foreach(tsc_input IN LISTS TS_COMPILER_INPUTS)
get_filename_component(ext ${tsc_input} EXT)
if (NOT ext MATCHES ".d.ts$")
file(RELATIVE_PATH rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${tsc_input})
get_filename_component(basename ${rel_path} NAME_WE)
get_filename_component(dirname ${rel_path} DIRECTORY)
list(APPEND TS_COMPILER_OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/${dirname}/${basename}.js)
endif()
endforeach()
add_custom_command(OUTPUT ${TS_COMPILER_OUTPUTS}
COMMAND ${DEVTOOLS_SOURCE_DIR}/third_party/node/node.py --output
${TS_COMPILER} ${TS_COMPILER_ARGS}
COMMENT "Compiling Typescript"
DEPENDS ${TS_COMPILER_INPUTS} tsconfig.json)
add_custom_target(TypescriptOutput DEPENDS ${TS_COMPILER_OUTPUTS})
option(CXX_DEBUGGING_ENABLE_DWARF5 "Enable -gdwarf-5 for emitting DWARF5" OFF)
if(CXX_DEBUGGING_ENABLE_DWARF5)
add_compile_options(-gdwarf-5)
add_link_options(-gdwarf-5)
endif()
option(CXX_DEBUGGING_ENABLE_PUBNAMES "Enable -gpubnames for emitting a DWARF index" OFF)
if(CXX_DEBUGGING_ENABLE_PUBNAMES)
add_compile_options(-gpubnames)
add_link_options(-gpubnames)
endif()
# Build LLVM dependencies.
set(LLVM_TARGETS_TO_BUILD "WebAssembly" CACHE STRING "")
set(LLVM_ENABLE_PROJECTS "clang;lldb" CACHE STRING "")
set(LLDB_INCLUDE_TESTS "OFF" CACHE STRING "")
set(CLANG_INCLUDE_TESTS "OFF" CACHE STRING "")
if (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
set(CXX_DEBUGGING_BUILD_WASM TRUE)
else()
set(CXX_DEBUGGING_BUILD_WASM FALSE)
endif()
if (CXX_DEBUGGING_BUILD_WASM)
set(LLVM_ENABLE_RTTI "ON" CACHE STRING "")
set(LLVM_ENABLE_THREADS "OFF" CACHE STRING "")
else()
set(LLVM_ON_WIN32 0)
set(LLVM_ON_UNIX 1)
endif()
if (CXX_DEBUGGING_BUILD_WASM)
link_libraries(-sWASM_BIGINT)
if (NOT CMAKE_BUILD_TYPE STREQUAL "Release")
link_libraries(
-sREVERSE_DEPS=all
)
endif()
endif()
if (CXX_DEBUGGING_USE_SANITIZERS)
set(LLVM_USE_SANITIZER "Address;Undefined" CACHE STRING "")
else()
set(LLVM_USE_SANITIZER "")
endif()
add_subdirectory(${THIRD_PARTY_DIR}/llvm/src/llvm ${CMAKE_CURRENT_BINARY_DIR}/third_party/llvm/src/llvm)
set_property(DIRECTORY ${THIRD_PARTY_DIR}/llvm/src/llvm PROPERTY EXCLUDE_FROM_ALL TRUE)
if (CXX_DEBUGGING_BUILD_WASM)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_options(clangCodeGen PRIVATE -O2)
target_compile_options(obj.clangCodeGen PRIVATE -O2)
endif()
endif()
# Required to enable llvm option parsing
include(${THIRD_PARTY_DIR}/llvm/src/llvm/cmake/modules/DetermineGCCCompatible.cmake)
macro(copy_file INPUT OUTPUT)
get_filename_component(ABS_INPUT ${INPUT} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
get_filename_component(ABS_OUTPUT ${OUTPUT} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_BINARY_DIR})
add_custom_command(OUTPUT ${OUTPUT}
DEPENDS ${INPUT}
COMMAND ${CMAKE_COMMAND} -E copy ${ABS_INPUT} ${ABS_OUTPUT}
)
endmacro()
function(fix_sysroot TARGET)
if (CMAKE_SYSROOT)
target_link_libraries(${TARGET} PRIVATE
-Wl,-rpath,${CMAKE_SYSROOT}/usr/lib/x86_64-linux-gnu
-Wl,-rpath,${CMAKE_SYSROOT}/lib/x86_64-linux-gnu
-Wl,-dynamic-linker,${CMAKE_SYSROOT}/lib64/ld-linux-x86-64.so.2
)
endif()
endfunction()
set(LLVM_RUNTIME_OUTPUT_INTDIR ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
set(LLVM_LIBRARY_OUTPUT_INTDIR ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
set(LLVM_TOOLS_BINARY_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
# Turn on -gsplit-dwarf if requested in debug builds.
option(CXX_DEBUGGING_USE_SPLIT_DWARF "Enable -gsplit-dwarf for the extension" OFF)
if(CXX_DEBUGGING_USE_SPLIT_DWARF)
if(NOT LLVM_USE_SPLIT_DWARF)
message(WARNING "CXX_DEBUGGING_USE_SPLIT_DWARF turned ON, but LLVM_USE_SPLIT_DWARF turned off, might not be what you want?")
endif()
string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
if((uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") OR
(uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO"))
add_compile_options(-gsplit-dwarf)
endif()
endif()
fix_sysroot(lldb-tblgen)
fix_sysroot(clang-tblgen)
fix_sysroot(llvm-tblgen)
fix_sysroot(llvm-mc)
fix_sysroot(llvm-dwp)
if (CXX_DEBUGGING_BUILD_WASM)
add_subdirectory(lib)
add_subdirectory(src)
add_subdirectory(tests)
endif()