summaryrefslogtreecommitdiffstats
path: root/rules/cross-clang.make
blob: 9919b2dc5e49c2c9735b0b659b1bc645619dbd37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# -*-makefile-*-
#
# Copyright (C) 2019 by Michael Olbrich <m.olbrich@pengutronix.de>
#
# See CREDITS for details about who has contributed to this project.
#
# For further information about the PTXdist project and license conditions
# see the README file.
#

#
# We provide this package
#
CROSS_PACKAGES-$(PTXCONF_CROSS_CLANG) += cross-clang

#
# Paths and names
#
CROSS_CLANG_VERSION		:= $(call remove_quotes,$(PTXCONF_CROSS_CLANG_VERSION))
CROSS_CLANG_MD5			:= $(call remove_quotes,$(PTXCONF_CROSS_CLANG_MD5))
CROSS_CLANG			:= cfe-$(CROSS_CLANG_VERSION)
CROSS_CLANG_SUFFIX		:= src.tar.xz
CROSS_CLANG_URL			:= \
	https://releases.llvm.org/$(CROSS_CLANG_VERSION)/$(CROSS_CLANG).$(CROSS_CLANG_SUFFIX) \
	https://github.com/llvm/llvm-project/releases/download/llvmorg-$(CROSS_CLANG_VERSION)/$(CROSS_CLANG).$(CROSS_CLANG_SUFFIX)
CROSS_CLANG_SOURCE		:= $(SRCDIR)/$(CROSS_CLANG).$(CROSS_CLANG_SUFFIX)
CROSS_CLANG_DIR			:= $(CROSS_BUILDDIR)/$(CROSS_CLANG)
CROSS_CLANG_LICENSE		:= $(call remove_quotes,$(PTXCONF_CROSS_CLANG_LICENSE))
CROSS_CLANG_LICENSE_FILES	:= $(call remove_quotes,$(PTXCONF_CROSS_CLANG_LICENSE_FILES))

# ----------------------------------------------------------------------------
# Prepare
# ----------------------------------------------------------------------------

#
# autoconf
#
CROSS_CLANG_CONF_TOOL	:= cmake
CROSS_CLANG_CONF_OPT	 = \
	$(HOST_CMAKE_OPT) \
	-G Ninja \
	-DCMAKE_INSTALL_PREFIX=$(PTXCONF_PREFIX_CROSS) \
	-DCMAKE_SKIP_INSTALL_RPATH=ON \
	-DCMAKE_SKIP_RPATH=ON \
	-DENABLE_LINKER_BUILD_ID=ON \
	-DLLVM_ENABLE_LIBXML2=OFF \
	-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON \
	-DLLVM_CONFIG=$(CROSS_LLVM_DIR)-build/bin/llvm-config

CROSS_CLANG_LDFLAGS	:= \
	-Wl,-rpath,$$ORIGIN/../lib

# ----------------------------------------------------------------------------
# Install
# ----------------------------------------------------------------------------

CROSS_CLANG_CROSS_TOOLS := \
	clang \
	clang++ \
	clang-cpp

CROSS_CLANG_TARGET_EXTRA := \
	--target=$(PTXCONF_GNU_TARGET) \
	$(filter-out --%, \
	$(subst --with-arch,-march, \
	$(subst --with-cpu,-mcpu, \
	$(subst --with-float,-mfloat-abi, \
	$(subst --with-fpu,-mfpu, \
	$(subst --with-fpmath,-mfpmath, \
	$(subst --with-mode=,-m, \
	$(subst --with-tune,-mtune, \
	$(PTXCONF_CROSS_GCC_CONFIG_EXTRA)))))))))

define ptx/cross-clang-wrapper-impl
rm -f '$(2)'
echo '#!/bin/sh' > '$(2)'
echo 'd="$$(dirname $$(readlink -f "$${0}"))"' >> '$(2)'
echo '. "$$d/.$(PTXCONF_GNU_TARGET).flags"' >> '$(2)'
echo 'exec "$$d/$(1)" $${flags} \
	--sysroot="$$(dirname "$$d")/sysroot-$(PTXCONF_GNU_TARGET)" "$$@"' \
		>> '$(2)'
chmod +x '$(2)'

endef
define ptx/cross-clang-wrapper
$(call ptx/cross-clang-wrapper-impl,$(strip $(1)),$(strip \
	$(CROSS_CLANG_PKGDIR)$(PTXCONF_PREFIX_CROSS)/bin/$(PTXCONF_GNU_TARGET)-$(tool)))
endef

$(STATEDIR)/cross-clang.install:
	@$(call targetinfo)
	@$(call world/install, CROSS_CLANG)
	@echo "flags='$(CROSS_CLANG_TARGET_EXTRA)'" > $(CROSS_CLANG_PKGDIR)$(PTXCONF_PREFIX_CROSS)/bin/.$(PTXCONF_GNU_TARGET).flags
	@$(foreach tool,$(CROSS_CLANG_CROSS_TOOLS), \
		$(call ptx/cross-clang-wrapper,$(tool)))
	@$(call touch)

# vim: syntax=make