Skip to content

Commit

Permalink
guix: use llvm 17 toolchain for darwin targets
Browse files Browse the repository at this point in the history
  • Loading branch information
tobtoht committed Sep 2, 2024
1 parent f0800bf commit 731a6b8
Show file tree
Hide file tree
Showing 12 changed files with 59 additions and 143 deletions.
34 changes: 23 additions & 11 deletions contrib/depends/hosts/darwin.mk
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,26 @@ OSX_MIN_VERSION=10.13
OSX_SDK_VERSION=11.0
XCODE_VERSION=12.2
XCODE_BUILD_ID=12B45b
LD64_VERSION=609
LD64_VERSION=711

OSX_SDK=$(host_prefix)/native/SDK

darwin_native_toolchain=darwin_sdk native_cctools
darwin_native_toolchain=darwin_sdk

clang_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang")
clangxx_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang++")

clang_prog=clang
clangxx_prog=clang++
llvm_config_prog=llvm-config

llvm_lib_dir=$(shell $(llvm_config_prog) --libdir)

darwin_AR=llvm-ar
darwin_DSYMUTIL=dsymutil
darwin_NM=llvm-nm
darwin_OBJDUMP=llvm-objdump
darwin_RANLIB=llvm-ranlib
darwin_STRIP=llvm-strip
darwin_LIBTOOL=llvm-libtool-darwin

# Flag explanations:
#
Expand Down Expand Up @@ -37,23 +49,23 @@ clangxx_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang++")
darwin_CC=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \
-u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \
-u LIBRARY_PATH \
$(clang_prog) --target=$(host) -mmacosx-version-min=$(OSX_MIN_VERSION) \
-B$(build_prefix)/bin -mlinker-version=$(LD64_VERSION) \
-isysroot$(OSX_SDK) \
$(clang_prog) --target=$(host) \
-B$(build_prefix)/bin \
-isysroot$(OSX_SDK) -nostdlibinc \
-iwithsysroot/usr/include -iframeworkwithsysroot/System/Library/Frameworks

darwin_CXX=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \
-u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \
-u LIBRARY_PATH \
$(clangxx_prog) --target=$(host) -mmacosx-version-min=$(OSX_MIN_VERSION) \
-B$(build_prefix)/bin -mlinker-version=$(LD64_VERSION) \
$(clangxx_prog) --target=$(host) \
-B$(build_prefix)/bin \
-isysroot$(OSX_SDK) -nostdlibinc \
-iwithsysroot/usr/include/c++/v1 \
-iwithsysroot/usr/include -iframeworkwithsysroot/System/Library/Frameworks

darwin_CFLAGS=-pipe
darwin_CXXFLAGS=$(darwin_CFLAGS)
darwin_CFLAGS=-pipe -mmacosx-version-min=$(OSX_MIN_VERSION) -mlinker-version=$(LD64_VERSION)
darwin_CXXFLAGS=-pipe -mmacosx-version-min=$(OSX_MIN_VERSION) -mlinker-version=$(LD64_VERSION)
darwin_LDFLAGS=-Wl,-platform_version,macos,$(OSX_MIN_VERSION),$(OSX_SDK_VERSION) -Wl,-no_adhoc_codesign -fuse-ld=lld
darwin_ARFLAGS=cr

darwin_release_CFLAGS=-O2
Expand Down
2 changes: 2 additions & 0 deletions contrib/depends/packages/libusb.mk
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ $(package)_version=1.0.27
$(package)_download_path=https://github.com/libusb/libusb/releases/download/v$($(package)_version)
$(package)_file_name=$(package)-$($(package)_version).tar.bz2
$(package)_sha256_hash=ffaa41d741a8a3bee244ac8e54a72ea05bf2879663c098c82fc5757853441575
$(package)_patches=fix-c11-check.patch

define $(package)_preprocess_cmds
patch -p1 < $($(package)_patch_dir)/fix-c11-check.patch && \
cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . && \
autoreconf -i
endef
Expand Down
37 changes: 0 additions & 37 deletions contrib/depends/packages/native_cctools.mk

This file was deleted.

19 changes: 0 additions & 19 deletions contrib/depends/packages/native_libtapi.mk

This file was deleted.

2 changes: 1 addition & 1 deletion contrib/depends/packages/packages.mk
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ mingw32_packages = $(hardware_packages)
mingw32_native_packages = $(hardware_native_packages)

ifneq ($(build_os),darwin)
darwin_native_packages += darwin_sdk native_cctools native_libtapi
darwin_native_packages += darwin_sdk
endif
1 change: 0 additions & 1 deletion contrib/depends/packages/zeromq.mk
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ define $(package)_set_vars
$(package)_config_opts=--without-documentation --disable-shared --without-libsodium --disable-curve
$(package)_config_opts_linux=--with-pic
$(package)_config_opts_freebsd=--with-pic
$(package)_cxxflags=-std=c++11
endef

