mirror of https://gitee.com/bigwinds/arangodb
619 lines
17 KiB
CMake
619 lines
17 KiB
CMake
# -*- mode: CMAKE; -*-
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# V8 / ICU
|
|
# ------------------------------------------------------------------------------
|
|
|
|
cmake_minimum_required(VERSION 2.8)
|
|
|
|
if (POLICY CMP0048)
|
|
cmake_policy(SET CMP0048 NEW)
|
|
endif ()
|
|
|
|
project(V8)
|
|
|
|
# create target directory
|
|
|
|
set(V8_DIR "${PROJECT_SOURCE_DIR}/${V8_SUB_DIR}")
|
|
set(V8_TARGET_DIR "${CMAKE_CURRENT_BINARY_DIR}/${V8_SUB_DIR}")
|
|
|
|
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 ("${CMAKE_TARGET_ARCHITECTURES}" STREQUAL "armv7")
|
|
set(V8_PROC_ARCH "arm")
|
|
set(QEMU_ARCH "qemu-arm")
|
|
list(APPEND V8_GYP_ARGS -Darm_version=7 -Darm_fpu=default -Darm_float_abi=default)
|
|
elseif("${CMAKE_TARGET_ARCHITECTURES}" STREQUAL "aarch64")
|
|
set(V8_PROC_ARCH "arm64")
|
|
set(QEMU_ARCH "qemu-aarch64")
|
|
list(APPEND V8_GYP_ARGS -Darm_fpu=default -Darm_float_abi=default)
|
|
else ()
|
|
if ("${BITS}" STREQUAL "64")
|
|
set(V8_PROC_ARCH "x64")
|
|
else ()
|
|
set(V8_PROC_ARCH "ia32")
|
|
endif ()
|
|
endif()
|
|
|
|
|
|
# target architecture
|
|
|
|
file(RELATIVE_PATH V8_REL_TARGET_PATH ${V8_DIR} ${V8_TARGET_DIR})
|
|
|
|
list(APPEND V8_GYP_ARGS
|
|
--generator-output=${V8_TARGET_DIR}
|
|
#$ ${V8_REL_TARGET_PATH}
|
|
-Dv8_target_arch=${V8_PROC_ARCH}
|
|
-Dv8_host_arch=${V8_PROC_ARCH}
|
|
-Dbyteorder=${ENDIANESS}
|
|
# -Dicu_use_data_file_flag=1 not supportet anymore..
|
|
-Dv8_enable_i18n_support=1
|
|
)
|
|
|
|
if (CROSS_COMPILING)
|
|
list(APPEND V8_GYP_ARGS
|
|
-Dhost_arch=${V8_PROC_ARCH}
|
|
-DGYP_CROSSCOMPILE=1
|
|
-DEXECUTABLE_PREFIX=${V8_PROC_ARCH}.
|
|
)
|
|
configure_file (
|
|
"${CMAKE_SOURCE_DIR}/lib/V8/v8-mkpeephole.in"
|
|
"${V8_TARGET_DIR}/${V8_PROC_ARCH}.release/${V8_PROC_ARCH}.mkpeephole"
|
|
NEWLINE_STYLE UNIX
|
|
@ONLY
|
|
)
|
|
configure_file (
|
|
"${CMAKE_SOURCE_DIR}/lib/V8/v8-mksnapshot.in"
|
|
"${V8_TARGET_DIR}/${V8_PROC_ARCH}.release/${V8_PROC_ARCH}.mksnapshot"
|
|
NEWLINE_STYLE UNIX
|
|
@ONLY
|
|
)
|
|
endif()
|
|
|
|
################################################################################
|
|
## ICU EXPORTS
|
|
################################################################################
|
|
|
|
set(ICU_COMPACT_VERSION
|
|
"54"
|
|
CACHE INTERNAL
|
|
"ICU: compact Version"
|
|
)
|
|
|
|
set(ICU_VERSION
|
|
"${ICU_COMPACT_VERSION}.1"
|
|
CACHE INTERNAL
|
|
"ICU: Version"
|
|
)
|
|
|
|
set(ICU_BASEDIR ${V8_DIR}/third_party/icu)
|
|
|
|
set(ICU_INCLUDE_DIR
|
|
${ICU_BASEDIR}/source/common;${ICU_BASEDIR}/source/i18n;${ICU_BASEDIR}/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;${V8_DIR}
|
|
CACHE INTERNAL
|
|
"${PROJECT_NAME}: include path"
|
|
)
|
|
|
|
|
|
|
|
################################################################################
|
|
## WINDOWS & NINJA
|
|
################################################################################
|
|
if (WIN32 AND ${CMAKE_GENERATOR} MATCHES "Ninja")
|
|
message(STATUS "using generator NINJA on Windows! Still WIP be patient!")
|
|
set(GYP_MAIN ${V8_DIR}/gypfiles/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 "2015")
|
|
# list(APPEND V8_GYP_ARGS "-G msvs_version=2015")
|
|
list(APPEND V8_GYP_ARGS --format ninja)
|
|
#endif()
|
|
|
|
if ("${BITS}" STREQUAL "64")
|
|
set(MS_TARGET_PLATFORM x64)
|
|
else ()
|
|
set(MS_TARGET_PLATFORM Win32)
|
|
endif ()
|
|
|
|
list(APPEND V8_GYP_ARGS -Dtarget_arch=${V8_PROC_ARCH} -Dhost_arch=${V8_PROC_ARCH})
|
|
list(APPEND V8_GYP_ARGS ${V8_DIR}/gypfiles/all.gyp)
|
|
|
|
if ("${V8_TARGET_ARCHS}" STREQUAL "")
|
|
set(V8_TARGET_ARCHS "Debug;Release" CACHE string "V8 targets to build")
|
|
endif()
|
|
list(APPEND V8_GYP_ARGS
|
|
-Dcomponent=static_library
|
|
-Dlibrary=static_library
|
|
#--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
|
|
)
|
|
|
|
add_custom_target(v8_build_ninja)
|
|
|
|
set(NINJA_BUILD_DIR "${V8_TARGET_DIR}/${NINJA_TARGET}")
|
|
|
|
ExternalProject_Add(v8_build_ninja
|
|
SOURCE_DIR
|
|
"${V8_DIR}"
|
|
CONFIGURE_COMMAND
|
|
${PYTHON_EXECUTABLE} ${GYP_MAIN} ${V8_GYP_ARGS}
|
|
BINARY_DIR
|
|
${NINJA_BUILD_DIR}
|
|
BUILD_COMMAND
|
|
${CMAKE_BUILD_TOOL} v8
|
|
STEP_TARGETS
|
|
v8_base v8_libplatform v8_nosnapshot v8_libsampler v8_libbase icui18n icuuc
|
|
INSTALL_COMMAND
|
|
"")
|
|
|
|
list(APPEND LINK_DIRECTORIES "${NINJA_BUILD_DIR}/obj.target/src/")
|
|
|
|
set(V8_LIBS
|
|
"v8_base;v8_libplatform;v8_nosnapshot;v8_libsampler;v8_libbase"
|
|
CACHE INTERNAL
|
|
"${PROJECT_NAME}: Libraries"
|
|
)
|
|
|
|
list(APPEND LINK_DIRECTORIES "${NINJA_BUILD_DIR}/obj/third_party/icu")
|
|
|
|
set(ICU_LIBS
|
|
"icui18n;icuuc"
|
|
CACHE INTERNAL
|
|
"ICU: Libraries"
|
|
)
|
|
|
|
set(LINK_DIRECTORIES "${LINK_DIRECTORIES}" PARENT_SCOPE)
|
|
|
|
elseif (${CMAKE_GENERATOR} MATCHES "Ninja")
|
|
message(STATUS "using generator NINJA!")
|
|
|
|
option(USE_DEBUG_V8 "compile V8 in DEBUG mode" OFF)
|
|
|
|
if (USE_DEBUG_V8)
|
|
set(NINJA_TARGET "optDebug") # one of Debug|Release|Optdebug
|
|
set(V8_TARGET_ARCH "${V8_PROC_ARCH}.debug")
|
|
else ()
|
|
set(NINJA_TARGET "Release") # one of Debug|Release|Optdebug
|
|
set(V8_TARGET_ARCH "${V8_PROC_ARCH}.release")
|
|
endif ()
|
|
|
|
if (USE_DEBUG_V8)
|
|
list(APPEND V8_GYP_ARGS -Dv8_enable_backtrace=1)
|
|
endif ()
|
|
|
|
set(V8_LIBRARY_DIR "${V8_TARGET_DIR}/${V8_TARGET_ARCH}")
|
|
set(ICU_LIBRARY_DIR "${V8_LIBRARY_DIR}")
|
|
|
|
set(GYP_MAIN "${V8_DIR}/gypfiles/gyp_v8")
|
|
|
|
list(APPEND V8_GYP_ARGS ${V8_DIR}/gypfiles/all.gyp)
|
|
list(APPEND V8_GYP_ARGS --format ninja)
|
|
list(APPEND V8_GYP_ARGS -S.${V8_TARGET_ARCH})
|
|
|
|
if (LINUX)
|
|
set(V8_LIBRARY_DIR "${V8_LIBRARY_DIR}/obj.target/src")
|
|
set(ICU_LIBRARY_DIR "${ICU_LIBRARY_DIR}/obj.target/third_party/icu")
|
|
elseif (SOLARIS)
|
|
set(V8_LIBRARY_DIR "${V8_LIBRARY_DIR}/obj.host/src")
|
|
set(ICU_LIBRARY_DIR "${ICU_LIBRARY_DIR}/obj.host/third_party/icu")
|
|
endif ()
|
|
|
|
# Gyp wants to use its own clang if we don't set this:
|
|
list(APPEND V8_GYP_ARGS
|
|
-Dclang=0)
|
|
|
|
list(APPEND V8_GYP_ARGS
|
|
-I${V8_DIR}/gypfiles/standalone.gypi
|
|
--depth=.
|
|
-Dstandalone_static_library=1
|
|
-Dlinux_use_bundled_gold=0
|
|
-Dlinux_use_gold_flags=0
|
|
-Dv8_no_strict_aliasing=1
|
|
-Dwerror=
|
|
)
|
|
|
|
set(NINJA_BUILD_DIR "${V8_TARGET_DIR}/${NINJA_TARGET}")
|
|
|
|
ExternalProject_Add(v8_build
|
|
SOURCE_DIR
|
|
"${V8_DIR}"
|
|
CONFIGURE_COMMAND
|
|
${PYTHON_EXECUTABLE} ${GYP_MAIN} ${V8_GYP_ARGS}
|
|
BINARY_DIR
|
|
${NINJA_BUILD_DIR}
|
|
BUILD_COMMAND
|
|
${CMAKE_BUILD_TOOL} v8
|
|
STEP_TARGETS
|
|
v8_base v8_libplatform v8_nosnapshot v8_libsampler v8_libbase icui18n icuuc
|
|
INSTALL_COMMAND
|
|
"")
|
|
|
|
list(APPEND LINK_DIRECTORIES "${NINJA_BUILD_DIR}/obj/src")
|
|
|
|
set(V8_LIBS
|
|
"v8_base;v8_libplatform;v8_nosnapshot;v8_libsampler;v8_libbase"
|
|
CACHE INTERNAL
|
|
"${PROJECT_NAME}: Libraries"
|
|
)
|
|
|
|
list(APPEND LINK_DIRECTORIES "${NINJA_BUILD_DIR}/obj/third_party/icu")
|
|
|
|
set(ICU_LIBS
|
|
"icui18n;icuuc"
|
|
CACHE INTERNAL
|
|
"ICU: Libraries"
|
|
)
|
|
|
|
set(LINK_DIRECTORIES "${LINK_DIRECTORIES}" PARENT_SCOPE)
|
|
|
|
################################################################################
|
|
## WINDOWS with msbuild
|
|
################################################################################
|
|
|
|
elseif (WIN32)
|
|
MESSAGE("Building V8 for Windows with MSBUILD")
|
|
set(GYP_MAIN gypfiles/gyp_v8)
|
|
|
|
# try to find 2013 in 'Visual Studio 12 2013 Win64'
|
|
if (${CMAKE_GENERATOR} MATCHES "2013")
|
|
list(APPEND V8_GYP_ARGS "-Gmsvs_version=2013")
|
|
endif()
|
|
|
|
# try to find 2015 in 'Visual Studio 14 2015 Win64'
|
|
if (${CMAKE_GENERATOR} MATCHES "2015")
|
|
list(APPEND V8_GYP_ARGS "-Gmsvs_version=2015")
|
|
endif()
|
|
|
|
list(APPEND V8_GYP_ARGS "-GGYP_GENERATORS=msvs")
|
|
list(APPEND V8_GYP_ARGS "-Dmsvs_cygwin_shell=0")
|
|
list(APPEND V8_GYP_ARGS "-Dv8_use_snapshot=false")
|
|
|
|
if ("${BITS}" STREQUAL "64")
|
|
set(MS_TARGET_PLATFORM x64)
|
|
else ()
|
|
set(MS_TARGET_PLATFORM Win32)
|
|
endif ()
|
|
|
|
list(APPEND V8_GYP_ARGS -Dtarget_arch=${V8_PROC_ARCH} -Dhost_arch=${V8_PROC_ARCH})
|
|
list(APPEND V8_GYP_ARGS gypfiles/all.gyp)
|
|
|
|
if ("${V8_TARGET_ARCHS}" STREQUAL "")
|
|
set(V8_TARGET_ARCHS "Debug;Release" CACHE string "V8 targets to build")
|
|
endif()
|
|
set(ENV{GYP_GENERATORS} msvs)
|
|
set(ENV{GYP_MSVS_VERSION} 2015)
|
|
set(ENV{DEPOT_TOOLS_WIN_TOOLCHAIN} 0)
|
|
list(APPEND V8_GYP_ARGS
|
|
-Dcomponent=static_library
|
|
-Dlibrary=static_library
|
|
-Dgenerator_output=${V8_TARGET_DIR}
|
|
-Ggenerator_output=${V8_TARGET_DIR}
|
|
#--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
|
|
)
|
|
|
|
add_custom_target(v8_build)
|
|
|
|
foreach (MS_TARGET_CONF ${V8_TARGET_ARCHS})
|
|
string(TOLOWER ${MS_TARGET_CONF} MS_TARGET_CONF_LOWER)
|
|
|
|
ExternalProject_Add(v8_build_${MS_TARGET_CONF_LOWER}
|
|
BUILD_IN_SOURCE
|
|
TRUE
|
|
WORKING_DIRECTORY
|
|
${V8_DIR}
|
|
SOURCE_DIR
|
|
"${V8_DIR}"
|
|
CONFIGURE_COMMAND
|
|
${CMAKE_COMMAND} -E env GYP_GENERATORS=msvs GYP_MSVS_VERSION=2015 DEPOT_TOOLS_WIN_TOOLCHAIN=0 ${PYTHON_EXECUTABLE} ${GYP_MAIN} ${V8_GYP_ARGS} -Dmode=${MS_TARGET_CONF_LOWER}
|
|
BUILD_COMMAND
|
|
""
|
|
INSTALL_COMMAND
|
|
""
|
|
)
|
|
|
|
add_dependencies(v8_build v8_build_${MS_TARGET_CONF_LOWER})
|
|
|
|
# and now ICU...
|
|
|
|
ExternalProject_Add_Step(v8_build_${MS_TARGET_CONF_LOWER} icu_build_icui18n
|
|
WORKING_DIRECTORY
|
|
${V8_TARGET_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_${MS_TARGET_CONF_LOWER} icu_build_icuuc
|
|
WORKING_DIRECTORY
|
|
${V8_TARGET_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_${MS_TARGET_CONF_LOWER} v8_build_v8
|
|
WORKING_DIRECTORY
|
|
${V8_TARGET_DIR}/gypfiles
|
|
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_${MS_TARGET_CONF_LOWER} v8_build_v8_libbase
|
|
WORKING_DIRECTORY
|
|
${V8_TARGET_DIR}/gypfiles
|
|
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_${MS_TARGET_CONF_LOWER} v8_build_v8_libplatform
|
|
WORKING_DIRECTORY
|
|
${V8_TARGET_DIR}/gypfiles
|
|
COMMAND
|
|
msbuild all.sln /t:v8_libplatform /p:Configuration=${MS_TARGET_CONF} /p:Platform=${MS_TARGET_PLATFORM}
|
|
DEPENDEES
|
|
configure
|
|
DEPENDERS
|
|
build
|
|
)
|
|
|
|
ExternalProject_Add_Step(v8_build_${MS_TARGET_CONF_LOWER} v8_build_v8_libsampler
|
|
WORKING_DIRECTORY
|
|
${V8_TARGET_DIR}/gypfiles
|
|
COMMAND
|
|
msbuild all.sln /t:v8_libsampler /p:Configuration=${MS_TARGET_CONF} /p:Platform=${MS_TARGET_PLATFORM}
|
|
DEPENDEES
|
|
configure
|
|
DEPENDERS
|
|
build
|
|
)
|
|
endforeach ()
|
|
|
|
set(ICU_LIBRARY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}}/../build/Debug")
|
|
set(ICU_LIBRARY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}}/../build/Release")
|
|
|
|
set(ICU_LIBS
|
|
debug "${ICU_LIBRARY_DEBUG}/lib/icui18n.lib"
|
|
optimized "${ICU_LIBRARY_RELEASE}/lib/icui18n.lib"
|
|
|
|
debug "${ICU_LIBRARY_DEBUG}/lib/icuuc.lib"
|
|
optimized "${ICU_LIBRARY_RELEASE}/lib/icuuc.lib"
|
|
|
|
CACHE INTERNAL
|
|
"ICU: Libraries"
|
|
FORCE
|
|
)
|
|
set(V8_LIBRARY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}/build/Debug")
|
|
set(V8_LIBRARY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}/build/Release")
|
|
|
|
set(V8_LIBS
|
|
debug "${V8_LIBRARY_DEBUG}/lib/v8_base_0.lib"
|
|
optimized "${V8_LIBRARY_RELEASE}/lib/v8_base_0.lib"
|
|
|
|
debug "${V8_LIBRARY_DEBUG}/lib/v8_base_1.lib"
|
|
optimized "${V8_LIBRARY_RELEASE}/lib/v8_base_1.lib"
|
|
|
|
debug "${V8_LIBRARY_DEBUG}/lib/v8_base_2.lib"
|
|
optimized "${V8_LIBRARY_RELEASE}/lib/v8_base_2.lib"
|
|
|
|
debug "${V8_LIBRARY_DEBUG}/lib/v8_base_3.lib"
|
|
optimized "${V8_LIBRARY_RELEASE}/lib/v8_base_3.lib"
|
|
|
|
debug "${V8_LIBRARY_DEBUG}/lib/v8_libplatform.lib"
|
|
optimized "${V8_LIBRARY_RELEASE}/lib/v8_libplatform.lib"
|
|
|
|
debug "${V8_LIBRARY_DEBUG}/lib/v8_nosnapshot.lib"
|
|
optimized "${V8_LIBRARY_RELEASE}/lib/v8_nosnapshot.lib"
|
|
|
|
debug "${V8_LIBRARY_DEBUG}/lib/v8_libsampler.lib"
|
|
optimized "${V8_LIBRARY_RELEASE}/lib/v8_libsampler.lib"
|
|
|
|
debug "${V8_LIBRARY_DEBUG}/lib/v8_libbase.lib"
|
|
optimized "${V8_LIBRARY_RELEASE}/lib/v8_libbase.lib"
|
|
|
|
debug "DbgHelp.lib"
|
|
optimized "DbgHelp.lib"
|
|
|
|
CACHE INTERNAL
|
|
"${PROJECT_NAME}: Libraries"
|
|
)
|
|
|
|
else ()
|
|
|
|
################################################################################
|
|
## UNIX
|
|
################################################################################
|
|
|
|
option(USE_DEBUG_V8 "compile V8 in DEBUG mode" OFF)
|
|
|
|
set(V8_CFLAGS "$ENV{V8_CFLAGS}")
|
|
set(V8_CXXFLAGS "$ENV{V8_CXXFLAGS}")
|
|
set(V8_LDFLAGS "$ENV{V8_LDFLAGS}")
|
|
|
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
set(V8_CFLAGS "${V8_CFLAGS} -fno-delete-null-pointer-checks")
|
|
set(V8_CXXFLAGS "${V8_CXXFLAGS} -fno-delete-null-pointer-checks")
|
|
endif()
|
|
|
|
if (USE_DEBUG_V8)
|
|
set(V8_TARGET_ARCH "${V8_PROC_ARCH}.debug")
|
|
else ()
|
|
set(V8_TARGET_ARCH "${V8_PROC_ARCH}.release")
|
|
endif ()
|
|
|
|
if (USE_DEBUG_V8)
|
|
list(APPEND V8_GYP_ARGS -Dv8_enable_backtrace=1)
|
|
endif ()
|
|
|
|
set(V8_LIBRARY_DIR "${V8_TARGET_DIR}/${V8_TARGET_ARCH}")
|
|
set(ICU_LIBRARY_DIR "${V8_LIBRARY_DIR}")
|
|
|
|
set(GYP_MAIN ${V8_DIR}/tools/gyp/gyp_main.py)
|
|
|
|
list(APPEND V8_GYP_ARGS gypfiles/all.gyp)
|
|
list(APPEND V8_GYP_ARGS --format make)
|
|
list(APPEND V8_GYP_ARGS -S.${V8_TARGET_ARCH})
|
|
|
|
if (LINUX)
|
|
set(V8_LIBRARY_DIR "${V8_LIBRARY_DIR}/obj.target/src")
|
|
set(ICU_LIBRARY_DIR "${ICU_LIBRARY_DIR}/obj.target/third_party/icu")
|
|
elseif (SOLARIS)
|
|
set(V8_LIBRARY_DIR "${V8_LIBRARY_DIR}/obj.host/src")
|
|
set(ICU_LIBRARY_DIR "${ICU_LIBRARY_DIR}/obj.host/third_party/icu")
|
|
endif ()
|
|
|
|
list(APPEND V8_GYP_ARGS
|
|
-Igypfiles/standalone.gypi
|
|
-Dmac_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}
|
|
--depth=.
|
|
-Dstandalone_static_library=1
|
|
-Dlinux_use_bundled_gold=0
|
|
-Dlinux_use_gold_flags=0
|
|
-Dv8_no_strict_aliasing=1
|
|
-Dwerror=
|
|
-Dv8_use_snapshot=true )
|
|
|
|
if (APPLE AND CMAKE_COMPILER_IS_CLANG)
|
|
set(V8_CXXFLAGS "${V8_CXXFLAGS} -stdlib=libc++")
|
|
set(V8_LDFLAGS "${V8_LDFLAGS} -stdlib=libc++")
|
|
endif ()
|
|
|
|
if (USE_DEBUG_V8)
|
|
set(V8_BUILDTYPE Debug)
|
|
else ()
|
|
set(V8_BUILDTYPE Release)
|
|
endif ()
|
|
|
|
set(V8_COMPILE_ARGS
|
|
-C ${V8_TARGET_DIR}
|
|
-f Makefile.${V8_TARGET_ARCH}
|
|
BUILDTYPE=${V8_BUILDTYPE}
|
|
builddir=${V8_TARGET_DIR}/${V8_TARGET_ARCH}
|
|
CC=${CMAKE_C_COMPILER}
|
|
CXX=${CMAKE_CXX_COMPILER}
|
|
CFLAGS=${V8_CFLAGS}
|
|
CXXFLAGS=${V8_CXXFLAGS}
|
|
LDFLAGS=${V8_LDFLAGS}
|
|
)
|
|
|
|
list(APPEND V8_COMPILE_ARGS icui18n icuuc)
|
|
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_libplatform v8_nosnapshot v8_libsampler v8_libbase icui18n icuuc
|
|
INSTALL_COMMAND
|
|
"")
|
|
|
|
list(APPEND LINK_DIRECTORIES "${V8_LIBRARY_DIR}")
|
|
|
|
set(V8_LIBS
|
|
"v8_base;v8_libplatform;v8_nosnapshot;v8_libsampler;v8_libbase"
|
|
CACHE INTERNAL
|
|
"${PROJECT_NAME}: Libraries"
|
|
)
|
|
|
|
list(APPEND LINK_DIRECTORIES "${ICU_LIBRARY_DIR}")
|
|
|
|
set(ICU_LIBS
|
|
"icui18n;icuuc"
|
|
CACHE INTERNAL
|
|
"ICU: Libraries"
|
|
)
|
|
|
|
set(LINK_DIRECTORIES "${LINK_DIRECTORIES}" PARENT_SCOPE)
|
|
endif()
|
|
|
|
set(ICU_DT "${ICU_BASEDIR}/common/icudtl.dat")
|
|
set(ICU_DT ${ICU_DT} PARENT_SCOPE)
|
|
set(ICU_DT_DEST "icudtl.dat" )
|
|
set(ICU_DT_DEST ${ICU_DT_DEST} PARENT_SCOPE)
|
|
|
|
|
|
if (MSVC)
|
|
add_custom_command(
|
|
TARGET v8_build POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ICU_DT} ${CMAKE_BINARY_DIR}/bin/$<CONFIG>/${ICU_DT_DEST})
|
|
|
|
add_custom_command(
|
|
TARGET v8_build POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ICU_DT} ${CMAKE_BINARY_DIR}/tests/$<CONFIG>/${ICU_DT_DEST})
|
|
else()
|
|
add_custom_command(
|
|
TARGET v8_build POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ICU_DT} ${CMAKE_BINARY_DIR}/bin/${ICU_DT_DEST})
|
|
|
|
add_custom_command(
|
|
TARGET v8_build POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${ICU_DT} ${CMAKE_BINARY_DIR}/tests/${ICU_DT_DEST})
|
|
endif()
|
|
if (NOT WIN32)
|
|
add_custom_target(nonthinV8
|
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../../Installation/archive-de-thinner.sh ${V8_REL_TARGET_PATH}
|
|
COMMENT de-thins V8 .a files)
|
|
endif()
|