On working on V8, I started appreciating quick and accurate navigation features from IDE, namely CLion. CLion expects the project uses CMakeList.txt to define the project structure, but V8 uses ninja, so I have to compose CMakeList.txt myself.

I am listing what I used here. It can’t build the project successfully due to some linking errors. However, I only need the navigation feature from CLion, so it’s enough for me. The two features I used the most are “Find definition” and “Find usage”; both of them work in a semantically correct manner.

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
cmake_minimum_required(VERSION 3.7)
project(v8)

set(CMAKE_CXX_STANDARD 11)
include_directories(.)
include_directories(./include)

add_definitions(-DDEBUG)
add_definitions(-DVERIFY_HEAP)
add_definitions(-DV8_CSA_WRITE_BARRIER)
add_definitions(-DV8_TARGET_ARCH_X64)
#add_definitions(-DV8_TARGET_ARCH_IA32)
#add_definitions(-DV8_TARGET_ARCH_MIPS)
#add_definitions(-DV8_TARGET_ARCH_MIPS64)
#add_definitions(-DV8_TARGET_ARCH_PPC)
#add_definitions(-DV8_TARGET_ARCH_S390)
#add_definitions(-DV8_TARGET_ARCH_ARM)
#add_definitions(-DV8_TARGET_ARCH_ARM64)

file(GLOB_RECURSE SOURCE_FILES src/*.cc src/*.h)

list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/builtins/builtins-intl-gen.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/builtins/builtins-intl.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/builtins/builtins-intl.h)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/char-predicates.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/intl.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/intl.h)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/objects/intl-objects.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/objects/intl-objects.h)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/runtime/runtime-intl.cc)

list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/d8-windows.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/base/win32-headers.h)

list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/setup-isolate-deserialize.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/snapshot/natives-external.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/snapshot/snapshot-external.cc)

list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/base/debug/stack_trace_win.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/base/debug/stack_trace_posix.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/base/debug/stack_trace_android.cc)
list(REMOVE_ITEM SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/base/debug/stack_trace_fushsia.cc)

list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-aix.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-cygwin.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-freebsd.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-fuchsia.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-macos.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-openbsd.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-posix.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-posix-time.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-qnx.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-solaris.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*platform-win32.*")

list(FILTER SOURCE_FILES EXCLUDE REGEX ".*arm64\\.[h|cc]*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*arm\\.[h|cc]")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*ppc.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*390.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*mips.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*mips64.*")
list(FILTER SOURCE_FILES EXCLUDE REGEX ".*ia32.*")
#list(FILTER SOURCE_FILES EXCLUDE REGEX ".*x64.*")

list(FILTER SOURCE_FILES EXCLUDE REGEX ".*inspector.*")

add_executable(a.out ${SOURCE_FILES})