| # | |
| # Copyright (c) 2011, 2025, Oracle and/or its affiliates. All rights reserved. | |
| # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| # | |
| # This code is free software; you can redistribute it and/or modify it | |
| # under the terms of the GNU General Public License version 2 only, as | |
| # published by the Free Software Foundation. Oracle designates this | |
| # particular file as subject to the "Classpath" exception as provided | |
| # by Oracle in the LICENSE file that accompanied this code. | |
| # | |
| # This code is distributed in the hope that it will be useful, but WITHOUT | |
| # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| # version 2 for more details (a copy is included in the LICENSE file that | |
| # accompanied this code). | |
| # | |
| # You should have received a copy of the GNU General Public License version | |
| # 2 along with this work; if not, write to the Free Software Foundation, | |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| # | |
| # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| # or visit www.oracle.com if you need additional information or have any | |
| # questions. | |
| # | |
| include MakeIncludeStart.gmk | |
| ifeq ($(INCLUDE), true) | |
| ################################################################################ | |
| # This file contains functionality related to setting up compiler and linker | |
| # flags, based on various more abstract sources of compilation description, | |
| # like optimization level. | |
| ################################################################################ | |
| ################################################################################ | |
| # $1 is the prefix of the file to be compiled | |
| # $2 is the prefix of the library, i.e. $$($1_BASE) | |
| define SetupCompileFileFlags | |
| ifeq ($$($1_OPTIMIZATION), ) | |
| $1_OPT_CFLAGS := $$($2_OPT_CFLAGS) | |
| $1_OPT_CXXFLAGS := $$($2_OPT_CXXFLAGS) | |
| else | |
| ifeq ($$($1_OPTIMIZATION), NONE) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_NONE) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_NONE) | |
| else ifeq ($$($1_OPTIMIZATION), LOW) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_NORM) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_NORM) | |
| else ifeq ($$($1_OPTIMIZATION), HIGH) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_HI) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_HI) | |
| else ifeq ($$($1_OPTIMIZATION), HIGHEST) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_HIGHEST) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_HIGHEST) | |
| else ifeq ($$($1_OPTIMIZATION), HIGHEST_JVM) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_HIGHEST_JVM) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_HIGHEST_JVM) | |
| else ifeq ($$($1_OPTIMIZATION), SIZE) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_SIZE) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_SIZE) | |
| else | |
| $$(error Unknown value for file OPTIMIZATION: $$($1_OPTIMIZATION)) | |
| endif | |
| endif | |
| ifneq ($$($2_PRECOMPILED_HEADER), ) | |
| ifeq ($$(filter $$($1_FILENAME), $$($2_PRECOMPILED_HEADER_EXCLUDE)), ) | |
| $1_USE_PCH_FLAGS := $$($2_USE_PCH_FLAGS) | |
| endif | |
| endif | |
| ifneq ($(DISABLE_WARNING_PREFIX), ) | |
| $1_WARNINGS_FLAGS := $$(addprefix $(DISABLE_WARNING_PREFIX), \ | |
| $$($2_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)_$$($1_FILENAME)) \ | |
| $$($2_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)_$(OPENJDK_TARGET_OS)_$$($1_FILENAME))) | |
| endif | |
| $1_BASE_CFLAGS := $$($2_CFLAGS) $$($2_EXTRA_CFLAGS) \ | |
| $$($2_SYSROOT_CFLAGS) | |
| $1_BASE_CXXFLAGS := $$($2_CXXFLAGS) $$($2_EXTRA_CXXFLAGS) \ | |
| $$($2_SYSROOT_CFLAGS) $$($1_EXTRA_CXXFLAGS) | |
| $1_BASE_ASFLAGS := $$($2_ASFLAGS) $$($2_EXTRA_ASFLAGS) | |
| endef | |
| ################################################################################ | |
| define SetupCompilerFlags | |
| # Pickup extra OPENJDK_TARGET_OS_TYPE, OPENJDK_TARGET_OS, TOOLCHAIN_TYPE and | |
| # OPENJDK_TARGET_OS plus OPENJDK_TARGET_CPU pair dependent variables for CFLAGS. | |
| $1_EXTRA_CFLAGS := $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) \ | |
| $$($1_CFLAGS_$(TOOLCHAIN_TYPE)) \ | |
| $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)) | |
| ifneq ($(DEBUG_LEVEL), release) | |
| # Pickup extra debug dependent variables for CFLAGS | |
| $1_EXTRA_CFLAGS += $$($1_CFLAGS_debug) | |
| $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug) | |
| $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug) | |
| $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_debug) | |
| else | |
| $1_EXTRA_CFLAGS += $$($1_CFLAGS_release) | |
| $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release) | |
| $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release) | |
| $1_EXTRA_CFLAGS += $$($1_CFLAGS_$(OPENJDK_TARGET_OS)_$(OPENJDK_TARGET_CPU)_release) | |
| endif | |
| ifeq ($(STATIC_LIBS), true) | |
| $1_EXTRA_CFLAGS += -DSTATIC_BUILD=1 | |
| endif | |
| # Pickup extra OPENJDK_TARGET_OS_TYPE, OPENJDK_TARGET_OS and/or TOOLCHAIN_TYPE | |
| # dependent variables for CXXFLAGS. | |
| $1_EXTRA_CXXFLAGS := $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)) \ | |
| $$($1_CXXFLAGS_$(TOOLCHAIN_TYPE)) | |
| ifneq ($(DEBUG_LEVEL), release) | |
| # Pickup extra debug dependent variables for CXXFLAGS | |
| $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_debug) | |
| $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_debug) | |
| $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug) | |
| else | |
| $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_release) | |
| $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_TYPE)_release) | |
| $1_EXTRA_CXXFLAGS += $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release) | |
| endif | |
| ifeq ($(STATIC_LIBS), true) | |
| $1_EXTRA_CXXFLAGS += $$(STATIC_LIB_CFLAGS) | |
| endif | |
| # If no C++ flags are explicitly set, default to using the C flags. | |
| # After that, we can set additional C++ flags that should not interfere | |
| # with the mechanism for copying the C flags by default. | |
| ifeq ($$($1_CXXFLAGS), ) | |
| $1_CXXFLAGS := $$($1_CFLAGS) | |
| endif | |
| ifeq ($$(strip $$($1_EXTRA_CXXFLAGS)), ) | |
| $1_EXTRA_CXXFLAGS := $$($1_EXTRA_CFLAGS) | |
| endif | |
| $$(call SetIfEmpty, $1_COMPILE_WITH_DEBUG_SYMBOLS, $$(COMPILE_WITH_DEBUG_SYMBOLS)) | |
| ifeq ($(STATIC_LIBS), true) | |
| # For release builds where debug symbols are configured to be moved to | |
| # separate debuginfo files, disable debug symbols for static libs instead. | |
| # We don't currently support this configuration and we don't want symbol | |
| # information in release builds unless explicitly asked to provide it. | |
| ifeq ($(DEBUG_LEVEL), release) | |
| ifeq ($(COPY_DEBUG_SYMBOLS), true) | |
| $1_COMPILE_WITH_DEBUG_SYMBOLS := false | |
| endif | |
| endif | |
| endif | |
| ifeq ($$($1_COMPILE_WITH_DEBUG_SYMBOLS), true) | |
| $1_EXTRA_CFLAGS += $$(CFLAGS_DEBUG_SYMBOLS) | |
| $1_EXTRA_CXXFLAGS += $$(CFLAGS_DEBUG_SYMBOLS) | |
| $1_EXTRA_ASFLAGS += $$(ASFLAGS_DEBUG_SYMBOLS) | |
| endif | |
| # Pass the library name for static JNI library naming | |
| ifeq ($$($1_TYPE), STATIC_LIBRARY) | |
| $1_EXTRA_CFLAGS += -DLIBRARY_NAME=$$($1_NAME) | |
| $1_EXTRA_CXXFLAGS += -DLIBRARY_NAME=$$($1_NAME) | |
| endif | |
| # Pick up disabled warnings, if possible on this platform. | |
| ifneq ($(DISABLE_WARNING_PREFIX), ) | |
| $1_EXTRA_CFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), \ | |
| $$(DISABLED_WARNINGS) \ | |
| $$(DISABLED_WARNINGS_C) \ | |
| $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)) \ | |
| $$($1_DISABLED_WARNINGS_C_$(TOOLCHAIN_TYPE)) \ | |
| $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)_$(OPENJDK_TARGET_OS)) \ | |
| $$($1_DISABLED_WARNINGS_C_$(TOOLCHAIN_TYPE)_$(OPENJDK_TARGET_OS))) | |
| $1_EXTRA_CXXFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), \ | |
| $$(DISABLED_WARNINGS) \ | |
| $$(DISABLED_WARNINGS_CXX) \ | |
| $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)) \ | |
| $$($1_DISABLED_WARNINGS_CXX_$(TOOLCHAIN_TYPE)) \ | |
| $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)_$(OPENJDK_TARGET_OS)) \ | |
| $$($1_DISABLED_WARNINGS_CXX_$(TOOLCHAIN_TYPE)_$(OPENJDK_TARGET_OS))) | |
| endif | |
| # Check if warnings should be considered errors. | |
| # Pick first binary and toolchain specific, then binary specific, then general setting. | |
| ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)), ) | |
| ifeq ($$($1_WARNINGS_AS_ERRORS), ) | |
| $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$(WARNINGS_AS_ERRORS) | |
| else | |
| $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$($1_WARNINGS_AS_ERRORS) | |
| endif | |
| endif | |
| ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)), true) | |
| $1_EXTRA_CFLAGS += $(CFLAGS_WARNINGS_ARE_ERRORS) | |
| $1_EXTRA_CXXFLAGS += $(CFLAGS_WARNINGS_ARE_ERRORS) | |
| endif | |
| ifeq (NONE, $$($1_OPTIMIZATION)) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_NONE) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_NONE) | |
| else ifeq (LOW, $$($1_OPTIMIZATION)) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_NORM) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_NORM) | |
| else ifeq (HIGH, $$($1_OPTIMIZATION)) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_HI) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_HI) | |
| else ifeq (HIGHEST, $$($1_OPTIMIZATION)) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_HIGHEST) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_HIGHEST) | |
| else ifeq (HIGHEST_JVM, $$($1_OPTIMIZATION)) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_HIGHEST_JVM) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_HIGHEST_JVM) | |
| else ifeq (SIZE, $$($1_OPTIMIZATION)) | |
| $1_OPT_CFLAGS := $(C_O_FLAG_SIZE) | |
| $1_OPT_CXXFLAGS := $(CXX_O_FLAG_SIZE) | |
| else ifneq (, $$($1_OPTIMIZATION)) | |
| $$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION)) | |
| endif | |
| endef | |
| ################################################################################ | |
| define SetupLinkerFlags | |
| # Pickup extra OPENJDK_TARGET_OS_TYPE, OPENJDK_TARGET_OS and TOOLCHAIN_TYPE | |
| # dependent variables for LDFLAGS and LIBS, and additionally the pair dependent | |
| # TOOLCHAIN_TYPE plus OPENJDK_TARGET_OS | |
| $1_EXTRA_LDFLAGS += $$($1_LDFLAGS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_LDFLAGS_$(OPENJDK_TARGET_OS)) \ | |
| $$($1_LDFLAGS_$(TOOLCHAIN_TYPE)) $$($1_LDFLAGS_$(TOOLCHAIN_TYPE)_$(OPENJDK_TARGET_OS)) | |
| $1_EXTRA_LIBS += $$($1_LIBS_$(OPENJDK_TARGET_OS_TYPE)) $$($1_LIBS_$(OPENJDK_TARGET_OS)) \ | |
| $$($1_LIBS_$(TOOLCHAIN_TYPE)) $$($1_LIBS_$(TOOLCHAIN_TYPE)_$(OPENJDK_TARGET_OS)) | |
| endef | |
| ################################################################################ | |
| endif # include guard | |
| include MakeIncludeEnd.gmk |