71
72 # Add -z,defs, to forbid undefined symbols in object files.
73 # add -z,relro (mark relocations read only) for all libs
74 # add -z,now ("full relro" - more of the Global Offset Table GOT is marked read only)
75 BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,-z,defs -Wl,-z,relro -Wl,-z,now"
76 # Linux : remove unused code+data in link step
77 if test "x$ENABLE_LINKTIME_GC" = xtrue; then
78 if test "x$OPENJDK_TARGET_CPU" = xs390x; then
79 BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,--gc-sections -Wl,--print-gc-sections"
80 else
81 BASIC_LDFLAGS_JDK_ONLY="$BASIC_LDFLAGS_JDK_ONLY -Wl,--gc-sections"
82 fi
83 fi
84
85 BASIC_LDFLAGS_JVM_ONLY="-Wl,-O1"
86
87 elif test "x$TOOLCHAIN_TYPE" = xclang; then
88 BASIC_LDFLAGS_JVM_ONLY="-mno-omit-leaf-frame-pointer -mstack-alignment=16 \
89 -fPIC"
90
91 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
92 BASIC_LDFLAGS="-Wl,-z,defs"
93 BASIC_LDFLAGS_ONLYCXX="-norunpath"
94 BASIC_LDFLAGS_ONLYCXX_JDK_ONLY="-xnolib"
95
96 BASIC_LDFLAGS_JDK_ONLY="-ztext"
97 BASIC_LDFLAGS_JVM_ONLY="-library=%none -mt -z noversion"
98
99 elif test "x$TOOLCHAIN_TYPE" = xxlc; then
100 BASIC_LDFLAGS="-b64 -brtl -bnorwexec -bnolibpath -bexpall -bernotok -btextpsize:64K \
101 -bdatapsize:64K -bstackpsize:64K"
102 # libjvm.so has gotten too large for normal TOC size; compile with qpic=large and link with bigtoc
103 BASIC_LDFLAGS_JVM_ONLY="-Wl,-lC_r -bbigtoc"
104
105 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
106 BASIC_LDFLAGS="-nologo -opt:ref"
107 BASIC_LDFLAGS_JDK_ONLY="-incremental:no"
108 BASIC_LDFLAGS_JVM_ONLY="-opt:icf,8 -subsystem:windows"
109 fi
110
111 if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
112 if test -n "$HAS_NOEXECSTACK"; then
113 BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,-z,noexecstack"
114 fi
115 fi
116
117 # Setup OS-dependent LDFLAGS
118 if test "x$TOOLCHAIN_TYPE" = xclang || test "x$TOOLCHAIN_TYPE" = xgcc; then
125 fi
126
127 # Setup debug level-dependent LDFLAGS
128 if test "x$TOOLCHAIN_TYPE" = xgcc; then
129 if test "x$OPENJDK_TARGET_OS" = xlinux; then
130 if test x$DEBUG_LEVEL = xrelease; then
131 DEBUGLEVEL_LDFLAGS_JDK_ONLY="$DEBUGLEVEL_LDFLAGS_JDK_ONLY -Wl,-O1"
132 fi
133 fi
134
135 elif test "x$TOOLCHAIN_TYPE" = xxlc; then
136 # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
137 # Hotspot now overflows its 64K TOC (currently only for debug),
138 # so we build with '-qpic=large -bbigtoc'.
139 if test "x$DEBUG_LEVEL" != xrelease; then
140 DEBUGLEVEL_LDFLAGS_JVM_ONLY="$DEBUGLEVEL_LDFLAGS_JVM_ONLY -bbigtoc"
141 fi
142 fi
143
144 # Setup warning flags
145 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
146 LDFLAGS_WARNINGS_ARE_ERRORS="-Wl,-z,fatal-warnings"
147 else
148 LDFLAGS_WARNINGS_ARE_ERRORS=""
149 fi
150 AC_SUBST(LDFLAGS_WARNINGS_ARE_ERRORS)
151
152 # Setup LDFLAGS for linking executables
153 if test "x$TOOLCHAIN_TYPE" = xgcc; then
154 EXECUTABLE_LDFLAGS="$EXECUTABLE_LDFLAGS -Wl,--allow-shlib-undefined"
155 # Enabling pie on 32 bit builds prevents the JVM from allocating a continuous
156 # java heap.
157 if test "x$OPENJDK_TARGET_CPU_BITS" != "x32"; then
158 EXECUTABLE_LDFLAGS="$EXECUTABLE_LDFLAGS -pie"
159 fi
160 fi
161
162 if test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = "xfalse"; then
163 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
164 BASIC_LDFLAGS="$BASIC_LDFLAGS -pdbaltpath:%_PDB%"
165 fi
166 fi
167
168 # Export some intermediate variables for compatibility
169 LDFLAGS_CXX_JDK="$BASIC_LDFLAGS_ONLYCXX $BASIC_LDFLAGS_ONLYCXX_JDK_ONLY $DEBUGLEVEL_LDFLAGS_JDK_ONLY"
170 AC_SUBST(LDFLAGS_CXX_JDK)
171 AC_SUBST(LIBJSIG_HASHSTYLE_LDFLAGS)
172 AC_SUBST(LIBJSIG_NOEXECSTACK_LDFLAGS)
173 ])
174
175 ################################################################################
176 # $1 - Either BUILD or TARGET to pick the correct OS/CPU variables to check
177 # conditionals against.
178 # $2 - Optional prefix for each variable defined.
179 AC_DEFUN([FLAGS_SETUP_LDFLAGS_CPU_DEP],
180 [
181 # Setup CPU-dependent basic LDFLAGS. These can differ between the target and
182 # build toolchain.
183 if test "x$TOOLCHAIN_TYPE" = xgcc; then
184 if test "x${OPENJDK_$1_CPU}" = xx86; then
185 $1_CPU_LDFLAGS_JVM_ONLY="-march=i586"
186 elif test "x$OPENJDK_$1_CPU" = xarm; then
187 $1_CPU_LDFLAGS_JVM_ONLY="${$1_CPU_LDFLAGS_JVM_ONLY} -fsigned-char"
188 $1_CPU_LDFLAGS="$ARM_ARCH_TYPE_FLAGS $ARM_FLOAT_TYPE_FLAGS"
189 fi
190
191 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
192 if test "x${OPENJDK_$1_CPU}" = "xsparcv9"; then
193 $1_CPU_LDFLAGS_JVM_ONLY="-xarch=sparc"
194 fi
195
196 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
197 if test "x${OPENJDK_$1_CPU}" = "xx86"; then
198 $1_CPU_LDFLAGS="-safeseh"
199 # NOTE: Old build added -machine. Probably not needed.
200 $1_CPU_LDFLAGS_JVM_ONLY="-machine:I386"
201 $1_CPU_EXECUTABLE_LDFLAGS="-stack:327680"
202 else
203 $1_CPU_LDFLAGS_JVM_ONLY="-machine:AMD64"
204 $1_CPU_EXECUTABLE_LDFLAGS="-stack:1048576"
205 fi
206 fi
207
208 # JVM_VARIANT_PATH depends on if this is build or target...
209 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
210 $1_LDFLAGS_JDK_LIBPATH="-libpath:${OUTPUTDIR}/support/modules_libs/java.base"
211 else
212 $1_LDFLAGS_JDK_LIBPATH="-L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base \
213 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/${$1_JVM_VARIANT_PATH}"
|
71
72 # Add -z,defs, to forbid undefined symbols in object files.
73 # add -z,relro (mark relocations read only) for all libs
74 # add -z,now ("full relro" - more of the Global Offset Table GOT is marked read only)
75 BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,-z,defs -Wl,-z,relro -Wl,-z,now"
76 # Linux : remove unused code+data in link step
77 if test "x$ENABLE_LINKTIME_GC" = xtrue; then
78 if test "x$OPENJDK_TARGET_CPU" = xs390x; then
79 BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,--gc-sections -Wl,--print-gc-sections"
80 else
81 BASIC_LDFLAGS_JDK_ONLY="$BASIC_LDFLAGS_JDK_ONLY -Wl,--gc-sections"
82 fi
83 fi
84
85 BASIC_LDFLAGS_JVM_ONLY="-Wl,-O1"
86
87 elif test "x$TOOLCHAIN_TYPE" = xclang; then
88 BASIC_LDFLAGS_JVM_ONLY="-mno-omit-leaf-frame-pointer -mstack-alignment=16 \
89 -fPIC"
90
91 elif test "x$TOOLCHAIN_TYPE" = xxlc; then
92 BASIC_LDFLAGS="-b64 -brtl -bnorwexec -bnolibpath -bexpall -bernotok -btextpsize:64K \
93 -bdatapsize:64K -bstackpsize:64K"
94 # libjvm.so has gotten too large for normal TOC size; compile with qpic=large and link with bigtoc
95 BASIC_LDFLAGS_JVM_ONLY="-Wl,-lC_r -bbigtoc"
96
97 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
98 BASIC_LDFLAGS="-nologo -opt:ref"
99 BASIC_LDFLAGS_JDK_ONLY="-incremental:no"
100 BASIC_LDFLAGS_JVM_ONLY="-opt:icf,8 -subsystem:windows"
101 fi
102
103 if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
104 if test -n "$HAS_NOEXECSTACK"; then
105 BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,-z,noexecstack"
106 fi
107 fi
108
109 # Setup OS-dependent LDFLAGS
110 if test "x$TOOLCHAIN_TYPE" = xclang || test "x$TOOLCHAIN_TYPE" = xgcc; then
117 fi
118
119 # Setup debug level-dependent LDFLAGS
120 if test "x$TOOLCHAIN_TYPE" = xgcc; then
121 if test "x$OPENJDK_TARGET_OS" = xlinux; then
122 if test x$DEBUG_LEVEL = xrelease; then
123 DEBUGLEVEL_LDFLAGS_JDK_ONLY="$DEBUGLEVEL_LDFLAGS_JDK_ONLY -Wl,-O1"
124 fi
125 fi
126
127 elif test "x$TOOLCHAIN_TYPE" = xxlc; then
128 # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows.
129 # Hotspot now overflows its 64K TOC (currently only for debug),
130 # so we build with '-qpic=large -bbigtoc'.
131 if test "x$DEBUG_LEVEL" != xrelease; then
132 DEBUGLEVEL_LDFLAGS_JVM_ONLY="$DEBUGLEVEL_LDFLAGS_JVM_ONLY -bbigtoc"
133 fi
134 fi
135
136 # Setup warning flags
137 LDFLAGS_WARNINGS_ARE_ERRORS=""
138 AC_SUBST(LDFLAGS_WARNINGS_ARE_ERRORS)
139
140 # Setup LDFLAGS for linking executables
141 if test "x$TOOLCHAIN_TYPE" = xgcc; then
142 EXECUTABLE_LDFLAGS="$EXECUTABLE_LDFLAGS -Wl,--allow-shlib-undefined"
143 # Enabling pie on 32 bit builds prevents the JVM from allocating a continuous
144 # java heap.
145 if test "x$OPENJDK_TARGET_CPU_BITS" != "x32"; then
146 EXECUTABLE_LDFLAGS="$EXECUTABLE_LDFLAGS -pie"
147 fi
148 fi
149
150 if test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = "xfalse"; then
151 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
152 BASIC_LDFLAGS="$BASIC_LDFLAGS -pdbaltpath:%_PDB%"
153 fi
154 fi
155
156 # Export some intermediate variables for compatibility
157 LDFLAGS_CXX_JDK="$BASIC_LDFLAGS_ONLYCXX $BASIC_LDFLAGS_ONLYCXX_JDK_ONLY $DEBUGLEVEL_LDFLAGS_JDK_ONLY"
158 AC_SUBST(LDFLAGS_CXX_JDK)
159 AC_SUBST(LIBJSIG_HASHSTYLE_LDFLAGS)
160 AC_SUBST(LIBJSIG_NOEXECSTACK_LDFLAGS)
161 ])
162
163 ################################################################################
164 # $1 - Either BUILD or TARGET to pick the correct OS/CPU variables to check
165 # conditionals against.
166 # $2 - Optional prefix for each variable defined.
167 AC_DEFUN([FLAGS_SETUP_LDFLAGS_CPU_DEP],
168 [
169 # Setup CPU-dependent basic LDFLAGS. These can differ between the target and
170 # build toolchain.
171 if test "x$TOOLCHAIN_TYPE" = xgcc; then
172 if test "x${OPENJDK_$1_CPU}" = xx86; then
173 $1_CPU_LDFLAGS_JVM_ONLY="-march=i586"
174 elif test "x$OPENJDK_$1_CPU" = xarm; then
175 $1_CPU_LDFLAGS_JVM_ONLY="${$1_CPU_LDFLAGS_JVM_ONLY} -fsigned-char"
176 $1_CPU_LDFLAGS="$ARM_ARCH_TYPE_FLAGS $ARM_FLOAT_TYPE_FLAGS"
177 fi
178
179 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
180 if test "x${OPENJDK_$1_CPU}" = "xx86"; then
181 $1_CPU_LDFLAGS="-safeseh"
182 # NOTE: Old build added -machine. Probably not needed.
183 $1_CPU_LDFLAGS_JVM_ONLY="-machine:I386"
184 $1_CPU_EXECUTABLE_LDFLAGS="-stack:327680"
185 else
186 $1_CPU_LDFLAGS_JVM_ONLY="-machine:AMD64"
187 $1_CPU_EXECUTABLE_LDFLAGS="-stack:1048576"
188 fi
189 fi
190
191 # JVM_VARIANT_PATH depends on if this is build or target...
192 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
193 $1_LDFLAGS_JDK_LIBPATH="-libpath:${OUTPUTDIR}/support/modules_libs/java.base"
194 else
195 $1_LDFLAGS_JDK_LIBPATH="-L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base \
196 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/${$1_JVM_VARIANT_PATH}"
|