Referencia de comandos del compilador

wavec Describe comandos, canalización de compilación, resultados, objetivos, diagnósticos, vinculación de dependencias y consultas de herramientas.

Wave Foundation

modelo de comando

wavec es el compilador CLI. Compila entradas individuales directamente, proporciona información de soporte del compilador a las herramientas y administra las fuentes de biblioteca estándar instaladas.

wavec [global-options] <command> [command-options]
comando uso
wavec build <input...> Dependiendo de las banderas, realiza inspección, generación de código, vinculación o canalizaciones de ejecución.
wavec check <file> Apodo para build <file> --emit=check.
wavec run <file> [-- <args...>] Es un alias de build <file> --run y el argumento posterior a -- se pasa al programa.
wavec print <item> Consulta información de soporte de destino y cadena de herramientas.
wavec install std Instale la biblioteca estándar.
wavec update std Actualice las bibliotecas estándar instaladas.
wavec --version Imprime la información de la versión instalada.

Puede encontrar una lista completa de comandos y opciones en wavec --help.

Construir, probar y ejecutar

wavec build main.wave
wavec check main.wave
wavec run main.wave -- first-argument second-argument

build crea un archivo ejecutable de forma predeterminada. check se detiene después de completar la verificación del frontend. run requiere salida binaria y no se puede utilizar con compilaciones de bibliotecas compartidas.

Utilice --dry-run para verificar una solicitud y determinar qué pasos ejecutar sin compilar, vincular o ejecutar.

wavec build main.wave --target riscv64-unknown-linux-gnu --dry-run
wavec build main.wave --dry-run --error-format=json

El formato JSON es una interfaz unificada y estable utilizada por herramientas de compilación como Vex.

emit y tipo de entrada

wavec build main.wave --emit=ast
wavec build main.wave --emit=ir
wavec build main.wave --emit=bc
wavec build main.wave --emit=asm
wavec build main.wave --emit=obj -o main.o
wavec build main.wave --emit=bin -o app

Los tipos de salida emit son ast, ir, bc, asm, obj, bin. check es un modo de control y debe usarse solo. Puede especificar varios tipos de salida que acepta una canalización, separados por comas.

Los tipos de entrada son wave, ir, bc, asm, obj, archive. --input-type=<kind> fuerza a especificar el tipo de todas las entradas. Al vincular solo las entradas object o archive, use los binarios emit y --link-only.

wavec build module.o --input-type=obj --link-only --emit=bin -o app

ubicación de salida

opciones efecto
-o <file> Especifica la ruta de salida principal.
--out-dir <dir> emit Coloca la salida en el directorio especificado.
--target-dir <dir> Especifica rutas de entrega intermedias y primarias.

Optimización y resultados de diagnóstico

wavec -O2 build main.wave
wavec --debug-wave=tokens,ast build main.wave

Los pasos de optimización son -O0, -O1, -O2, -O3, -Os, -Oz, -Ofast. --debug-wave puede ir seguido de tokens, ast, ir, mc, hex, all, y se pueden combinar varios pasos con comas.

enlace nativo

wavec --link=m -L ./lib build main.wave
wavec build main.wave --shared -o libexample.so
wavec build main.wave --static -o app
wavec build main.wave --pie -o app

--link=<lib> agrega bibliotecas nativas y -L <path> agrega rutas de búsqueda. Los modos de enlace utilizan --shared, --static, --pie, --no-pie según las reglas de compatibilidad.

Las opciones de control de backend y vinculador incluyen:

  • --target, --cpu, --features, --abi, --sysroot
  • -C linker=<path> y -C link-arg=<arg>
  • -C link-sysroot=<path> y -C relocation-model=<model>
  • -C no-default-libs

Las salidas independientes, como los núcleos, utilizan --freestanding junto con las configuraciones --entry, --linker-script y --no-start-files apropiadas para el entorno.

Interpretación del paquete externo

wavec --dep-root .vex/deps build main.wave
wavec --dep math=/opt/wave-deps/math build main.wave

--dep-root <dir> agrega una raíz para buscar package::module import externo. --dep <name>=<path> fija el nombre del paquete en un directorio. Este es el punto de integración del compilador y los proyectos manifest, las descargas de dependencias y lockfile son manejados por Vex.

Consulta de función de soporte

Las herramientas que utilizan el tipo de destino o de salida pueden consultar información de soporte con wavec print.

wavec print host-target
wavec print target-spec --format=json
wavec print supported-targets
wavec print supported-input-types
wavec print supported-emit-kinds
wavec print supported-print-items
wavec print cpu-list --target riscv64-unknown-linux-gnu
wavec print target-features --target riscv64-unknown-linux-gnu
wavec print default-linker
wavec print sysroot
wavec print std-path
wavec print dep-search-paths

También puede consultar elementos como host, default-target y target-list. Los elementos que admiten salida estructurada reciben --format=json.

Límite entre compilador y cadena de herramientas

wavec es responsable de la inspección del código fuente, la generación de código y la vinculación. Vex es responsable de crear paquetes reproducibles con el paquete manifest, el gráfico de dependencia y lockfile. Whale es una cadena de herramientas de bajo nivel que se ejecuta de forma independiente.

std Especificar ruta

wavec --std-root /absolute/path/to/std check main.wave
wavec --std-root /absolute/path/to/std run main.wave

La ruta std especificada tiene prioridad sobre la ruta de instalación y fallará si la ruta es incorrecta o incompatible con std. No reemplaza automáticamente std de otras instalaciones. Seleccione std que corresponda a su compilador.

Para la salida -o, se utiliza una ruta diferente a la del archivo fuente/entrada. Dado que check no verifica la operación en tiempo de ejecución, practica también verifica los resultados de la ejecución.