summaryrefslogtreecommitdiff
blob: cc6119371517ad0a61a21b2409753c9f2a4a711c (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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-lang/v8/v8-9999.ebuild,v 1.48 2013/08/18 03:12:49 steev Exp $

EAPI="5"
PYTHON_COMPAT=( python2_{6,7} )

inherit chromium eutils multilib multiprocessing pax-utils python-any-r1 \
	subversion toolchain-funcs

DESCRIPTION="Google's open source JavaScript engine"
HOMEPAGE="http://code.google.com/p/v8"
ESVN_REPO_URI="http://v8.googlecode.com/svn/trunk"
LICENSE="BSD"

SLOT="0"
KEYWORDS=""
IUSE="icu readline neon"

RDEPEND="icu? ( dev-libs/icu:= )
	readline? ( sys-libs/readline:0 )"
DEPEND="${PYTHON_DEPS}
	${RDEPEND}"

src_unpack() {
	subversion_src_unpack
	cd "${S}"
	make dependencies || die
}

src_prepare() {
	# Make sure no bundled libraries are used.
	find third_party -type f \! -iname '*.gyp*' -delete || die
}

src_configure() {
	tc-export AR CC CXX RANLIB
	export LINK=${CXX}

	local myconf=""

	subversion_wc_info
	soname_version="${PV}.${ESVN_WC_REVISION}"

	# Always build v8 as a shared library with proper SONAME.
	myconf+=" -Dcomponent=shared_library -Dsoname_version=${soname_version}"

	# Use target arch detection logic from bug #354601.
	case ${CHOST} in
		i?86-*)
			myarch="ia32"
			myconf+=" -Dv8_target_arch=ia32" ;;
		x86_64-*)
			if [[ $ABI = x86 ]] ; then
				myarch="ia32"
				myconf+=" -Dv8_target_arch=ia32"
			else
				myarch="x64"
				myconf+=" -Dv8_target_arch=x64"
			fi ;;
		arm*-*)
			myarch="arm"
			myconf+=" -Dv8_target_arch=arm -Darm_fpu=default"
			if [[ ${CHOST} == *-hardfloat-* ]] ; then
				myconf+=" -Dv8_use_arm_eabi_hardfloat=true"
			else
				myconf+=" -Dv8_use_arm_eabi_hardfloat=false"
			fi
			if [[ ${CHOST} == armv7*-* ]] ; then
				myconf+=" -Darmv7=1"
			else
				myconf+=" -Darmv7=0"
			fi
			myconf+=" $(gyp_use neon arm_neon)" ;;
		mips*)
			if [[ ${CHOST} == mips*el* ]] ; then
				myarch="mipsel"
				myconf+=" -Dv8_target_arch=mipsel"
			else
				die "big-endian MIPS is not yet supported"
			fi
			if [[ ${CHOST} == *softfloat* ]] ; then
				myconf+=" -Dv8_use_mips_abi_hardfloat=false"
			else
				myconf+=" -Dv8_use_mips_abi_hardfloat=true"
			fi
			if [[ ${CHOST} == *loongson* ]] ; then
				myconf+=" -Dmips_arch_variant=loongson"
			elif [[ ${CHOST} == mips*64* ]] ; then
				die "generic MIPS 64bit is not yet supported"
			elif [[ ${CHOST} == mips*r2* ]] ; then
				myconf+=" -Dmips_arch_variant=mips32r2"
			else
				myconf+=" -Dmips_arch_variant=mips32"
			fi
			;;
		*) die "Unrecognized CHOST: ${CHOST}"
	esac

	myconf+="
		$(gyp_use icu v8_enable_i18n_support)
		$(gyp_use readline console readline dumb)"

	myconf+="
		-Duse_system_icu=1"

	# Make sure that -Werror doesn't get added to CFLAGS by the build system.
	# Depending on GCC version the warnings are different and we don't
	# want the build to fail because of that.
	myconf+=" -Dwerror="

	EGYP_CHROMIUM_COMMAND=build/gyp_v8 egyp_chromium ${myconf} || die
}

src_compile() {
	local makeargs=(
		-C out
		builddir="${S}/out/Release"
		V=1
		BUILDTYPE=Release
	)

	# Build mksnapshot so we can pax-mark it.
	emake "${makeargs[@]}" mksnapshot.${myarch}
	pax-mark m out/Release/mksnapshot.${myarch}

	# Build everything else.
	emake "${makeargs[@]}"
	pax-mark m out/Release/{cctest,d8,preparser}
}

src_test() {
	LD_LIBRARY_PATH=out/Release/lib.target tools/run-tests.py \
		-j$(makeopts_jobs) \
		--no-presubmit \
		--outdir=out \
		--buildbot \
		--arch=native \
		--mode=Release \
		--progress=dots || die
}

src_install() {
	insinto /usr
	doins -r include

	if [[ ${CHOST} == *-darwin* ]] ; then
		# buildsystem is too horrific to get this built correctly
		mkdir -p out/Release/lib.target || die
		mv out/Release/libv8.so.${soname_version} \
			out/Release/lib.target/libv8$(get_libname ${soname_version}) || die
		install_name_tool \
			-id "${EPREFIX}"/usr/$(get_libdir)/libv8$(get_libname) \
			out/Release/lib.target/libv8$(get_libname ${soname_version}) \
			|| die
		install_name_tool \
			-change \
			/usr/local/lib/libv8.so.${soname_version} \
			"${EPREFIX}"/usr/$(get_libdir)/libv8$(get_libname) \
			out/Release/d8 || die
	fi

	dobin out/Release/d8
	pax-mark m "${ED}usr/bin/d8"

	dolib out/Release/lib.target/libv8$(get_libname ${soname_version})
	dosym libv8$(get_libname ${soname_version}) /usr/$(get_libdir)/libv8$(get_libname)

	dodoc AUTHORS ChangeLog
}

# TODO: remove functions below after they are removed from chromium.eclass'
# EXPORT_FUNCTIONS .

pkg_preinst() {
	return
}

pkg_postinst() {
	return
}

pkg_postrm() {
	return
}