1#
2# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4#
5# This code is free software; you can redistribute it and/or modify it
6# under the terms of the GNU General Public License version 2 only, as
7# published by the Free Software Foundation.  Oracle designates this
8# particular file as subject to the "Classpath" exception as provided
9# by Oracle in the LICENSE file that accompanied this code.
10#
11# This code is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14# version 2 for more details (a copy is included in the LICENSE file that
15# accompanied this code).
16#
17# You should have received a copy of the GNU General Public License version
18# 2 along with this work; if not, write to the Free Software Foundation,
19# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20#
21# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22# or visit www.oracle.com if you need additional information or have any
23# questions.
24#
25
26###############################################################################
27#
28# Includes and boilerplate
29#
30###############################################################################
31
32
33AC_PREREQ([2.69])
34AC_INIT(OpenJDK, openjdk, build-dev@openjdk.java.net,,http://openjdk.java.net)
35
36AC_CONFIG_AUX_DIR([$TOPDIR/make/autoconf/build-aux])
37m4_include([build-aux/pkg.m4])
38
39AC_DEFUN_ONCE([CUSTOM_EARLY_HOOK])
40AC_DEFUN_ONCE([CUSTOM_LATE_HOOK])
41AC_DEFUN_ONCE([CUSTOM_CONFIG_OUTPUT_GENERATED_HOOK])
42AC_DEFUN_ONCE([CUSTOM_SUMMARY_AND_WARNINGS_HOOK])
43
44# This line needs to be here, verbatim, after the dummy hook definitions but
45# before all includes. It is replaced with custom functionality when building
46# custom sources.
47#CUSTOM_AUTOCONF_INCLUDE
48
49# Include these first...
50m4_include([util.m4])
51# ... then the rest
52m4_include([basic.m4])
53m4_include([boot-jdk.m4])
54m4_include([build-performance.m4])
55m4_include([flags.m4])
56m4_include([help.m4])
57m4_include([hotspot.m4])
58m4_include([jdk-options.m4])
59m4_include([jdk-version.m4])
60m4_include([jvm-features.m4])
61m4_include([libraries.m4])
62m4_include([platform.m4])
63m4_include([source-dirs.m4])
64m4_include([toolchain.m4])
65
66###############################################################################
67#
68# Initialization / Boot-strapping
69#
70# The bootstrapping process needs to solve the "chicken or the egg" problem,
71# thus it jumps back and forth, each time gaining something needed later on.
72#
73###############################################################################
74
75# If we are requested to print additional help, do that and then exit.
76# This must be the very first call.
77HELP_PRINT_ADDITIONAL_HELP_AND_EXIT
78
79# Basic initialization that must happen first of all in the normal process.
80BASIC_INIT
81BASIC_SETUP_FUNDAMENTAL_TOOLS
82
83# Now we can determine OpenJDK build and target platforms. This is required to
84# have early on.
85PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET
86
87# Continue setting up basic stuff. Most remaining code require fundamental tools.
88BASIC_SETUP_PATHS
89
90# Check if it's a pure open build or if custom sources are to be used.
91JDKOPT_SETUP_OPEN_OR_CUSTOM
92
93# These are needed to be able to create a configuration name (and thus the output directory)
94JDKOPT_SETUP_DEBUG_LEVEL
95HOTSPOT_SETUP_JVM_VARIANTS
96
97# With basic setup done, call the custom early hook.
98CUSTOM_EARLY_HOOK
99
100# This only needs debug level to be setup
101JDKOPT_ALLOW_ABSOLUTE_PATHS_IN_OUTPUT
102
103# Check if we have devkits, extra paths or sysroot set.
104BASIC_SETUP_DEVKIT
105
106# To properly create a configuration name, we need to have the OpenJDK target
107# and options (variants and debug level) parsed.
108BASIC_SETUP_OUTPUT_DIR
109
110# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY.
111HELP_SETUP_DEPENDENCY_HELP
112
113# Setup tools that requires more complex handling, or that is not needed by the configure script.
114BASIC_SETUP_COMPLEX_TOOLS
115BASIC_CHECK_BASH_OPTIONS
116
117# Check if pkg-config is available.
118PKG_PROG_PKG_CONFIG
119
120# After basic tools have been setup, we can check build os specific details.
121PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION
122
123# Misc basic settings
124BASIC_SETUP_DEFAULT_MAKE_TARGET
125BASIC_SETUP_DEFAULT_LOG
126
127###############################################################################
128#
129# Determine OpenJDK variants and version numbers.
130#
131###############################################################################
132
133# We need build & target for this.
134JDKOPT_SETUP_JLINK_OPTIONS
135JDKVER_SETUP_JDK_VERSION_NUMBERS
136
137###############################################################################
138#
139# Setup BootJDK, used to bootstrap the build.
140#
141###############################################################################
142
143BOOTJDK_SETUP_BOOT_JDK
144BOOTJDK_SETUP_BUILD_JDK
145
146###############################################################################
147#
148# Determine JDK specific build time options.
149#
150###############################################################################
151
152JDKOPT_SETUP_JDK_OPTIONS
153
154###############################################################################
155#
156# Configure the sources to use. We can add or override individual directories.
157#
158###############################################################################
159
160SRCDIRS_SETUP_DIRS
161SRCDIRS_SETUP_IMPORT_MODULES
162
163###############################################################################
164#
165# Setup the toolchain (compilers etc), i.e. tools used to compile and process
166# native code.
167#
168###############################################################################
169
170# See if we are doing a complete static build or not
171JDKOPT_SETUP_STATIC_BUILD
172
173# First determine the toolchain type (compiler family)
174TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE
175
176# The global flags are needed for configure to be able to run the compilers
177# correctly.
178FLAGS_PRE_TOOLCHAIN
179
180# Then detect the actual binaries needed
181TOOLCHAIN_PRE_DETECTION
182TOOLCHAIN_DETECT_TOOLCHAIN_CORE
183TOOLCHAIN_DETECT_TOOLCHAIN_EXTRA
184TOOLCHAIN_POST_DETECTION
185
186# Finally do some processing after the detection phase
187TOOLCHAIN_SETUP_BUILD_COMPILERS
188TOOLCHAIN_MISC_CHECKS
189
190# Setup the JTReg Regression Test Harness.
191TOOLCHAIN_SETUP_JTREG
192
193# Setup the Java Microbenchmark Harness (JMH)
194LIB_TESTS_SETUP_JMH
195
196# Setup Jib dependency tool
197TOOLCHAIN_SETUP_JIB
198
199# After toolchain setup, we need to process some flags to be able to continue.
200FLAGS_POST_TOOLCHAIN
201
202# Now we can test some aspects on the target using configure macros.
203PLATFORM_SETUP_OPENJDK_TARGET_BITS
204PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS
205
206# Configure flags for the tools
207FLAGS_SETUP_FLAGS
208
209# Setup debug symbols (need objcopy from the toolchain for that)
210JDKOPT_SETUP_DEBUG_SYMBOLS
211JDKOPT_SETUP_CODE_COVERAGE
212
213# AddressSanitizer
214JDKOPT_SETUP_ADDRESS_SANITIZER
215
216###############################################################################
217#
218# Check dependencies for external and internal libraries.
219#
220###############################################################################
221
222# After we have toolchain, we can compile fixpath. It's needed by the lib checks.
223BASIC_COMPILE_FIXPATH
224
225LIB_DETERMINE_DEPENDENCIES
226LIB_SETUP_LIBRARIES
227
228###############################################################################
229#
230# Setup hotspot and JVM features (needs toolchain).
231#
232###############################################################################
233
234JVM_FEATURES_PARSE_OPTIONS
235JVM_FEATURES_SETUP
236
237HOTSPOT_SETUP_MISC
238
239###############################################################################
240#
241# We need to do some final tweaking, when everything else is done.
242#
243###############################################################################
244
245JDKOPT_DETECT_INTREE_EC
246JDKOPT_ENABLE_DISABLE_FAILURE_HANDLER
247JDKOPT_ENABLE_DISABLE_GENERATE_CLASSLIST
248JDKOPT_EXCLUDE_TRANSLATIONS
249JDKOPT_ENABLE_DISABLE_MANPAGES
250JDKOPT_ENABLE_DISABLE_CDS_ARCHIVE
251JDKOPT_SETUP_REPRODUCIBLE_BUILD
252
253###############################################################################
254#
255# Configure parts of the build that only affect the build performance,
256# not the result.
257#
258###############################################################################
259
260BPERF_SETUP_BUILD_CORES
261BPERF_SETUP_BUILD_MEMORY
262BPERF_SETUP_BUILD_JOBS
263BPERF_SETUP_TEST_JOBS
264BPERF_SETUP_JAVAC_SERVER
265
266# Setup arguments for the boot jdk (after cores and memory have been setup)
267BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS
268
269# Setup use of icecc if requested
270BPERF_SETUP_ICECC
271
272# Can the C/C++ compiler use precompiled headers?
273BPERF_SETUP_PRECOMPILED_HEADERS
274
275# Setup use of ccache, if available
276BPERF_SETUP_CCACHE
277
278###############################################################################
279#
280# And now the finish...
281#
282###############################################################################
283
284# Check for some common pitfalls
285BASIC_TEST_USABILITY_ISSUES
286
287# At the end, call the custom hook. (Dummy macro if no custom sources available)
288CUSTOM_LATE_HOOK
289
290# Did user specify any unknown variables?
291BASIC_CHECK_LEFTOVER_OVERRIDDEN
292
293# We're messing a bit with internal autoconf variables to put the config.status
294# in the output directory instead of the current directory.
295CONFIG_STATUS="$CONFIGURESUPPORT_OUTPUTDIR/config.status"
296
297# Create the actual output files. Now the main work of configure is done.
298AC_OUTPUT
299
300# After AC_OUTPUT, we need to do final work
301CUSTOM_CONFIG_OUTPUT_GENERATED_HOOK
302BASIC_POST_CONFIG_OUTPUT
303
304# Finally output some useful information to the user
305HELP_PRINT_SUMMARY_AND_WARNINGS
306CUSTOM_SUMMARY_AND_WARNINGS_HOOK
307HELP_REPEAT_WARNINGS
308