Containerized Development
We provide the following options to facilitate Codex development in a container. This is particularly useful for verifying the Linux build when working on a macOS host.
Docker
To build the Docker image locally for x64 and then run it with the repo mounted under /workspace:
CODEX_DOCKER_IMAGE_NAME=codex-linux-dev
docker build --platform=linux/amd64 -t "$CODEX_DOCKER_IMAGE_NAME" ./.devcontainer
docker run --platform=linux/amd64 --rm -it -e CARGO_TARGET_DIR=/workspace/codex-rs/target-amd64 -v "$PWD":/workspace -w /workspace/codex-rs "$CODEX_DOCKER_IMAGE_NAME"
Note that /workspace/target will contain the binaries built for your host platform, so we include -e CARGO_TARGET_DIR=/workspace/codex-rs/target-amd64 in the docker run command so that the binaries built inside your container are written to a separate directory.
For arm64, specify --platform=linux/amd64 instead for both docker build and docker run.
Currently, the Dockerfile works for both x64 and arm64 Linux, though you need to run rustup target add x86_64-unknown-linux-musl yourself to install the musl toolchain for x64.
VS Code
VS Code recognizes the devcontainer.json file and gives you the option to develop Codex in a container. Currently, devcontainer.json builds and runs the arm64 flavor of the container.
From the integrated terminal in VS Code, you can build either flavor of the arm64 build (GNU or musl):
cargo build --target aarch64-unknown-linux-musl
cargo build --target aarch64-unknown-linux-gnu