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 ) set(AMDUAT_ASL_SRCS src/kernel/asl/core.c src/near_core/asl/store.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/enc/pel_program_dag.c src/near_core/enc/pel_trace_dag.c src/near_core/enc/tgk1_edge.c ) set(AMDUAT_PEL_SRCS src/kernel/pel/core.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/trace_dag/trace_dag.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 ) 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 ) 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(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(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 amduat_asl_store_fs amduat_asl amduat_enc amduat_hash_asl1 amduat_util)