-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
92 lines (76 loc) · 2.56 KB
/
Copy pathCMakeLists.txt
File metadata and controls
92 lines (76 loc) · 2.56 KB
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
86
87
88
89
90
91
92
cmake_minimum_required(VERSION 3.20)
cmake_policy(VERSION 3.20...3.31)
project(sail-x86
VERSION 0.1.0
HOMEPAGE_URL "https://github.com/rui314/sail-x86"
)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(SAIL_REQUIRED_VER 0.20)
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "" FORCE)
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
add_compile_options(-Wall -Wextra -Wno-sign-compare)
# Ensure assertions are enabled even in Release.
string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
if(NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-UNDEBUG>)
endif()
# Find GMP.
find_library(GMP_LIBRARY gmp)
find_path(GMP_INCLUDE_DIR gmp.h)
if (NOT GMP_LIBRARY OR NOT GMP_INCLUDE_DIR)
message(FATAL_ERROR "GMP not found. Try 'sudo apt install libgmp-dev'.")
endif()
add_library(GMP::GMP UNKNOWN IMPORTED)
set_target_properties(GMP::GMP PROPERTIES
IMPORTED_LOCATION "${GMP_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}")
message(STATUS "Found GMP: ${GMP_LIBRARY}")
# Find Sail compiler.
find_program(SAIL_BIN "sail")
if (NOT SAIL_BIN)
message(FATAL_ERROR "Sail not found.")
endif()
message(STATUS "Found sail: ${SAIL_BIN}")
execute_process(
COMMAND ${SAIL_BIN} --dir
OUTPUT_VARIABLE sail_dir
OUTPUT_STRIP_TRAILING_WHITESPACE
COMMAND_ERROR_IS_FATAL ANY
)
message(STATUS "Sail library directory: ${sail_dir}")
# Sail C runtime.
add_library(sail_runtime
"${sail_dir}/lib/elf.c"
"${sail_dir}/lib/elf.h"
"${sail_dir}/lib/rts.c"
"${sail_dir}/lib/rts.h"
"${sail_dir}/lib/sail.c"
"${sail_dir}/lib/sail.h"
"${sail_dir}/lib/sail_failure.c"
"${sail_dir}/lib/sail_failure.h"
"${sail_dir}/lib/sail_coverage.h"
"${sail_dir}/lib/cJSON.c"
"${sail_dir}/lib/cJSON.h"
"${sail_dir}/lib/sail_config.c"
"${sail_dir}/lib/sail_config.h"
)
target_include_directories(sail_runtime PUBLIC "${sail_dir}/lib")
target_compile_options(sail_runtime PRIVATE -Wno-extra -Wno-unused)
target_link_libraries(sail_runtime PUBLIC GMP::GMP)
# Sail model generated C++ code.
add_subdirectory("model")
# User-mode emulator binary.
add_subdirectory("usermode-emu")
# Enable testing before any subdirectory that defines tests.
enable_testing()
# System-level emulator binary.
add_subdirectory("system-emu")
# Tests.
add_subdirectory("test")
# KVM differential test harness.
add_subdirectory("kvm")