1
0
Fork 0
arangodb/3rdParty/V8/CMakeLists.txt

326 lines
7.9 KiB
CMake

# -*- mode: CMAKE; -*-
# ------------------------------------------------------------------------------
# V8 / ICU
# ------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.0)
if (POLICY CMP0048)
cmake_policy(SET CMP0048 NEW)
endif ()
project(V8)
set(V8_VERSION 4.3.61)
option(USE_DEBUG_V8 "compile V8 in DEBUG mode" OFF)
# create target directory
set(V8_DIR "${CMAKE_CURRENT_SOURCE_DIR}/V8-${V8_VERSION}")
set(V8_TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}/v8")
file(MAKE_DIRECTORY ${V8_TARGET_DIR})
# detect endianess, and translate to gyp/v8 proper string
include(TestBigEndian)
TEST_BIG_ENDIAN(IS_BIGENDIAN)
if (${IS_BIGENDIAN})
set(ENDIANESS 'big')
else()
set(ENDIANESS 'little')
endif()
# detect 32bit or 64bit
if ("${BITS}" STREQUAL "64")
set(V8_PROC_ARCH "x64")
else ()
message(ERROR "#### WILLY FIX ME ####")
set(V8_PROC_ARCH "ia32")
endif () # TODO: ARM? Win32?
# target architecture
if (USE_DEBUG_V8)
set(V8_TARGET_ARCH "${V8_PROC_ARCH}.debug")
else ()
set(V8_TARGET_ARCH "${V8_PROC_ARCH}.release")
endif ()
list(APPEND V8_GYP_ARGS
--generator-output=${V8_TARGET_DIR}
-Dv8_target_arch=${V8_PROC_ARCH}
-Dbyteorder=${ENDIANESS}
-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
)
if (USE_DEBUG_V8)
list(APPEND V8_GYP_ARGS -Dv8_enable_backtrace=1)
endif ()
# library directories
set(V8_LIBRARY_DIR "${V8_TARGET_DIR}/${V8_TARGET_ARCH}")
set(ICU_LIBRARY_DIR "${V8_LIBRARY_DIR}")
################################################################################
## ICU EXPORTS
################################################################################
set(ICU_VERSION
"54.1"
CACHE INTERNAL
"ICU: Version"
)
set(ICU_INCLUDE_DIR
${V8_DIR}/third_party/icu/source/common;${V8_DIR}/third_party/icu/source/i18n;${V8_DIR}/third_party/icu/source/io
CACHE INTERNAL
"ICU: include path"
FORCE
)
set(V8_VERSION
${V8_VERSION}
CACHE INTERNAL
"${PROJECT_NAME}: Version"
)
set(V8_INCLUDE_DIR
${V8_DIR}/include
CACHE INTERNAL
"${PROJECT_NAME}: include path"
)
################################################################################
## WINDOWS
################################################################################
if (WIN32)
set(GYP_MAIN ${V8_DIR}/build/gyp_v8)
# try to find 2013 in 'Visual Studio 12 2013 Win64'
if (${CMAKE_GENERATOR} MATCHES "2013")
list(APPEND V8_GYP_ARGS "-G msvs_version=2013")
endif()
# try to find 2015 in 'Visual Studio 14 2015 Win64'
if (${CMAKE_GENERATOR} MATCHES "2013")
list(APPEND V8_GYP_ARGS "-G msvs_version=2015")
endif()
if ("${BITS}" STREQUAL "64")
set(MS_TARGET_PLATFORM x64)
else ()
set(MS_TARGET_PLATFORM Win32)
endif ()
if (USE_DEBUG_V8)
set(MS_TARGET_CONF Debug)
else ()
set(MS_TARGET_CONF Release)
endif ()
list(APPEND V8_GYP_ARGS -Dtarget_arch=${V8_PROC_ARCH} -Dhost_arch=${V8_PROC_ARCH})
list(APPEND V8_GYP_ARGS ${V8_DIR}/build/all.gyp)
list(APPEND V8_GYP_ARGS
-Dcomponent=static_library
-Dlibrary=static_library
-Dmode=${WIN_GYP_RELEASE_TYPE}
#--depth=2
#-Dv8_use_external_startup_data=1
#-Dicu_gyp_path=../third_party/icu/icu.gyp
#-Dv8_optimized_debug=0
#-Dos_posix=0
#-Dclang=0
#-Dwant_separate_host_toolset=0
#-Dwant_separate_host_toolset=0
)
set(V8_TARGETS "v8\;v8_libbase\;v8_libplatform")
set(ICU_TARGETS "icudata\;icui18n\;icuuc")
ExternalProject_Add(v8_build
BUILD_IN_SOURCE
TRUE
WORKING_DIRECTORY
${V8_DIR}/build
SOURCE_DIR
"${V8_DIR}"
CONFIGURE_COMMAND
${PYTHON_EXECUTABLE} ${GYP_MAIN} ${V8_GYP_ARGS}
BUILD_COMMAND
""
INSTALL_COMMAND
""
)
# and now ICU...
ExternalProject_Add_Step(v8_build icu_build_icudata
WORKING_DIRECTORY
${V8_DIR}/third_party/icu
COMMAND
msbuild icu.sln /t:icudata /p:Configuration=${MS_TARGET_CONF} /p:Platform=${MS_TARGET_PLATFORM}
DEPENDEES
configure
DEPENDERS
build
)
ExternalProject_Add_Step(v8_build icu_build_icui18n
WORKING_DIRECTORY
${V8_DIR}/third_party/icu
COMMAND
msbuild icu.sln /t:icui18n /p:Configuration=${MS_TARGET_CONF} /p:Platform=${MS_TARGET_PLATFORM}
DEPENDEES
configure
DEPENDERS
build
)
ExternalProject_Add_Step(v8_build icu_build_icuuc
WORKING_DIRECTORY
${V8_DIR}/third_party/icu
COMMAND
msbuild icu.sln /t:icuuc /p:Configuration=${MS_TARGET_CONF} /p:Platform=${MS_TARGET_PLATFORM}
DEPENDEES
configure
DEPENDERS
build
)
# cmake eats semicolons or quotes them or, or, or so we can't use /t:a;b;c
ExternalProject_Add_Step(v8_build v8_build_v8
WORKING_DIRECTORY
${V8_DIR}/build
COMMAND
msbuild all.sln /t:v8 /p:Configuration=${MS_TARGET_CONF} /p:Platform=${MS_TARGET_PLATFORM}
DEPENDEES
configure
DEPENDERS
build
)
ExternalProject_Add_Step(v8_build v8_build_v8_libbase
WORKING_DIRECTORY
${V8_DIR}/build
COMMAND
msbuild all.sln /t:v8_libbase /p:Configuration=${MS_TARGET_CONF} /p:Platform=${MS_TARGET_PLATFORM}
DEPENDEES
configure
DEPENDERS
build
)
ExternalProject_Add_Step(v8_build v8_build_v8_libplatform
WORKING_DIRECTORY
${V8_DIR}/build
COMMAND
msbuild all.sln /t:v8_libplatform /p:Configuration=${MS_TARGET_CONF} /p:Platform=${MS_TARGET_PLATFORM}
DEPENDEES
configure
DEPENDERS
build
)
set(ICU_LIBRARY_DIR "${V8_DIR}/build/${CMAKE_BUILD_TYPE_INIT}/")
set(ICU_LIBS
"${ICU_LIBRARY_DIR}/lib/icui18n.lib;${ICU_LIBRARY_DIR}/lib/icuuc.lib"
CACHE INTERNAL
"ICU: Libraries"
FORCE
)
set(V8_LIBRARY_DIR "${V8_DIR}/build/${CMAKE_BUILD_TYPE_INIT}")
set(V8_LIBS
"${V8_LIBRARY_DIR}/lib/v8_base.lib;${V8_LIBRARY_DIR}/lib/v8_libbase.lib;${V8_LIBRARY_DIR}/lib/v8_libplatform.lib;${V8_LIBRARY_DIR}/lib/v8_nosnapshot.lib"
CACHE INTERNAL
"${PROJECT_NAME}: Libraries"
)
else ()
################################################################################
## UNIX
################################################################################
set(GYP_MAIN ${V8_DIR}/build/gyp/gyp_main.py)
list(APPEND V8_GYP_ARGS build/all.gyp)
list(APPEND V8_GYP_ARGS --format make)
list(APPEND V8_GYP_ARGS -S.${V8_TARGET_ARCH})
if (LINUX OR SOLARIS)
set(V8_LIBRARY_DIR "${V8_LIBRARY_DIR}/obj.target/tools/gyp")
set(ICU_LIBRARY_DIR "${ICU_LIBRARY_DIR}/obj.target/third_party/icu")
endif ()
list(APPEND V8_GYP_ARGS
-Ibuild/standalone.gypi
--depth=.
-Dstandalone_static_library=1
-Dlinux_use_bundled_gold=0
-Dlinux_use_gold_flags=0
-Dv8_no_strict_aliasing=1
-Dwerror=
)
set(V8_COMPILE_ARGS
-C ${V8_TARGET_DIR}
-f Makefile.${V8_TARGET_ARCH}
BUILDTYPE=Release
builddir=${V8_TARGET_DIR}/${V8_TARGET_ARCH}
CC=${CMAKE_C_COMPILER}
CXX=${CMAKE_CXX_COMPILER}
)
if (APPLE AND CMAKE_COMPILER_IS_CLANG)
list(APPEND V8_COMPILE_ARGS CXXFLAGS=-stdlib=libc++ LDFLAGS=-stdlib=libc++)
endif ()
list(APPEND V8_COMPILE_ARGS icui18n icuuc icudata)
list(APPEND V8_COMPILE_ARGS v8)
ExternalProject_Add(v8_build
BUILD_IN_SOURCE
TRUE
SOURCE_DIR
"${V8_DIR}"
CONFIGURE_COMMAND
${PYTHON_EXECUTABLE} ${GYP_MAIN} ${V8_GYP_ARGS}
BUILD_COMMAND
$(MAKE) ${V8_COMPILE_ARGS}
STEP_TARGETS
v8_base v8_libbase v8_libplatform v8_nosnapshot icui18n icuuc icudata
INSTALL_COMMAND
"")
list(APPEND LINK_DIRECTORIES "${V8_LIBRARY_DIR}")
set(V8_LIBS
"v8_base;v8_libbase;v8_libplatform;v8_nosnapshot"
CACHE INTERNAL
"${PROJECT_NAME}: Libraries"
)
list(APPEND LINK_DIRECTORIES "${ICU_LIBRARY_DIR}")
set(ICU_LIBS
"icui18n;icuuc;icudata"
CACHE INTERNAL
"ICU: Libraries"
)
endif()
################################################################################
## EXPORTS
################################################################################
set(LINK_DIRECTORIES "${LINK_DIRECTORIES}" PARENT_SCOPE)