---
title: Building a shader library by precompiling source files
framework: metal
role: article
role_heading: Article
path: metal/building-a-shader-library-by-precompiling-source-files
---

# Building a shader library by precompiling source files

Create a shader library that you can add to an Xcode project with the Metal compiler tools in a command-line environment.

## Overview

Overview Manually compile your Metal Shading Language (MSL) source files into a Metal shader library outside of an Xcode project with the Metal command-line tools. The metal compiler tool converts each shader source file into an intermediate representation file. The metal and metal-ar tools then compile intermediate representation files into a library and a binary archive, respectively.

You can create a library from one or more intermediate representation files, one or more archive files, or a combination of both. Compile a shader source file into a library The simplest way to compile and build a single MSL source file into a library file is with two commands. The first command invokes the metal compiler tool, which compiles the source file into an intermediate representation file. % xcrun -sdk macosx metal -o Shadow.ir  -c Shadow.metal % xcrun -sdk macosx metal -o PointLights.ir  -c PointLights.metal % xcrun -sdk macosx metal -o DirectionalLight.ir  -c DirectionalLight.metal The -o option indicates the output file name and the -c option tells the tool to preprocess, compile, and assemble the source file. note: This example uses the macosx SDK, but you can use any SDK your app targets. Optionally, you can combine several intermediate representation files into a single Metal archive with the metal-ar tool. % xcrun -sdk macosx metal-ar -q Lights.metalar DirectionalLight.ir PointLights.ir The -q option tells the tool to quickly append to its argument, which creates a new archive file if it doesn’t already exist. Build a Metal library from one or more intermediate representation files, one or more archive files, or a combination of both with the metal tool. % xcrun -sdk macosx metal -o LightsAndShadow.metallib Lights.metalar Shadow.ir The command produces a Metal library that your app can load at runtime. One way to do this is by adding it to your project’s build targets in Xcode. note: The Metal command-line tools for Windows use the same options and arguments as their macOS counterparts. Retrieve and load a library At runtime, you can access a library by creating an MTLLibrary instance with the makeLibrary(URL:) method.

## See Also

### Working with Metal intermediate representation libraries

- [Minimizing the binary size of a shader library](metal/minimizing-the-binary-size-of-a-shader-library.md)
- [Generating and loading a Metal library symbol file](metal/generating-and-loading-a-metal-library-symbol-file.md)
