User:Sam/Drafts/macOS Clang

From Gentoo Wiki
Jump to:navigation Jump to:search

Notes on hackily using a GCC-bootstrapped macOS Prefix kind of work using Clang.

Installing Clang

Bootstrap

Mask an unusable flag:

FILE ${EPREFIX}/etc/portage/package.use.mask
# sys-devel/binutils is masked on Darwin
sys-devel/llvm binutils-plugin

The system (not Prefix) Clang is used to bootstrap LLVM itself:

user $CC=/usr/bin/clang CXX=/usr/bin/clang++ emerge -v1O sys-devel/llvm

Then Clang:

user $CC=/usr/bin/clang CXX=/usr/bin/clang++ emerge -v1O sys-devel/clang

Add clang and friends to PATH:

user $. ${EPREFIX}/etc/profile

Test it out

Do a test run:

FILE ${EPREFIX}/etc/portage/profile/package.use.mask
app-editors/emacs -aqua
user $CC=clang CXX=clang++ USE=aqua emerge -v1 emacs

If that works, create an environment:

FILE ${EPREFIX}/etc/portage/env/clang
CC=clang
CXX=clang++

# Needed to avoid errors with ld:
# "ld: unknown option: -platform_version"
LDFLAGS="${LDFLAGS} -mlinker-version=305"

And configure say, Emacs to use it:

FILE ${EPREFIX}/etc/portage/package.env/clang
app-editors/emacs clang

At this point, one should have a working Emacs with Aqua support!

user $emacs

Building Clang with itself

Enhance the environment created earlier:

FILE ${EPREFIX}/etc/portage/env/clang
AR=llvm-ar
CC=clang
CXX=clang++
NM=llvm-nm
RANLIB=llvm-ranlib
READELF=llvm-readelf
STRIP=llvm-strip
OBJDUMP=llvm-objdump
OBJCOPY=llvm-objcopy

LDFLAGS="${LDFLAGS} -mlinker-version=305"


See Also

  • Prefix/Darwin — brings the power of Gentoo to Darwin (macOS/OS X) based systems, similar to pkgsrc, macports, and homebrew.