VEX compiler (vcc)

vcc 컴파일러는 VEX 소스 코드를 Houdini에서 실행가능 한 형식으로 컴파일 한다. VEX compiler (vcc)는 VEX 코드를 컴파일할 수 있는 능력이 있고, VEX 함수에 대한 다이얼로그 스크립트 (dialog script)를 생성할 수 있고, 또한 모든 주어진 context에서 전역 변수와 함수를 리스트화 해서 빠른 헬프를 줄 수 있다.

Command-line options

Note

대부분의 옵션들은 짧거나 긴 형식을 가지고 있다. 긴 형식은 짧은 형식 당ㅁ에 대괄호로 보여진다.

-h [–help]

컴파일러에 대한 도움말 메시지를 보여준다.

Compiler options

-o [–vex-output] [file|-]

VEX 코드 아웃풋이 필요할 때 지정한다. 주어진 filename이 ‘stdout’면, 아웃풋이 콘솔에 출력될 것이다. 만약 –hda-output, –otl-output, 또는 -ds-output이 모두 지정되지 않았다면, 이 옵션이 함축된다. 디폴트로 context 함수를 형식화하는 아웃풋 파일 이름이 건설된다. 만약 context 함수가 정의되지 않는다면, 인풋 파일 이름이 기본적으로 사용된다. 만약 다수의 인풋 파일이 주어지면, 파일이름 인수가 무시되고 , 아웃풋 파일이름이 앞서 언급한 규칙으로 형식이 건설된다.

-d [–compile-all]

context 함수에 의해 직접적 혹은 간적접으로사용되지 않더라도, VEX 코드에 있는 모든 함수를 컴파일 한다. 이 옵션은 포함된 파일에서 문법을 체크할 때 유용하다.

-z [–no-optimize]

최적화 되지 않은 VEX 코드를 생성한다.

-V [–no-version-id]

VEX 코드에 Houdini 버전 식별자를 내장하지 않는다.

Preprocessor options

-E [–parse-only]

스탠다드 아웃풋으로 인풋 파일들만을 분석한다. 컴파일이 발생하지 않는다.

-D [–define] name[=value]

프리 프로세서에 대한 매크로를 정의한다. 이름과 함께 값이 주어지지 않는 다면, 이름은 1로 정의 된다.

-I [–include-dir] path

