Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: Updates for AIX npm support - part 1 #3114

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,10 @@ def configure_node(o):
elif target_arch in ('mips', 'mipsel'):
configure_mips(o)

if flavor == 'aix':
o['variables']['node_core_target_name'] = 'node_base'
o['variables']['node_target_type'] = 'static_library'

if flavor in ('solaris', 'mac', 'linux', 'freebsd'):
use_dtrace = not options.without_dtrace
# Don't enable by default on linux and freebsd
Expand Down
53 changes: 51 additions & 2 deletions node.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
'node_shared_openssl%': 'false',
'node_v8_options%': '',
'node_target_type%': 'executable',
'node_core_target_name%': 'node',
'library_files': [
'src/node.js',
'lib/_debug_agent.js',
Expand Down Expand Up @@ -79,7 +80,7 @@

'targets': [
{
'target_name': 'node',
'target_name': '<(node_core_target_name)',
'type': '<(node_target_type)',

'dependencies': [
Expand Down Expand Up @@ -666,5 +667,53 @@
'test/cctest/util.cc',
],
}
] # end targets
], # end targets

'conditions': [
['OS=="aix"', {
'targets': [
{
'target_name': 'node',
'type': 'executable',
'dependencies': ['<(node_core_target_name)', 'node_exp'],

'include_dirs': [
'src',
'deps/v8/include',
],

'sources': [
'src/node_main.cc',
'<@(library_files)',
# node.gyp is added to the project by default.
'common.gypi',
],

'ldflags': ['-Wl,-bbigtoc,-bE:<(PRODUCT_DIR)/node.exp'],
},
{
'target_name': 'node_exp',
'type': 'none',
'dependencies': [
'<(node_core_target_name)',
],
'actions': [
{
'action_name': 'expfile',
'inputs': [
'<(OBJ_DIR)'
],
'outputs': [
'<(PRODUCT_DIR)/node.exp'
],
'action': [
'sh', 'tools/create_expfile.sh',
'<@(_inputs)', '<@(_outputs)'
],
}
]
}
], # end targets
}], # end aix section
], # end conditions block
}
48 changes: 48 additions & 0 deletions tools/create_expfile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/sh
# This script writes out all the exported symbols to a file
# AIX needs this as sybmols are not exported by an
# executable by default and we need to list
# them specifically in order to export them
# so that they can be used by native add-ons
#
# The raw symbol data is objtained by using nm on
# the .a files which make up the node executable
#
# -Xany makes sure we get symbols on both
# 32 bit and 64 bit as by default we'd only get those
# for 32 bit
#
# -g selects only exported symbols
#
# -C, -B and -p ensure the output is in a format we
# can easily parse and convert into the symbol we need
#
# -C suppresses the demangling of C++ names
# -B gives us output in BSD format
# -p displays the info in a standard portable output format
#
# We only include symbols if they are of the
# following types and don't start with a dot.
#
# T - Global text symbol
# D - Global data symbol
# B - Gobal bss symbol.
#
# the final sort allows us to remove any duplicates
#
# We need to exclude gtest libraries as they are not
# linked into the node executable
#
echo "Searching $1 to write out expfile to $2"

# this special sequence must be at the start of the exp file
echo "#!." > $2

# pull the symbols from the .a files
find $1 -name "*.a" | grep -v gtest \
| xargs nm -Xany -BCpg \
| awk '{
if ((($2 == "T") || ($2 == "D") || ($2 == "B")) &&
(substr($3,1,1) != ".")) { print $3 }
}' \
| sort -u >> $2
4 changes: 4 additions & 0 deletions tools/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,10 @@ def headers(action):
'src/node_version.h',
], 'include/node/')

# Add the expfile that is created on AIX
if sys.platform.startswith('aix'):
action(['out/Release/node.exp'], 'include/node/')

subdir_files('deps/cares/include', 'include/node/', action)
subdir_files('deps/v8/include', 'include/node/', action)

Expand Down