|
|
|
#
|
|
|
|
# node build stuff
|
|
|
|
#
|
|
|
|
|
|
|
|
set(macros_file ${PROJECT_BINARY_DIR}/macros.py)
|
|
|
|
|
|
|
|
# replace debug(x) and assert(x) with nothing in release build
|
|
|
|
if(${CMAKE_BUILD_TYPE} MATCHES Release)
|
|
|
|
file(APPEND ${macros_file} "macro debug(x) = void(0);\n")
|
|
|
|
file(APPEND ${macros_file} "macro assert(x) = void(0);\n")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(NOT DTRACE)
|
|
|
|
set(dtrace_probes
|
|
|
|
DTRACE_HTTP_CLIENT_REQUEST
|
|
|
|
DTRACE_HTTP_CLIENT_RESPONSE
|
|
|
|
DTRACE_HTTP_SERVER_REQUEST
|
|
|
|
DTRACE_HTTP_SERVER_RESPONSE
|
|
|
|
DTRACE_NET_SERVER_CONNECTION
|
|
|
|
DTRACE_NET_STREAM_END
|
|
|
|
DTRACE_NET_SOCKET_READ
|
|
|
|
DTRACE_NET_SOCKET_WRITE)
|
|
|
|
foreach(probe ${dtrace_probes})
|
|
|
|
file(APPEND ${macros_file} "macro ${probe}(x) = void(0);\n")
|
|
|
|
endforeach()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Sort the JS files being built into natives so that the build is
|
|
|
|
# deterministic
|
|
|
|
list(SORT js2c_files)
|
|
|
|
|
|
|
|
# include macros file in generation
|
|
|
|
set(js2c_files ${js2c_files} ${macros_file})
|
|
|
|
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT ${PROJECT_BINARY_DIR}/src/node_natives.h
|
|
|
|
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/tools/js2c.py ${PROJECT_BINARY_DIR}/src/node_natives.h ${js2c_files}
|
|
|
|
DEPENDS ${js2c_files})
|
|
|
|
|
|
|
|
set(node_platform_src "src/platform_${node_platform}.cc")
|
|
|
|
|
|
|
|
if(NOT EXISTS ${CMAKE_SOURCE_DIR}/${node_platform_src})
|
|
|
|
set(node_extra_src ${node_extra_src} "src/platform_none.cc")
|
|
|
|
else()
|
|
|
|
set(node_extra_src ${node_extra_src} ${node_platform_src})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set(node_sources
|
|
|
|
src/node_main.cc
|
|
|
|
src/node.cc
|
|
|
|
src/node_buffer.cc
|
|
|
|
src/node_javascript.cc
|
|
|
|
src/node_extensions.cc
|
|
|
|
src/node_http_parser.cc
|
|
|
|
src/node_constants.cc
|
|
|
|
src/node_file.cc
|
|
|
|
src/node_script.cc
|
|
|
|
src/node_os.cc
|
|
|
|
src/node_dtrace.cc
|
|
|
|
src/node_string.cc
|
|
|
|
src/timer_wrap.cc
|
|
|
|
src/handle_wrap.cc
|
|
|
|
src/stream_wrap.cc
|
|
|
|
src/tcp_wrap.cc
|
|
|
|
src/pipe_wrap.cc
|
|
|
|
src/cares_wrap.cc
|
|
|
|
src/stdio_wrap.cc
|
|
|
|
src/process_wrap.cc
|
|
|
|
src/node_cares.cc
|
|
|
|
src/node_net.cc
|
|
|
|
src/node_signal_watcher.cc
|
|
|
|
src/node_stat_watcher.cc
|
|
|
|
src/node_io_watcher.cc
|
|
|
|
src/node_stdio.cc
|
|
|
|
src/node_child_process.cc
|
|
|
|
src/node_timer.cc
|
|
|
|
src/node_natives.h
|
|
|
|
${node_extra_src})
|
|
|
|
|
|
|
|
# Set up PREFIX, CCFLAGS, and CPPFLAGS for node_config.h
|
|
|
|
set(PREFIX ${CMAKE_INSTALL_PREFIX})
|
|
|
|
if(${CMAKE_BUILD_TYPE} MATCHES Debug)
|
|
|
|
set(CCFLAGS "${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_FLAGS}")
|
|
|
|
else()
|
|
|
|
set(CCFLAGS "${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_FLAGS}")
|
|
|
|
endif()
|
|
|
|
get_directory_property(compile_defs COMPILE_DEFINITIONS)
|
|
|
|
foreach(def ${compile_defs})
|
|
|
|
set(CPPFLAGS "${CPPFLAGS} -D${def}")
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
configure_file(src/node_config.h.in ${PROJECT_BINARY_DIR}/src/node_config.h ESCAPE_QUOTES)
|
|
|
|
configure_file(config.h.cmake ${PROJECT_BINARY_DIR}/config.h)
|
|
|
|
|
|
|
|
include_directories(
|
|
|
|
src
|
|
|
|
deps/libeio
|
|
|
|
deps/http_parser
|
|
|
|
${V8_INCLUDE_DIR}
|
|
|
|
${LIBUV_INCLUDE_DIR}
|
|
|
|
|
|
|
|
${PROJECT_BINARY_DIR}
|
|
|
|
${PROJECT_BINARY_DIR}/src
|
|
|
|
)
|
|
|
|
|
|
|
|
if(DTRACE)
|
|
|
|
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src/node_provider.h
|
|
|
|
COMMAND ${dtrace_bin} -x nolibs -h -o ${PROJECT_BINARY_DIR}/src/node_provider.h -s ${PROJECT_SOURCE_DIR}/src/node_provider.d
|
|
|
|
DEPENDS ${PROJECT_SOURCE_DIR}/src/node_provider.d)
|
|
|
|
|
|
|
|
set(node_sources ${node_sources} src/node_provider.o)
|
|
|
|
set(node_sources src/node_provider.h ${node_sources})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
add_executable(node ${node_sources})
|
|
|
|
set_target_properties(node PROPERTIES DEBUG_POSTFIX "_g")
|
|
|
|
target_link_libraries(node
|
|
|
|
uv
|
|
|
|
http_parser
|
|
|
|
${V8_LIBRARY_PATH}
|
|
|
|
${CMAKE_THREAD_LIBS_INIT}
|
|
|
|
${extra_libs})
|
|
|
|
|
|
|
|
if(DTRACE)
|
|
|
|
# manually gather up the object files for dtrace
|
|
|
|
get_property(sourcefiles TARGET node PROPERTY SOURCES)
|
|
|
|
foreach(src_file ${sourcefiles})
|
|
|
|
if(src_file MATCHES ".*\\.cc$")
|
|
|
|
set(node_objs ${node_objs} ${PROJECT_BINARY_DIR}/CMakeFiles/node.dir/${src_file}.o)
|
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/src/node_provider.o
|
|
|
|
#COMMAND cmake -E echo ${node_objs}
|
|
|
|
COMMAND ${dtrace_bin} -G -x nolibs -s ${PROJECT_SOURCE_DIR}/src/node_provider.d -o ${PROJECT_BINARY_DIR}/src/node_provider.o ${node_objs}
|
|
|
|
DEPENDS ${node_objs})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
install(TARGETS node RUNTIME DESTINATION bin)
|
|
|
|
install(FILES
|
|
|
|
${PROJECT_BINARY_DIR}/config.h
|
|
|
|
src/node.h
|
|
|
|
src/node_object_wrap.h
|
|
|
|
src/node_buffer.h
|
|
|
|
src/node_version.h
|
|
|
|
${PROJECT_BINARY_DIR}/src/node_config.h
|
|
|
|
|
|
|
|
DESTINATION ${NODE_INCLUDE_PREFIX}/include/node
|
|
|
|
)
|