mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.2 KiB
92 lines
3.2 KiB
#
|
|
# v8 build stuff
|
|
#
|
|
|
|
string(TOLOWER ${CMAKE_BUILD_TYPE} v8mode)
|
|
set(v8arch ${node_arch})
|
|
|
|
if(${node_arch} MATCHES x86_64)
|
|
set(v8arch x64)
|
|
elseif(${node_arch} MATCHES x86)
|
|
set(v8arch ia32)
|
|
endif()
|
|
|
|
|
|
if(NOT SHARED_V8)
|
|
if(V8_SNAPSHOT)
|
|
set(v8snapshot snapshot=on)
|
|
endif()
|
|
|
|
if(${node_platform} MATCHES darwin)
|
|
execute_process(COMMAND hwprefs cpu_count OUTPUT_VARIABLE cpu_count)
|
|
elseif(${node_platform} MATCHES linux)
|
|
execute_process(COMMAND sh -c "cat /proc/cpuinfo | grep processor | sort | uniq | wc -l"
|
|
OUTPUT_VARIABLE cpu_count)
|
|
elseif(${node_platform} MATCHES sunos)
|
|
execute_process(COMMAND sh -c "psrinfo | wc -l" OUTPUT_VARIABLE cpu_count)
|
|
else()
|
|
set(cpu_count 1)
|
|
endif()
|
|
|
|
if(${cpu_count} GREATER 1)
|
|
math(EXPR parallel_jobs ${cpu_count}*2)
|
|
else()
|
|
set(parallel_jobs 1)
|
|
endif()
|
|
|
|
add_library(v8 STATIC IMPORTED)
|
|
set_property(TARGET v8
|
|
PROPERTY IMPORTED_LOCATION ${PROJECT_BINARY_DIR}/deps/v8/${v8_fn})
|
|
|
|
set(compile_env_vars "CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} AR=${CMAKE_AR} RANLIB=${CMAKE_RANLIB} CFLAGS=\"${CMAKE_C_FLAGS}\" CXXFLAGS=\"${CMAKE_CXX_FLAGS}\" LDFLAGS=\"${CMAKE_EXE_LINKER_FLAGS}\"")
|
|
|
|
if(CMAKE_VERSION VERSION_GREATER 2.8 OR CMAKE_VERSION VERSION_EQUAL 2.8)
|
|
# use ExternalProject for CMake >2.8
|
|
include(ExternalProject)
|
|
|
|
ExternalProject_Add(v8_extprj
|
|
URL ${PROJECT_SOURCE_DIR}/deps/v8
|
|
|
|
BUILD_IN_SOURCE True
|
|
BUILD_COMMAND sh -c "${compile_env_vars} ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/tools/scons/scons.py library=static visibility=default ${v8snapshot} mode=${v8mode} verbose=on arch=${v8arch} -j ${parallel_jobs}"
|
|
|
|
SOURCE_DIR ${PROJECT_BINARY_DIR}/deps/v8
|
|
# ignore this stuff, it's not needed for building v8 but ExternalProject
|
|
# demands these steps
|
|
|
|
CONFIGURE_COMMAND "true" # fake configure
|
|
INSTALL_COMMAND "true" # fake install
|
|
)
|
|
|
|
add_dependencies(node v8_extprj)
|
|
else()
|
|
# copy v8 sources inefficiently with CMake versions <2.8
|
|
file(GLOB_RECURSE v8_sources RELATIVE ${PROJECT_SOURCE_DIR} deps/v8/*)
|
|
|
|
if(NOT ${in_source_build})
|
|
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/deps/v8)
|
|
|
|
foreach(FILE ${v8_sources})
|
|
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/${FILE}
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/${FILE} ${PROJECT_BINARY_DIR}/${FILE}
|
|
DEPENDS ${PROJECT_SOURCE_DIR}/${FILE}
|
|
)
|
|
list(APPEND v8_sources_dest ${PROJECT_BINARY_DIR}/${FILE})
|
|
endforeach()
|
|
else()
|
|
set(v8_sources_dest ${v8_sources})
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT ${PROJECT_BINARY_DIR}/deps/v8/${v8_fn}
|
|
COMMAND sh -c "${compile_env_vars} ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/tools/scons/scons.py library=static visibility=default ${v8snapshot} mode=${v8mode} verbose=on arch=${v8arch} -j ${parallel_jobs}"
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/deps/v8/
|
|
DEPENDS ${v8_sources_dest}
|
|
)
|
|
|
|
add_custom_target(v8_stock ALL DEPENDS ${PROJECT_BINARY_DIR}/deps/v8/${v8_fn})
|
|
set_property(TARGET v8 PROPERTY
|
|
IMPORTED_LOCATION ${PROJECT_BINARY_DIR}/deps/v8/${v8_fn})
|
|
add_dependencies(node v8_stock)
|
|
endif()
|
|
endif()
|
|
|