지정된 경로를 포함하는 경로에 추가한다. (디렉토리의 리스트가 프리 프로페서에 #include가 지시해 레퍼런스 되는 파일들을 찾는다). 스탠다드 Houdini include 경로는 vex/include 하위에 있다.

Diagnostic options

-w id,id…

출력되는 특정 경보와 정보 메시지를 숨긴다. wlist는 숨길 경고 번호의 리스트를 콤마로 분리 한다.

-F [–Werror]

모든 숨겨지지 않은 경고를 오류로 간주한다.

-e [–Werror-output] file

기존 오류 아웃풋으로 출력하는 대신, 주어진 파일 이름으로 모든 진단 메시지 아웃풋을 다시 전송한다.

-q [–Wno-info]

정보 메시지를 숨긴다.

-Q [–Werror-only]

정보와 경고 메시지를 숨긴다. –Wno-info를 오버라이드 한다.

–fmessage-limit

메시지가 출력을 멈추기까지의 메시지의 최대 숫자를 설정한다. 0으로 설정하면 제한이 없다.

VEX context options

-c [–context] name

context 함수가 정의되지 않으면, 어떤 VEX context가 소스(들)를 컴파일링할 때 사용될지 지정하는데 사용될 수 있다.

-X [–list-context] context

주어진 VEX context에 대해 정의된 전역 변수들과 서명 함수 (function signature)를 출력한다. context의 인수 값은 사용 가능한 모든 VEX contex들에 사용될 수 있다.

Asset options

-L [–hda-append] [file|-]

VEX 소스에서 생성된 디지털 에셋을 지정된 연산자 타입 라이브러리 파일에 추가한다. 파일이 존재하지 않는다면, 이를 생성할 것이다.

-l [–hda-output] [file|-]

context 함수에 대한 디지털 에셋 정의를 지정된 연산자 타입 라이브러리 파일에 작성한다. 라이브러리 파일이 이미 존재한다면, 이를 덮어 쓸 것이다.

-K [–hda-vex-section] name

VEX context에 주어진 스탠다드 섹션 이름보다는, HDA의 주어진 섹션 이름에서 생성된 VEX 코드를 저장한다.

-a [–hda-dialog-script] file

VEX 소스에서 자동적으로 생성된 것 대신 주어진 파일 안에 파라미터 정의를 사용한다. 대화 스크립트의 연산자 정의는 VEX 소스에서부터 계속 가져와질 것이다.

-U [–hda-dialog-script-only]

대화 스크립트만을 OTL로 내장 한다. VEX 코드는 추가되지 않는다.

-n [–op-name] name

주어진 이름을 연산자에 대한 이름으로 사용한다. 코드에 있는 모든 #pragma opname 문법을 오버라이드 한다.

-S [–op-script-name] name

주어진 이름을 연산자에 대한 이름으로 사용한다. 코드에 있는 모든 #pragma opscript 문법을 오버라이드 한다.

-N [–op-label] name

주어진 이름을 연산자에 대한 이름으로 사용한다. 코드에 있는 모든 #pragma oplabel 문법을 오버라이드 한다.

-C [–op-icon] name

주어진 이름을 연산자에 대한 이름으로 사용한다. 코드에 있는 모든 #pragma opicon 문법을 오버라이드 한다.

-t [–op-min-inputs] N

주어진 이름을 연산자에 대한 이름으로 사용한다. 코드에 있는 모든 #pragma opmininputs 문법을 오버라이드 한다. 최소 인풋 값은 생성되는 동안 연산자 타입에 맞게 변화될 것이다.

-T [–op-max-inputs] N

주어진 이름을 연산자에 대한 이름으로 사용한다. 코드에 있는 모든 #pragma opmaxinputs 문법을 오버라이드 한다. 최소 인풋 값은 생성되는 동안 연산자 타입에 맞게 변화될 것이다.

Dialog Script options

-u [–ds-output] [file|-]

주어진 파일 이름으로 대화 스크립트를 작성한다. –vex -output과 –hda-output과 같이, 다수 인풋 파일이 주어지면, 주어진 파일 이름은 무시되고, context 함수가 정의되지 않았을 때 context 함수 이름 혹은 인풋 파일 이름 중에서 자동적으로 생성된 파일 이름을 아웃풋 한다.

Pre-Processor

컴파일러는 주석들을 제거하고, include 파일들을 읽고, 매크로를 확장하는 프리 프로세서를 가지고 있다.

프리 프로세서는 C 프리 프로세서 명령을 다수 지원한다 :

#define name token-string

차후에 사용될 nametoken-string으로 대체한다.

#define name(arg,…,arg) token-string

차후에인스턴스 될 nametoken-sting으로 대체한다. 각 name에 대한 인수는 확장되는 동안 token-string으로 대체 된다.

#undef name

매크로를 “정의하지 않아서 (undefine)” 차후에 사용될 name이 확장되지 않는다.

#include “filename

파일의 콘텐츠들을 소스 코드의 이 지점에 삽입한다. 따옴표를 사용할 때 현재 파일을 포함하고 있는 디렉토리는 기존 위치들을 검색하기 전에 filename을 검색한다.

#ifdef name

name이 정의된 매크로일 때만 다음 #endif 또는 else 명령까지 따라오는 라인들이 컴파일 될 것이다.

#ifndef name

name이 정의된 매크로가 아닐때만 다음에 따라오는 라인들이 컴파일 될 것이다.

#if constant-expr

constant-expr이 0이 아닌 값으로 구해질 때만 #endif 또는 #else 명령까지 따라오는 다음 라인들이 컴파일 될 것이다.

expression은 다음 연산자들을 사용할 수 있다 :

  • 비교 연산자 (==, !=, <=, >=, <, >)
  • 논리 연산자 AND (&&), OR(||), NOT(!)
  • 비트 연산자 AND(&), OR(|), NOT(~)
  • 수식 연산자 (., -, *, /, %)
  • 괄호

expression은 다음 함수들을 사용할 수 있다 :

defined(name)

name이 정의된 매크로라면 1을 리턴하고, 그렇지 않으면 0을 리턴한다.

1
#if defined(foo) && defined(fum)
cs

environment(name)

name이 정의된 환경 변수라면 1을 리턴한다.

access(filename)

filename이 애플리케이션에서 읽힐 수 있다면 1을 리턴하고, 그렇지 않으면 0을 리턴한다.

1
2
3
#if access(“/etc/passwd”)
#include </etc/passwd>
#endif
cs

strcmp(str1, str2)

같은 이름의 C/C++ 함수와 동일하게 작동한다. 만약 두 string이 같은 콘텐츠를 가지고 있다면, 함수는 0을 리턴한다. 각 인수는 따옴표로된 string 또는 따옴표로된 string으로 확장되는 매크로여야만 한다.

1
2
3
4
5
6
7
#define VALUE “foo”
#if strcmp(VALUE, “bar”!= 0
This statement is false since “foo” != “bar”
#endif
#if !strcmp(VALUE, “foo”)
This statement is TRUE since strcmp(“foo”“bar”== 0
#endif
cs

Expression들은 왼쪽에서 오른쪽으로 값을 구한다. (ANSI C와는 다르다). ANSI 프리 프로세서 처럼, 모든 숫자들은 정수여야만 한다.

#else

이전의 #if 명령이 0으로 값이 구해지면, 다음 #endif 명령까지 따라오는 라인들이 컴파일 될 것이다.

#endif

조건식 코드의 마지막 섹센을 마크할 것이다. 모든 테스트 명령은 들어맞는 #endif를 가지고 있어야만 한다.

#pragma …

확장된 언어 기능을 지정한다.

Predefined macros

다음 매크로들은 미리 정의되었다 :

__vex

이 심볼은 언제나 정의된다. 만약 프리 프로세서 명령으로 프로그램이 vcc로 컴파일되는지 확인한다면 이를 사용할 수 있다.

__vex_major

컴파일러의 메이저 버전 숫자이다.

__vex_minor

컴파일러의 마이너 버전 숫자이다.

__vex_build

컴파일러의 빌드 버전 숫자이다.

__vex_patch

컴파일러의 패치 버전 숫자이다.

__Line__

소스 파일의 현재 라인 숫자이다.

__FILE__

컴파일 되기 시작하는 파일이다.

__DATE__

현재 날짜(따옴표로된 string으로 표시). 예, “Dec 31 1999”

__TIME__

현재 시간 (따옴표로된 string으로 표시). 예, “23:59:59”

1
printf(“Starting shader %s at %s”, __FILE__, __DATE__);
cs

 

 

One thought on “VEX compiler (vcc)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s