First build

Build a Classic PowerPC application.

macMAKE v0.1.1 builds Classic Mac OS PowerPC CFM/PEF applications, primarily in C, and includes an experimental, bounded native M68000 C application profile. Real-guest runtime acceptance on Mac OS 9.2.2 was verified in QEMU with makePAD: text entry, unsaved-changes dialog, and clean return to Finder.

The 68K profile is not CFM-68K or general System 6–9 support. Earlier-system runtime observations come from specific development builds and applications. See the OS compatibility tracker.

Working with a coding agent? Start with the copyable macMAKE agent setup prompt.

1. Discover the installed toolchain

macMAKE’s own offline help is version-specific and is the authoritative reference for commands and project syntax.

macmake --version
macmake help
macmake help quickstart
macmake help manifest
macmake schema manifest --json

The schema command prints the manifest format supported by that executable. The website’s command reference is generated from the same JSON help interface.

2. Copy the included example into a workspace

The release includes a tested two-source C project. Copy it from the installation data directory before adding your SDK files or building:

mkdir -p "$HOME/src"
cp -R "$HOME/.local/share/macmake/current/examples/first-app" \
  "$HOME/src/macmake-first-app"
cd "$HOME/src/macmake-first-app"

If you installed with --prefix, replace $HOME/.local with that prefix. With manual archive installation, copy examples/first-app from the extracted release directory.

3. Register Universal Interfaces

The minimal fetch is explicit and hash-pinned by the installed CLI. It selects the required Universal Interfaces directories, PPC import stubs, and three MSL archives from a fixed repository revision. These are historical SDK files, separate from macMAKE; fetch and use them only if authorized. The command does not register them or grant rights.

macmake sdk fetch --minimal
macmake sdk add "$HOME/.local/share/macmake/macMAKELibs/Universal" --id macos9-sdk
macmake sdk inspect macos9-sdk
macmake sdk verify macos9-sdk

For an installation with a custom prefix, pass its macMAKE data directory to sdk fetch --minimal --destination PATH, then register PATH/Universal. The optional installer flag --with-sdk fetches these same files and prepares the sample MSL inputs; the default installation does not download SDK material. Registration references the files in place and does not copy them into the catalog.

4. Inspect the project and target

macmake inspect .
macmake help targets
macmake doctor . --target "Classic PPC C"

The sample manifest declares the two C files, C89 language setting, CodeWarrior-compatible runtime profile, ordered MSL archives, SDK capabilities, Carbon and Math system imports, and application metadata. The complete schema and field descriptions are in the manifest reference.

5. Build and inspect the application

macmake build . --target "Classic PPC C"
find build -maxdepth 6 -type f -print

The build writes a PEF executable, resource fork, Finder metadata, MacBinary II package, and build evidence under the project’s build/ directory.

macmake inspect-artifact build/HelloPPC/ClassicPPCC/HelloPPC.pef \
  --resource-fork build/HelloPPC/ClassicPPCC/HelloPPC.rsrc \
  --finder-info build/HelloPPC/ClassicPPCC/.finf/HelloPPC.APPL \
  --creator HmPP --file-type APPL --json

Successful Linux inspection verifies file structure. It does not launch the application. A separate Mac OS 9 runtime test is needed to verify behavior in the guest.

Open troubleshooting

Recover from common failures

Unknown target
Run macmake inspect . and use the exact target name from the project. Read macmake help targets.
SDK not ready
Run macmake sdk list, then macmake sdk verify ID. Check the registered root and required capabilities.
Unresolved import
Run macmake doctor . --target "TARGET NAME" and inspect the target’s system-import providers and SDK capability requirements.