define $(package)_config_cmds
Expand Down
22 changes: 22 additions & 0 deletions contrib/depends/patches/libusb/fix-c11-check.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
diff --git a/configure.ac b/configure.ac
index 6dc7c698..eebe10a1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,7 +46,7 @@ dnl note that we don't just check if the compiler accepts '-std=x11'
dnl but also that it supports the _Thread_local keyword because some compilers
dnl (e.g. gcc 4.8) accept the command line option but do not implement TLS
saved_CFLAGS="${CFLAGS}"
-CFLAGS="-std=gnu11"
+CFLAGS="${saved_CFLAGS} -std=gnu11"
AC_MSG_CHECKING([if $CC supports -std=gnu11])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_Thread_local int x;], [x = 42;])],
[AC_MSG_RESULT([yes])
@@ -55,7 +55,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_Thread_local int x;], [x = 42;])],
c_dialect=])
if test "x$c_dialect" != xgnu; then
dnl fallback check for -std=c11 compiler support (required)
- CFLAGS="-std=c11"
+ CFLAGS="${saved_CFLAGS} -std=c11"
AC_MSG_CHECKING([if $CC supports -std=c11])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_Thread_local int x;], [x = 42;])],
[AC_MSG_RESULT([yes])],
12 changes: 0 additions & 12 deletions contrib/depends/patches/native_cctools/no-build-date.patch

This file was deleted.

31 changes: 0 additions & 31 deletions contrib/depends/patches/native_libtapi/no_embed_git_rev.patch

This file was deleted.

12 changes: 7 additions & 5 deletions contrib/depends/toolchain.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,16 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
SET(_CMAKE_TOOLCHAIN_PREFIX @prefix@/native/bin/${CONF_TRIPLE}-)
SET(CMAKE_C_COMPILER @CC@)
SET(CMAKE_C_COMPILER_TARGET ${CLANG_TARGET})
SET(CMAKE_C_FLAGS_INIT -B${_CMAKE_TOOLCHAIN_PREFIX})
SET(CMAKE_C_FLAGS "@CFLAGS@")
SET(CMAKE_CXX_COMPILER @CXX@ -stdlib=libc++)
SET(CMAKE_CXX_COMPILER_TARGET ${CLANG_TARGET})
SET(CMAKE_CXX_FLAGS_INIT -B${_CMAKE_TOOLCHAIN_PREFIX})
SET(CMAKE_CXX_FLAGS "@CXXFLAGS@")
set(CMAKE_EXE_LINKER_FLAGS "@LDFLAGS@")
set(CMAKE_MODULE_LINKER_FLAGS "@LDFLAGS@")
set(CMAKE_SHARED_LINKER_FLAGS "@LDFLAGS@")
set(CMAKE_INSTALL_NAME_TOOL llvm-install-name-tool)
SET(CMAKE_ASM_COMPILER clang)
SET(CMAKE_ASM-ATT_COMPILER as)
SET(CMAKE_ASM-ATT_COMPILER llvm-as)
SET(CMAKE_ASM_COMPILER_TARGET ${CLANG_TARGET})
SET(CMAKE_ASM-ATT_COMPILER_TARGET ${CLANG_TARGET})
SET(APPLE True)
Expand All @@ -95,8 +99,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
SET(CMAKE_OSX_SYSROOT "@prefix@/native/SDK/")
SET(CMAKE_OSX_DEPLOYMENT_TARGET "10.13")
SET(CMAKE_CXX_STANDARD 17)
SET(LLVM_ENABLE_PIC OFF)
SET(LLVM_ENABLE_PIE OFF)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
SET(ANDROID TRUE)
if(ARCHITECTURE STREQUAL "arm")
Expand Down
25 changes: 1 addition & 24 deletions contrib/guix/libexec/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -164,20 +164,7 @@ for p in "${PATHS[@]}"; do
done

# Disable Guix ld auto-rpath behavior
case "$HOST" in
*darwin*)
# The auto-rpath behavior is necessary for darwin builds as some native
# tools built by depends refer to and depend on Guix-built native
# libraries
#
# After the native packages in depends are built, the ld wrapper should
# no longer affect our build, as clang would instead reach for
# x86_64-apple-darwin-ld from cctools
;;
*android*)
;;
*) export GUIX_LD_WRAPPER_DISABLE_RPATH=yes ;;
esac
export GUIX_LD_WRAPPER_DISABLE_RPATH=yes

# Make /usr/bin if it doesn't exist
[ -e /usr/bin ] || mkdir -p /usr/bin
Expand Down Expand Up @@ -220,16 +207,6 @@ export GLIBC_DYNAMIC_LINKER=${glibc_dynamic_linker}
# Environment variables for determinism
export TAR_OPTIONS="--owner=0 --group=0 --numeric-owner --mtime='@${SOURCE_DATE_EPOCH}' --sort=name"
export TZ="UTC"
case "$HOST" in
*darwin*)
# cctools AR, unlike GNU binutils AR, does not have a deterministic mode
# or a configure flag to enable determinism by default, it only
# understands if this env-var is set or not. See:
#
# https://github.com/tpoechtrager/cctools-port/blob/55562e4073dea0fbfd0b20e0bf69ffe6390c7f97/cctools/ar/archive.c#L334
export ZERO_AR_DATE=yes
;;
esac

####################
# Depends Building #
Expand Down
5 changes: 3 additions & 2 deletions contrib/guix/manifest.scm
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@ chain for " target " development."))
((string-contains target "darwin")
(list
gcc-toolchain-10
clang-toolchain-11
binutils))
clang-toolchain-17
lld-17
(make-lld-wrapper lld-17 #:lld-as-ld? #t)))
(else '())))))

0 comments on commit 731a6b8

Please sign in to comment.