HAIDOX
HAIDOX Help

Math Engine Installed SDK 사용

소비 원칙

Consumer는 Math Engine source checkout의 상대경로를 include하거나 private library에 직접 link하지 않고 설치된 SDK만 사용한다. Header, 선택한 library, CMake package, ABI manifest와 capability manifest의 revision이 일치해야 한다.

CMake target

Shared와 static variant는 같은 C ABI와 기능 계약을 제공한다. Consumer는 package가 export한 target을 선택하고 직접 library filename이나 build tree 경로를 조립하지 않는다. 실제 target 이름과 지원 component는 설치된 MathEngineConfig.cmake 와 package 문서를 확인한다.

find_package(MathEngine CONFIG REQUIRED)
# 설치 package가 export한 shared 또는 static target을 명시적으로 선택한다.

Target 이름을 추측한 예제를 고정하지 않는다. Clean installed SDK consumer test에서 확인된 target만 release별 사용 문서에 기록한다.

C consumer 시작점

필요한 최소 module header만 include한다. 모든 module을 의도적으로 사용하는 consumer만 aggregate header를 선택한다.

#include <math_engine/math_engine_status.h>

int main(void) {
    const char* name = math_engine_status_name(MATH_ENGINE_STATUS_OK);
    return name == 0;
}

Function별 input, output, ownership와 실패 계약은 module Reference를 확인한다. Status가 OK가 아니면 API가 명시적으로 허용한 required-size 또는 partial output 외의 caller-owned output을 사용하지 않는다.

C++ consumer

Public header는 C++17에서도 읽을 수 있고 export function은 extern "C" ABI를 유지한다. C++ consumer는 자신이 RAII wrapper를 만들 수 있지만 그 wrapper type과 exception 정책을 Math Engine C ABI의 일부로 간주하지 않는다.

Runtime 확인

  • Runtime version과 ABI version을 installed manifest와 비교한다.
  • 필요한 mode와 capability를 query한 뒤 optional 기능을 호출한다.
  • Shared library 배치와 loader search path는 platform package 계약을 따른다.
  • Static consumer는 MATH_ENGINE_STATIC 같은 package가 제공하는 compile definition을 target 경유로 상속하고 수동으로 ABI attribute를 추측하지 않는다.

Mode와 capability는 실행 mode와 capability에서 설명한다.