Skip to content

Commit 831ecd9

Browse files
Initial Support for using gcc to compile a Windows JDK
1 parent cba7d88 commit 831ecd9

256 files changed

Lines changed: 368754 additions & 159424 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

make/CreateJmods.gmk

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ $(call FillFindCache, \
5959

6060
ifneq ($(LIBS_DIR), )
6161
DEPS += $(call FindFiles, $(LIBS_DIR))
62-
ifeq ($(call isTargetOs, windows)+$(SHIP_DEBUG_SYMBOLS), true+public)
63-
# For public debug symbols on Windows, we have to use stripped pdbs and rename them
62+
ifeq ($(TOOLCHAIN_TYPE)+$(SHIP_DEBUG_SYMBOLS), microsoft+public)
63+
# For public debug symbols on Windows with VS, we have to use stripped pdbs and rename them
6464
rename_stripped = $(patsubst %.stripped.pdb,%.pdb,$1)
6565
LIBS_DIR_FILTERED := $(subst modules_libs,modules_libs_filtered, $(LIBS_DIR))
6666
FILES_LIBS := $(filter-out %.pdb, $(call FindFiles, $(LIBS_DIR))) \
@@ -79,8 +79,8 @@ ifneq ($(LIBS_DIR), )
7979
endif
8080
ifneq ($(CMDS_DIR), )
8181
DEPS += $(call FindFiles, $(CMDS_DIR))
82-
ifeq ($(call isTargetOs, windows)+$(SHIP_DEBUG_SYMBOLS), true+public)
83-
# For public debug symbols on Windows, we have to use stripped pdbs and rename them
82+
ifeq ($(TOOLCHAIN_TYPE)+$(SHIP_DEBUG_SYMBOLS), microsoft+public)
83+
# For public debug symbols on Windows with VS, we have to use stripped pdbs and rename them
8484
rename_stripped = $(patsubst %.stripped.pdb,%.pdb,$1)
8585
CMDS_DIR_FILTERED := $(subst modules_cmds,modules_cmds_filtered, $(CMDS_DIR))
8686
FILES_CMDS := $(filter-out %.pdb, $(call FindFiles, $(CMDS_DIR))) \

make/Hsdis.gmk

Lines changed: 49 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ HSDIS_OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/hsdis
3535
REAL_HSDIS_NAME := hsdis-$(OPENJDK_TARGET_CPU_LEGACY_LIB)$(SHARED_LIBRARY_SUFFIX)
3636
BUILT_HSDIS_LIB := $(HSDIS_OUTPUT_DIR)/$(REAL_HSDIS_NAME)
3737

38-
HSDIS_LINK_TYPE := C
38+
HSDIS_LANG := C
3939

4040
ifeq ($(HSDIS_BACKEND), capstone)
4141
ifeq ($(call isTargetCpuArch, x86), true)
@@ -54,7 +54,7 @@ endif
5454

5555
ifeq ($(HSDIS_BACKEND), llvm)
5656
# Use C++ instead of C
57-
HSDIS_LINK_TYPE := C++
57+
HSDIS_LANG := C++
5858

5959
ifeq ($(call isTargetOs, linux), true)
6060
LLVM_OS := pc-linux-gnu
@@ -71,62 +71,64 @@ endif
7171

7272
ifeq ($(HSDIS_BACKEND), binutils)
7373
ifeq ($(call isTargetOs, windows), true)
74-
# On windows, we need to "fake" a completely different toolchain using gcc
75-
# instead of the normal microsoft toolchain. This is quite hacky...
74+
ifeq ($(TOOLCHAIN_TYPE), microsoft)
75+
# On windows, we need to "fake" a completely different toolchain using gcc
76+
# instead of the normal microsoft toolchain. This is quite hacky...
7677

77-
MINGW_BASE := x86_64-w64-mingw32
78+
MINGW_BASE := x86_64-w64-mingw32
7879

79-
MINGW_SYSROOT = $(shell $(MINGW_BASE)-gcc -print-sysroot)
80-
ifeq ($(wildcard $(MINGW_SYSROOT)), )
81-
# Use fallback path
82-
MINGW_SYSROOT := /usr/$(MINGW_BASE)
80+
MINGW_SYSROOT = $(shell $(MINGW_BASE)-gcc -print-sysroot)
8381
ifeq ($(wildcard $(MINGW_SYSROOT)), )
84-
$(error mingw sysroot not found)
82+
# Use fallback path
83+
MINGW_SYSROOT := /usr/$(MINGW_BASE)
84+
ifeq ($(wildcard $(MINGW_SYSROOT)), )
85+
$(error mingw sysroot not found)
86+
endif
8587
endif
86-
endif
8788

88-
BUILD_HSDIS_CC := $(MINGW_BASE)-gcc
89-
BUILD_HSDIS_LD := $(MINGW_BASE)-ld
90-
BUILD_HSDIS_OBJCOPY := $(MINGW_BASE)-objcopy
91-
BUILD_HSDIS_SYSROOT_CFLAGS := --sysroot=$(MINGW_SYSROOT)
92-
BUILD_HSDIS_SYSROOT_LDFLAGS := --sysroot=$(MINGW_SYSROOT)
89+
BUILD_HSDIS_CC := $(MINGW_BASE)-gcc
90+
BUILD_HSDIS_LD := $(MINGW_BASE)-ld
91+
BUILD_HSDIS_OBJCOPY := $(MINGW_BASE)-objcopy
92+
BUILD_HSDIS_SYSROOT_CFLAGS := --sysroot=$(MINGW_SYSROOT)
93+
BUILD_HSDIS_SYSROOT_LDFLAGS := --sysroot=$(MINGW_SYSROOT)
9394

94-
MINGW_SYSROOT_LIB_PATH := $(MINGW_SYSROOT)/mingw/lib
95-
ifeq ($(wildcard $(MINGW_SYSROOT_LIB_PATH)), )
96-
# Try without mingw
97-
MINGW_SYSROOT_LIB_PATH := $(MINGW_SYSROOT)/lib
95+
MINGW_SYSROOT_LIB_PATH := $(MINGW_SYSROOT)/mingw/lib
9896
ifeq ($(wildcard $(MINGW_SYSROOT_LIB_PATH)), )
99-
$(error mingw sysroot lib path not found)
97+
# Try without mingw
98+
MINGW_SYSROOT_LIB_PATH := $(MINGW_SYSROOT)/lib
99+
ifeq ($(wildcard $(MINGW_SYSROOT_LIB_PATH)), )
100+
$(error mingw sysroot lib path not found)
101+
endif
100102
endif
101-
endif
102103

103-
MINGW_VERSION = $(shell $(MINGW_BASE)-gcc -v 2>&1 | $(GREP) "gcc version" | $(CUT) -d " " -f 3)
104-
MINGW_GCC_LIB_PATH := /usr/lib/gcc/$(MINGW_BASE)/$(MINGW_VERSION)
105-
ifeq ($(wildcard $(MINGW_GCC_LIB_PATH)), )
106-
# Try using only major version number
107-
MINGW_VERSION_MAJOR := $(firstword $(subst ., , $(MINGW_VERSION)))
108-
MINGW_GCC_LIB_PATH := /usr/lib/gcc/$(MINGW_BASE)/$(MINGW_VERSION_MAJOR)
104+
MINGW_VERSION = $(shell $(MINGW_BASE)-gcc -v 2>&1 | $(GREP) "gcc version" | $(CUT) -d " " -f 3)
105+
MINGW_GCC_LIB_PATH := /usr/lib/gcc/$(MINGW_BASE)/$(MINGW_VERSION)
109106
ifeq ($(wildcard $(MINGW_GCC_LIB_PATH)), )
110-
$(error mingw gcc lib path not found)
107+
# Try using only major version number
108+
MINGW_VERSION_MAJOR := $(firstword $(subst ., , $(MINGW_VERSION)))
109+
MINGW_GCC_LIB_PATH := /usr/lib/gcc/$(MINGW_BASE)/$(MINGW_VERSION_MAJOR)
110+
ifeq ($(wildcard $(MINGW_GCC_LIB_PATH)), )
111+
$(error mingw gcc lib path not found)
112+
endif
111113
endif
112-
endif
113114

114-
TOOLCHAIN_TYPE := gcc
115-
OPENJDK_TARGET_OS := linux
116-
OPENJDK_TARGET_OS_TYPE := unix
117-
GENDEPS_FLAGS := -MMD -MF
118-
CFLAGS_DEBUG_SYMBOLS := -g
119-
DISABLED_WARNINGS :=
120-
DISABLE_WARNING_PREFIX := -Wno-
121-
CFLAGS_WARNINGS_ARE_ERRORS := -Werror
122-
SHARED_LIBRARY_FLAGS := -shared
123-
124-
HSDIS_TOOLCHAIN_DEFAULT_CFLAGS := false
125-
HSDIS_TOOLCHAIN_DEFAULT_LDFLAGS := false
126-
HSDIS_LDFLAGS += -L$(MINGW_GCC_LIB_PATH) -L$(MINGW_SYSROOT_LIB_PATH)
127-
MINGW_DLLCRT := $(MINGW_SYSROOT_LIB_PATH)/dllcrt2.o
128-
HSDIS_TOOLCHAIN_LIBS := $(MINGW_DLLCRT) -lmingw32 -lgcc -lgcc_eh -lmoldname \
129-
-lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32
115+
TOOLCHAIN_TYPE := gcc
116+
OPENJDK_TARGET_OS := linux
117+
OPENJDK_TARGET_OS_TYPE := unix
118+
GENDEPS_FLAGS := -MMD -MF
119+
CFLAGS_DEBUG_SYMBOLS := -g
120+
DISABLED_WARNINGS :=
121+
DISABLE_WARNING_PREFIX := -Wno-
122+
CFLAGS_WARNINGS_ARE_ERRORS := -Werror
123+
SHARED_LIBRARY_FLAGS := -shared
124+
125+
HSDIS_TOOLCHAIN_DEFAULT_CFLAGS := false
126+
HSDIS_TOOLCHAIN_DEFAULT_LDFLAGS := false
127+
HSDIS_LDFLAGS += -L$(MINGW_GCC_LIB_PATH) -L$(MINGW_SYSROOT_LIB_PATH)
128+
MINGW_DLLCRT := $(MINGW_SYSROOT_LIB_PATH)/dllcrt2.o
129+
HSDIS_TOOLCHAIN_LIBS := $(MINGW_DLLCRT) -lmingw32 -lgcc -lgcc_eh -lmoldname \
130+
-lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32
131+
endif
130132
else
131133
HSDIS_TOOLCHAIN_LIBS := -ldl
132134
endif
@@ -138,7 +140,7 @@ endif
138140

139141
$(eval $(call SetupJdkLibrary, BUILD_HSDIS, \
140142
NAME := hsdis, \
141-
LINK_TYPE := $(HSDIS_LINK_TYPE), \
143+
LANG := $(HSDIS_LANG), \
142144
SRC := $(TOPDIR)/src/utils/hsdis/$(HSDIS_BACKEND), \
143145
EXTRA_HEADER_DIRS := \
144146
java.base:include \

make/StaticLibs.gmk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ $(eval $(call SetupBuildLauncher, java, \
137137
CFLAGS := -DSTATIC_BUILD, \
138138
LDFLAGS := $(LDFLAGS_STATIC_JDK), \
139139
LIBS := $(STATIC_LIBS) $(EXTERNAL_LIBS), \
140-
LINK_TYPE := C++, \
140+
LANG := C++, \
141141
OUTPUT_DIR := $(STATIC_LAUNCHER_OUTPUT_DIR), \
142142
OBJECT_DIR := $(STATIC_LAUNCHER_OUTPUT_DIR), \
143143
))

make/ZipSecurity.gmk

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,26 @@ ifeq ($(call isTargetOs, windows), true)
8686
JGSS_ZIP_NAME = jgss-windows-i586-bin.zip
8787
endif
8888

89-
$(eval $(call SetupZipArchive, BUILD_JGSS_BIN_ZIP, \
90-
SRC := $(SUPPORT_OUTPUTDIR), \
91-
INCLUDE_FILES := modules_libs/java.security.jgss/w2k_lsa_auth.dll \
92-
modules_libs/java.security.jgss/w2k_lsa_auth.dll.diz \
93-
modules_libs/java.security.jgss/w2k_lsa_auth.dll.map \
94-
modules_libs/java.security.jgss/w2k_lsa_auth.dll.pdb, \
95-
ZIP := $(IMAGES_OUTPUTDIR)/$(JGSS_ZIP_NAME), \
96-
))
89+
ifeq ($(TOOLCHAIN_TYPE), gcc)
90+
$(eval $(call SetupZipArchive, BUILD_JGSS_BIN_ZIP, \
91+
SRC := $(SUPPORT_OUTPUTDIR), \
92+
INCLUDE_FILES := modules_libs/java.security.jgss/w2k_lsa_auth.dll \
93+
modules_libs/java.security.jgss/w2k_lsa_auth.dll.diz \
94+
$(if $(filter codeview, $(NATIVE_DEBUG_SYMBOLS_FORMAT)), \
95+
modules_libs/java.security.jgss/w2k_lsa_auth.dll.pdb, \
96+
modules_libs/java.security.jgss/w2k_lsa_auth.dll.debuginfo), \
97+
ZIP := $(IMAGES_OUTPUTDIR)/$(JGSS_ZIP_NAME), \
98+
))
99+
else ifeq ($(TOOLCHAIN_TYPE), microsoft)
100+
$(eval $(call SetupZipArchive, BUILD_JGSS_BIN_ZIP, \
101+
SRC := $(SUPPORT_OUTPUTDIR), \
102+
INCLUDE_FILES := modules_libs/java.security.jgss/w2k_lsa_auth.dll \
103+
modules_libs/java.security.jgss/w2k_lsa_auth.dll.diz \
104+
modules_libs/java.security.jgss/w2k_lsa_auth.dll.map \
105+
modules_libs/java.security.jgss/w2k_lsa_auth.dll.pdb, \
106+
ZIP := $(IMAGES_OUTPUTDIR)/$(JGSS_ZIP_NAME), \
107+
))
108+
endif
97109

98110
TARGETS += $(IMAGES_OUTPUTDIR)/$(JGSS_ZIP_NAME)
99111
endif

make/autoconf/build-performance.m4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ AC_DEFUN([BPERF_SETUP_CCACHE],
162162
# Check if ccache is available
163163
CCACHE_AVAILABLE=true
164164
165-
UTIL_LOOKUP_TOOLCHAIN_PROGS(CCACHE, ccache)
165+
UTIL_LOOKUP_TOOLCHAIN_PROGS(CCACHE, ccache, NOFIXPATH)
166166
167167
AC_MSG_CHECKING([if ccache is available])
168168
if test "x$TOOLCHAIN_TYPE" != "xgcc" && test "x$TOOLCHAIN_TYPE" != "xclang"; then

0 commit comments

Comments
 (0)