LLVM / clang ausprobieren

thorwin

Well-Known Member
Moin!

Ich würde gerne ein Bisschen mit clang experimentieren, daher folgende Frage: Kernel und Base kompilieren ja wohl bei 9-STABLE komplett mit clang durch, wie sieht es denn mit den Ports aus? Kann ich für einzelne Ports, die nicht kompilieren einfach gcc nehmen und gut ist? Oder gibt's dann Stress wenn gcc-kompilierte Anwendungen clang-kompilierte Bibliotheken linken (jaja, sollte eigentlich nicht, aber das ist eben der Unterschied zwischen Theorie und Praxis :ugly:)?
 
Also: In 9.0-RELEASE und höher bauen Kernel und Welt komplett mit Clang. In 9-STABLE kann man sich auch gleich noch den neuen C++-Stack mitbauen lassen. Sofern er denn relevant ist, denn so wahnsinnig viel C++-Software gibt es im Opensource-Ökosystem nicht. Mit den Ports ist es so eine Sache. Einerseits bauen viele Ports inzwischen mit Clang, aber eben nicht alle. Weitere Informationen finden sich unter http://wiki.freebsd.org/PortsAndClang. Der große Plan ist nun wohl, den Port-Compiler austauschbar zu machen und anschließend in 10-CURRENT den Schalter umzulegen, sodass Clang die Standardeinstellung wird. Bis dahin kann man sich damit behelfen, den Compiler für einzelne Ports zu schreiben. Es geht in der /etc/make.conf:
Code:
# Optimierter Build fuer Wine
.if !empty(.CURDIR:M/usr/ports/emulators/wine) && exists(/usr/local/bin/gcc47)                                    
CC=gcc47                                                        
CXX=g++47                                                       
CPP=cpp47                                                       
BUILD_STATIC=YES                                                
CFLAGS+= -march=corei7-avx
CXXFLAGS+= -march=corei7-avx
.endif
 
Ich verwende für die Ports clang und habe ein Liste von Ausnahmen, die gcc benötigen.

Das Basissystem mache ich mit gcc, weil diverse Userland Software bei mir nicht stabil läuft wenn das Basissystem mit clang kompiliert wurde. Das umgekehrte Problem hatte ich noch nicht - Ports die mit clang bauen, funktionieren ohne Abstriche.
 
Ich verwende für die Ports clang und habe ein Liste von Ausnahmen, die gcc benötigen.

Das Basissystem mache ich mit gcc, weil diverse Userland Software bei mir nicht stabil läuft wenn das Basissystem mit clang kompiliert wurde. Das umgekehrte Problem hatte ich noch nicht - Ports die mit clang bauen, funktionieren ohne Abstriche.

Bei mir ist's weitestgehend andersrum. Kernel+World wird mit clang gebaut, ports - wenn automatisch mit poudriere - mit gcc aus base. Nur wenn ich einen port von hand baue, also mit 'make install clean', dann wird clang genutzt. Falls das nicht klappt: es ist leicht einen 'ausschalter' zu definieren, so dass sowas geht: make install clean -DNO_CLANG

EDIT: Soweit habe ich keine Probleme damit gehabt. Wobei, VirtualBox lieft nicht bis vor einiger Zeit mit clang userland (wurde aber gefixed).
 
LLVM/clang ausprobieren

Der chromium port kann mit clang übersetzt werden, Auswahl über make config des Pakets.

Vielleicht reicht das ja zum Ausprobieren.

Gruss
Georg
 
german/libreoffice baut hier grade mit clang, obwohl ich absolut noch nichts dahingehend konfiguriert habe. Das ist aber wohl noch eine Ausnahme, denn es ist ja expilzit im Makefile definiert:
Code:
.if defined(WITH_GCC)
USE_GCC=        4.6+
DISTFILES+=     bd30e9cf5523cdfc019b94f5e1d7fd19-cppunit-1.12.1.tar.gz:ext
.else
CONFIGURE_ARGS+=        --with-system-cppunit
CC=     clang
CXX=    clang++
CXXCPP= clang-cpp
CPP=    clang-cpp
# Work around a bug in pointyhat and tinderbox, prevent it to determine than
# clang from ports is needed when host is a freebsd 9+
.if defined(PACKAGE_BUILDING)
BUILD_DEPENDS+= ${LOCALBASE}/bin/clang:${PORTSDIR}/lang/clang
USE_BINUTILS=   yes
.endif

Auf jeden Fall lief der Build einwandfrei durch.
 
Das ist richtig, hier auch. Es werden hoffentlich immer mehr Ports per default mit clang durchgenudelt.
 
Ich verwende für die Ports clang und habe ein Liste von Ausnahmen, die gcc benötigen.

Das Basissystem mache ich mit gcc, weil diverse Userland Software bei mir nicht stabil läuft wenn das Basissystem mit clang kompiliert wurde. Das umgekehrte Problem hatte ich noch nicht - Ports die mit clang bauen, funktionieren ohne Abstriche.

Hast du das irgendwo öffentlich dokumentiert? Das wäre ja sicher auch für andere interessant. Grade wenn sich das jemand in die make.conf hauen will.
 
Zurück
Oben