bareflank-hypervisor/syscall/ext_lib_cpp.cmake
Rian Quinn 6daaff26e5 Completes all of the unit tests for the VMM
This patch:
- Completes all of the unit tests for the VMM
- Completes all of the unit tests for the syscall library
- Compleses all of the unit tests for the runtime library
- Completes all of the unit tests for the lib library
- Fixes a number of bugs identified during testing.
2021-10-11 15:45:29 -06:00

198 lines
10 KiB
CMake

#
# Copyright (C) 2020 Assured Information Security, Inc.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/function/hypervisor_target_source.cmake)
add_library(syscall)
# ------------------------------------------------------------------------------
# Includes
# ------------------------------------------------------------------------------
if(HYPERVISOR_TARGET_ARCH STREQUAL "AuthenticAMD" OR HYPERVISOR_TARGET_ARCH STREQUAL "GenuineIntel")
if(HYPERVISOR_TARGET_ARCH STREQUAL "AuthenticAMD")
target_include_directories(syscall PUBLIC
include/x64/amd
src/x64/amd
)
endif()
if(HYPERVISOR_TARGET_ARCH STREQUAL "GenuineIntel")
target_include_directories(syscall PUBLIC
include/x64/intel
src/x64/intel
)
endif()
target_include_directories(syscall PUBLIC
include/x64
src/x64
)
endif()
if(HYPERVISOR_TARGET_ARCH STREQUAL "aarch64")
target_include_directories(syscall PUBLIC
include/arm/aarch64
src/arm/aarch64
)
endif()
target_include_directories(syscall PUBLIC
include
src
)
# ------------------------------------------------------------------------------
# Headers
# ------------------------------------------------------------------------------
if(HYPERVISOR_TARGET_ARCH STREQUAL "AuthenticAMD" OR HYPERVISOR_TARGET_ARCH STREQUAL "GenuineIntel")
if(HYPERVISOR_TARGET_ARCH STREQUAL "AuthenticAMD")
list(APPEND HEADERS
${CMAKE_CURRENT_LIST_DIR}/include/x64/amd/bf_reg_t.hpp
)
endif()
if(HYPERVISOR_TARGET_ARCH STREQUAL "GenuineIntel")
list(APPEND HEADERS
${CMAKE_CURRENT_LIST_DIR}/include/x64/intel/bf_reg_t.hpp
)
endif()
endif()
if(HYPERVISOR_TARGET_ARCH STREQUAL "aarch64")
list(APPEND HEADERS
${CMAKE_CURRENT_LIST_DIR}/include/arm/aarch64/bf_reg_t.hpp
)
endif()
list(APPEND HEADERS
${CMAKE_CURRENT_LIST_DIR}/include/bf_constants.hpp
${CMAKE_CURRENT_LIST_DIR}/include/bf_types.hpp
${CMAKE_CURRENT_LIST_DIR}/src/bf_control_ops.hpp
${CMAKE_CURRENT_LIST_DIR}/src/bf_debug_ops.hpp
${CMAKE_CURRENT_LIST_DIR}/src/bf_syscall_impl.hpp
${CMAKE_CURRENT_LIST_DIR}/src/bf_syscall_t.hpp
)
# ------------------------------------------------------------------------------
# Sources
# ------------------------------------------------------------------------------
if(HYPERVISOR_TARGET_ARCH STREQUAL "AuthenticAMD" OR HYPERVISOR_TARGET_ARCH STREQUAL "GenuineIntel")
hypervisor_target_source(syscall src/x64/bf_callback_op_register_bootstrap_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_callback_op_register_fail_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_callback_op_register_vmexit_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_control_op_exit_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_control_op_wait_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_control_op_again_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_dump_ext_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_dump_huge_pool_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_dump_page_pool_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_dump_vm_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_dump_vmexit_log_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_dump_vp_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_dump_vs_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_out_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_write_c_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_debug_op_write_str_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_handle_op_close_handle_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_handle_op_open_handle_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_intrinsic_op_rdmsr_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_intrinsic_op_wrmsr_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_mem_op_alloc_huge_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_mem_op_alloc_page_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_extid_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_online_pps_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_ppid_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_rax_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_rbx_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_rcx_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_rdx_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_rbp_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_rsi_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_rdi_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_r8_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_r9_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_r10_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_r11_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_r12_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_r13_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_r14_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_r15_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_rax_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_rbx_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_rcx_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_rdx_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_rbp_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_rsi_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_rdi_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_r8_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_r9_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_r10_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_r11_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_r12_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_r13_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_r14_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_set_r15_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_thread_id_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_vmid_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_vpid_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_tls_vsid_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vm_op_create_vm_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vm_op_destroy_vm_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vm_op_map_direct_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vm_op_unmap_direct_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vm_op_unmap_direct_broadcast_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vm_op_tlb_flush_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vp_op_create_vp_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vp_op_destroy_vp_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_advance_ip_and_run_current_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_advance_ip_and_run_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_advance_ip_and_set_active_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_clear_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_create_vs_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_destroy_vs_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_init_as_root_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_migrate_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_promote_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_read_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_run_current_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_run_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_set_active_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_tlb_flush_impl.S ${HEADERS})
hypervisor_target_source(syscall src/x64/bf_vs_op_write_impl.S ${HEADERS})
endif()
# ------------------------------------------------------------------------------
# Libraries
# ------------------------------------------------------------------------------
target_link_libraries(syscall PUBLIC
bsl
hypervisor
)
# ------------------------------------------------------------------------------
# Install
# ------------------------------------------------------------------------------
install(TARGETS syscall DESTINATION lib)