cmake_minimum_required(VERSION 3.20) project(amduat LANGUAGES C) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(AMDUAT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) set(AMDUAT_INCLUDE_DIR ${AMDUAT_ROOT}/include) set(AMDUAT_INTERNAL_DIR ${AMDUAT_ROOT}/src/internal) function(amduat_add_lib name) set(options) set(oneValueArgs) set(multiValueArgs SRCS) cmake_parse_arguments(AMDUAT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if ("${AMDUAT_SRCS}" STREQUAL "") message(FATAL_ERROR "amduat_add_lib(${name}) requires SRCS") endif() add_library(amduat_${name}_obj OBJECT ${AMDUAT_SRCS}) target_include_directories(amduat_${name}_obj PRIVATE ${AMDUAT_INTERNAL_DIR} PUBLIC ${AMDUAT_INCLUDE_DIR} ) add_library(amduat_${name} STATIC $) add_library(amduat_${name}_shared SHARED $) set_target_properties(amduat_${name} PROPERTIES OUTPUT_NAME amduat_${name}) set_target_properties(amduat_${name}_shared PROPERTIES OUTPUT_NAME amduat_${name}) target_include_directories(amduat_${name} PRIVATE ${AMDUAT_INTERNAL_DIR} PUBLIC ${AMDUAT_INCLUDE_DIR} ) target_include_directories(amduat_${name}_shared PRIVATE ${AMDUAT_INTERNAL_DIR} PUBLIC ${AMDUAT_INCLUDE_DIR} ) endfunction() function(amduat_link name) if (ARGC LESS 2) return() endif() target_link_libraries(amduat_${name} PUBLIC ${ARGN}) target_link_libraries(amduat_${name}_shared PUBLIC ${ARGN}) endfunction() set(AMDUAT_UTIL_SRCS src/internal/buf.c src/internal/arena.c src/internal/varint.c src/internal/endian.c src/internal/hex.c ) set(AMDUAT_ASL_SRCS src/kernel/asl/core.c src/near_core/asl/artifact_io.c src/near_core/asl/io.c src/near_core/asl/index_accel.c src/near_core/asl/index_bloom.c src/near_core/asl/index_snapshot.c src/near_core/asl/index_replay.c src/near_core/asl/parse.c src/near_core/asl/ref_io.c src/near_core/asl/store.c src/near_core/asl/ref_text.c src/near_core/asl/registry.c ) set(AMDUAT_HASH_ASL1_SRCS src/near_core/hash/asl1.c src/near_core/hash/sha256.c ) set(AMDUAT_ENC_SRCS src/near_core/enc/asl1_core.c src/near_core/enc/asl1_core_codec.c src/near_core/asl/ref_derive.c src/near_core/enc/fer1_receipt.c src/near_core/fer/receipt.c src/near_core/enc/asl_log.c src/near_core/enc/asl_core_index.c src/near_core/enc/asl_tgk_exec_plan.c src/near_core/enc/pel_program_dag.c src/near_core/enc/pel_program_dag_desc.c src/near_core/enc/pel_trace_dag.c src/near_core/enc/pel1_result.c src/near_core/enc/tgk1_edge.c ) set(AMDUAT_FORMAT_SRCS src/near_core/format/json.c src/near_core/format/opreg_util.c src/near_core/format/parse.c src/near_core/format/ref.c src/near_core/format/pel.c ) set(AMDUAT_PEL_SRCS src/kernel/pel/core.c src/pel_stack/decode.c src/pel_stack/surf/surf.c src/pel_stack/program_dag/program_dag.c src/pel_stack/program_dag/program_dag_desc.c src/pel_stack/run.c src/pel_stack/trace_dag/trace_dag.c src/pel_stack/queue/queue.c src/pel_stack/opreg/kernel.c src/pel_stack/opreg/kernel_params.c ) set(AMDUAT_TGK_SRCS src/kernel/tgk/core.c src/tgk_stack/store/store.c src/tgk_stack/prov/prov.c ) set(AMDUAT_ASL_STORE_FS_SRCS src/adapters/asl_store_fs/asl_store_fs.c src/adapters/asl_store_fs/asl_store_fs_layout.c src/adapters/asl_store_fs/asl_store_fs_meta.c ) set(AMDUAT_ASL_STORE_INDEX_FS_SRCS src/adapters/asl_store_index_fs/asl_store_index_fs.c src/adapters/asl_store_index_fs/asl_store_index_fs_layout.c ) set(AMDUAT_TGK_STORE_MEM_SRCS src/adapters/tgk_store_mem/tgk_store_mem.c ) set(AMDUAT_TGK_STORE_FS_SRCS src/adapters/tgk_store_fs/tgk_store_fs.c ) set(AMDUAT_TGK_STORE_ASL_INDEX_FS_SRCS src/adapters/tgk_store_asl_index_fs/tgk_store_asl_index_fs.c ) amduat_add_lib(util SRCS ${AMDUAT_UTIL_SRCS}) amduat_add_lib(asl SRCS ${AMDUAT_ASL_SRCS}) amduat_link(asl amduat_util) amduat_add_lib(hash_asl1 SRCS ${AMDUAT_HASH_ASL1_SRCS}) amduat_link(hash_asl1 amduat_asl amduat_util) amduat_add_lib(enc SRCS ${AMDUAT_ENC_SRCS}) amduat_link(enc amduat_asl amduat_hash_asl1 amduat_util) amduat_add_lib(format SRCS ${AMDUAT_FORMAT_SRCS}) amduat_link(format amduat_asl amduat_enc amduat_util) amduat_add_lib(pel SRCS ${AMDUAT_PEL_SRCS}) amduat_link(pel amduat_asl amduat_enc amduat_hash_asl1 amduat_util) amduat_add_lib(tgk SRCS ${AMDUAT_TGK_SRCS}) amduat_link(tgk amduat_asl amduat_enc amduat_hash_asl1 amduat_util) amduat_add_lib(asl_store_fs SRCS ${AMDUAT_ASL_STORE_FS_SRCS}) amduat_link(asl_store_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util) target_compile_definitions(amduat_asl_store_fs_obj PRIVATE _POSIX_C_SOURCE=200809L) amduat_add_lib(asl_store_index_fs SRCS ${AMDUAT_ASL_STORE_INDEX_FS_SRCS}) amduat_link(asl_store_index_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util) target_compile_definitions(amduat_asl_store_index_fs_obj PRIVATE _POSIX_C_SOURCE=200809L) amduat_add_lib(tgk_store_mem SRCS ${AMDUAT_TGK_STORE_MEM_SRCS}) amduat_link(tgk_store_mem amduat_tgk amduat_asl amduat_enc amduat_hash_asl1 amduat_util) amduat_add_lib(tgk_store_fs SRCS ${AMDUAT_TGK_STORE_FS_SRCS}) amduat_link(tgk_store_fs amduat_tgk_store_mem amduat_tgk amduat_asl_store_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util) amduat_add_lib(tgk_store_asl_index_fs SRCS ${AMDUAT_TGK_STORE_ASL_INDEX_FS_SRCS}) target_include_directories(amduat_tgk_store_asl_index_fs_obj PRIVATE ${AMDUAT_ROOT}/src/adapters/asl_store_index_fs ) amduat_link(tgk_store_asl_index_fs amduat_tgk amduat_asl_store_index_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util) add_executable(amduat_asl_cli src/tools/amduat_asl_cli.c) target_include_directories(amduat_asl_cli PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_asl_cli PRIVATE amduat_format amduat_asl_store_fs amduat_asl_store_index_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util ) set_target_properties(amduat_asl_cli PROPERTIES OUTPUT_NAME amduat-asl) add_executable(amduat_pel_seed src/tools/amduat_pel_seed.c) target_include_directories(amduat_pel_seed PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_pel_seed PRIVATE amduat_pel amduat_format amduat_asl_store_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util ) set_target_properties(amduat_pel_seed PROPERTIES OUTPUT_NAME amduat-pel-seed) add_executable(amduat_pel_run src/tools/amduat_pel_run.c) target_include_directories(amduat_pel_run PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_pel_run PRIVATE amduat_pel amduat_asl_store_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util ) set_target_properties(amduat_pel_run PROPERTIES OUTPUT_NAME amduat-pel-run) add_executable(amduat_pel_cli src/tools/amduat_pel_cli.c) target_include_directories(amduat_pel_cli PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_pel_cli PRIVATE amduat_format amduat_pel amduat_asl_store_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util ) set_target_properties(amduat_pel_cli PROPERTIES OUTPUT_NAME amduat-pel) enable_testing() add_executable(amduat_test_pel_program_dag tests/enc/test_pel_program_dag.c) target_include_directories(amduat_test_pel_program_dag PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_pel_program_dag PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME pel_program_dag COMMAND amduat_test_pel_program_dag) add_executable(amduat_test_pel_trace_dag tests/enc/test_pel_trace_dag.c) target_include_directories(amduat_test_pel_trace_dag PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_pel_trace_dag PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME pel_trace_dag COMMAND amduat_test_pel_trace_dag) add_executable(amduat_test_pel1_result tests/enc/test_pel1_result.c) target_include_directories(amduat_test_pel1_result PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_pel1_result PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME pel1_result COMMAND amduat_test_pel1_result) add_executable(amduat_test_pel1_result_invariants tests/enc/test_pel1_result_invariants.c) target_include_directories(amduat_test_pel1_result_invariants PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_pel1_result_invariants PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME pel1_result_invariants COMMAND amduat_test_pel1_result_invariants) add_executable(amduat_test_asl_log tests/enc/test_asl_log.c) target_include_directories(amduat_test_asl_log PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_asl_log PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME asl_log COMMAND amduat_test_asl_log) add_executable(amduat_test_asl_core_index tests/enc/test_asl_core_index.c) target_include_directories(amduat_test_asl_core_index PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_asl_core_index PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME asl_core_index COMMAND amduat_test_asl_core_index) add_executable(amduat_test_asl_tgk_exec_plan tests/enc/test_asl_tgk_exec_plan.c) target_include_directories(amduat_test_asl_tgk_exec_plan PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_asl_tgk_exec_plan PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME asl_tgk_exec_plan COMMAND amduat_test_asl_tgk_exec_plan) add_executable(amduat_test_tgk1_edge tests/enc/test_tgk1_edge.c) target_include_directories(amduat_test_tgk1_edge PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_tgk1_edge PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME tgk1_edge COMMAND amduat_test_tgk1_edge) add_executable(amduat_test_fer1_receipt tests/enc/test_fer1_receipt.c) target_include_directories(amduat_test_fer1_receipt PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_fer1_receipt PRIVATE amduat_enc amduat_hash_asl1 amduat_asl amduat_util ) add_test(NAME fer1_receipt COMMAND amduat_test_fer1_receipt) add_executable(amduat_test_tgk_store_mem tests/tgk/test_tgk_store_mem.c) target_include_directories(amduat_test_tgk_store_mem PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_tgk_store_mem PRIVATE amduat_tgk_store_mem ) add_test(NAME tgk_store_mem COMMAND amduat_test_tgk_store_mem) add_executable(amduat_test_tgk_store_fs tests/tgk/test_tgk_store_fs.c) target_include_directories(amduat_test_tgk_store_fs PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_compile_definitions(amduat_test_tgk_store_fs PRIVATE _POSIX_C_SOURCE=200809L ) target_link_libraries(amduat_test_tgk_store_fs PRIVATE amduat_tgk_store_fs ) add_test(NAME tgk_store_fs COMMAND amduat_test_tgk_store_fs) add_executable(amduat_test_tgk_prov tests/tgk/test_tgk_prov.c) target_include_directories(amduat_test_tgk_prov PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_tgk_prov PRIVATE amduat_tgk_store_mem ) add_test(NAME tgk_prov COMMAND amduat_test_tgk_prov) add_executable(amduat_test_asl_ref_derive tests/asl/test_asl_ref_derive.c) target_include_directories(amduat_test_asl_ref_derive PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_asl_ref_derive PRIVATE amduat_enc ) add_test(NAME asl_ref_derive COMMAND amduat_test_asl_ref_derive) add_executable(amduat_test_asl_store_indexed_ops tests/asl/test_asl_store_indexed_ops.c) target_include_directories(amduat_test_asl_store_indexed_ops PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_asl_store_indexed_ops PRIVATE amduat_asl ) add_test(NAME asl_store_indexed_ops COMMAND amduat_test_asl_store_indexed_ops) add_executable(amduat_test_asl_replay tests/asl/test_asl_replay.c) target_include_directories(amduat_test_asl_replay PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_asl_replay PRIVATE amduat_asl ) add_test(NAME asl_replay COMMAND amduat_test_asl_replay) add_executable(amduat_test_asl_index_replay tests/asl/test_asl_index_replay.c) target_include_directories(amduat_test_asl_index_replay PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} PRIVATE ${AMDUAT_ROOT}/src/adapters/asl_store_index_fs ) target_compile_definitions(amduat_test_asl_index_replay PRIVATE _POSIX_C_SOURCE=200809L ) target_link_libraries(amduat_test_asl_index_replay PRIVATE amduat_asl_store_index_fs ) add_test(NAME asl_index_replay COMMAND amduat_test_asl_index_replay) add_executable(amduat_test_asl_store_index_fs tests/asl/test_asl_store_index_fs.c) target_include_directories(amduat_test_asl_store_index_fs PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_compile_definitions(amduat_test_asl_store_index_fs PRIVATE _POSIX_C_SOURCE=200809L ) target_link_libraries(amduat_test_asl_store_index_fs PRIVATE amduat_asl_store_index_fs amduat_format pthread ) add_test(NAME asl_store_index_fs COMMAND amduat_test_asl_store_index_fs) set_tests_properties(asl_store_index_fs PROPERTIES ENVIRONMENT "AMDUAT_ASL_PERF_COUNT=100;AMDUAT_ASL_STRESS_SECS=20" ) add_executable(amduat_test_asl_index_accel tests/asl/test_asl_index_accel.c) target_include_directories(amduat_test_asl_index_accel PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_asl_index_accel PRIVATE amduat_asl amduat_hash_asl1 amduat_util ) add_test(NAME asl_index_accel COMMAND amduat_test_asl_index_accel) add_executable(amduat_test_pel_program_dag_exec tests/pel/test_pel_program_dag_exec.c) target_include_directories(amduat_test_pel_program_dag_exec PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_pel_program_dag_exec PRIVATE amduat_pel ) add_test(NAME pel_program_dag_exec COMMAND amduat_test_pel_program_dag_exec) add_executable(amduat_test_pel_program_dag_encode tests/pel/test_pel_program_dag_encode.c) target_include_directories(amduat_test_pel_program_dag_encode PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_pel_program_dag_encode PRIVATE amduat_enc ) add_test(NAME pel_program_dag_encode COMMAND amduat_test_pel_program_dag_encode) add_executable(amduat_test_pel_program_dag_desc tests/pel/test_pel_program_dag_desc.c) target_include_directories(amduat_test_pel_program_dag_desc PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_pel_program_dag_desc PRIVATE amduat_enc ) add_test(NAME pel_program_dag_desc COMMAND amduat_test_pel_program_dag_desc) add_executable(amduat_test_pel_surf_run tests/pel/test_pel_surf_run.c) target_include_directories(amduat_test_pel_surf_run PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_link_libraries(amduat_test_pel_surf_run PRIVATE amduat_pel ) add_test(NAME pel_surf_run COMMAND amduat_test_pel_surf_run) add_executable(amduat_test_pel_queue tests/pel/test_pel_queue.c) target_include_directories(amduat_test_pel_queue PRIVATE ${AMDUAT_INTERNAL_DIR} PRIVATE ${AMDUAT_INCLUDE_DIR} ) target_compile_definitions(amduat_test_pel_queue PRIVATE _POSIX_C_SOURCE=200809L ) target_link_libraries(amduat_test_pel_queue PRIVATE amduat_pel ) add_test(NAME pel_queue COMMAND amduat_test_pel_queue)