cmake_minimum_required(VERSION "3.27.0") project("acpi" DESCRIPTION "An ACPI parsing library" VERSION "0.0.1" LANGUAGES ASM CXX ) include("CTest") #[============================================================================[ # External Dependencies #]============================================================================] include("FetchContent") if (BUILD_TESTING) FetchContent_Declare( "Catch2" URL "https://github.com/catchorg/Catch2/archive/refs/tags/v3.7.1.tar.gz" URL_HASH "SHA256=c991b247a1a0d7bb9c39aa35faf0fe9e19764213f28ffba3109388e62ee0269c" EXCLUDE_FROM_ALL FIND_PACKAGE_ARGS ) FetchContent_MakeAvailable("Catch2") find_package("Catch2") include("Catch") endif() #[============================================================================[ # Library #]============================================================================] add_library("acpi" STATIC) add_library("acpi::lib" ALIAS "acpi") target_sources("acpi" PRIVATE "acpi/common/checksum.cpp" "acpi/common/table_header.cpp" "acpi/data/madt.cpp" "acpi/data/rsdt.cpp" "acpi/data/xsdt.cpp" "acpi/pointers.cpp" ) file(GLOB_RECURSE ACPI_HEADERS CONFIGURE_DEPENDS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "acpi/*.hpp" ) target_sources("acpi" PUBLIC FILE_SET HEADERS BASE_DIRS "acpi" FILES ${ACPI_HEADERS} ) target_include_directories("acpi" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" ) target_link_libraries("acpi" PUBLIC "kstd::lib" ) set_target_properties("acpi" PROPERTIES VERIFY_INTERFACE_HEADER_SETS YES ) #[============================================================================[ # Tests #]============================================================================] if(BUILD_TESTING) find_program(IASL_EXE NAMES "iasl" REQUIRED) set(TEST_TABLES "basic_madt" "basic_rsdt" "basic_rsdp" "basic_xsdt" "table_header" ) foreach(TABLE IN LISTS TEST_TABLES) add_custom_command(OUTPUT "test_data/${TABLE}.aml" COMMAND "${IASL_EXE}" -p "test_data/${TABLE}.aml" "${CMAKE_CURRENT_SOURCE_DIR}/test_data/${TABLE}.asl" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/test_data/${TABLE}.asl" COMMENT "Compiling test_data/${TABLE}.asl" VERBATIM ) list(APPEND GENERATED_TABLE_BLOBS "${CMAKE_CURRENT_BINARY_DIR}/test_data/${TABLE}.aml") endforeach() set_source_files_properties("test_data/tables.S" PROPERTIES OBJECT_DEPENDS "${GENERATED_TABLE_BLOBS}") if(COMMAND "enable_coverage") enable_coverage("acpi") endif() add_executable("acpi_tests") add_executable("acpi::tests" ALIAS "acpi_tests") target_sources("acpi_tests" PRIVATE "acpi/common/table_header.test.cpp" "acpi/data/madt.test.cpp" "acpi/data/rsdt.test.cpp" "acpi/data/xsdt.test.cpp" "acpi/pointers.test.cpp" "test_data/tables.S" ) target_include_directories("acpi_tests" PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/test_data" ) target_link_libraries("acpi_tests" PRIVATE "Catch2::Catch2WithMain" "acpi::lib" ) set_target_properties("acpi_tests" PROPERTIES C_CLANG_TIDY "" CXX_CLANG_TIDY "" EXCLUDE_FROM_ALL NO ) catch_discover_tests("acpi_tests") endif()