1 # 2 # Copyright (c) 2016, 2019, 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 # This must be the first rule 27 default: all 28 29 include $(SPEC) 30 include MakeBase.gmk 31 include JavaCompilation.gmk 32 include SetupJavaCompilers.gmk 33 34 ifeq ($(OPENJDK_TARGET_OS), windows) 35 # The next part is a bit hacky. We include the CompileJvm.gmk to be 36 # able to extact flags, but we do not wish to execute the rules. 37 38 # Use client as base for defines and includes 39 JVM_VARIANT=client 40 41 include HotspotCommon.gmk 42 include lib/CompileJvm.gmk 43 44 # Reset targets so we don't build libjvm. 45 TARGETS := 46 47 # Helper macro to convert a unix path to a Windows path, suitable for 48 # inclusion in a command line. 49 ifeq ($(OPENJDK_BUILD_OS_ENV), windows.cygwin) 50 FixPath = \ 51 $(strip $(subst \,\\,$(shell $(CYGPATH) -w $1))) 52 FixLinuxExecutable = \ 53 $(call FixPath, $1) 54 else ifeq ($(OPENJDK_BUILD_OS_ENV), windows.wsl) 55 FixPath = \ 56 $(strip $(subst \,\\,$(shell $(WSLPATH) -w $1))) 57 FixLinuxExecutable = \ 58 "%windir%\Sysnative\wsl.exe $1" 59 endif 60 61 JVM_DEFINES_client := $(patsubst -D%,%, $(filter -D%, $(JVM_CFLAGS))) 62 EXTRACTED_DEFINES_client := $(addprefix -define , $(JVM_DEFINES_client)) 63 64 JVM_INCLUDES_client := $(patsubst -I%,%, $(filter -I%, $(JVM_CFLAGS))) 65 EXTRACTED_INCLUDES_client := $(foreach path, $(JVM_INCLUDES_client), -absoluteInclude $(call FixPath, $(path))) 66 67 # Hand-code variant-specific arguments, based on the fact that we use 68 # client for general arguments. Not optimal but other solutions require 69 # major changes in ProjectCreator. 70 ADDITIONAL_VARIANT_ARGS := \ 71 -define_server COMPILER2 \ 72 -ignorePath_client adfiles \ 73 -ignorePath_client c2_ \ 74 -ignorePath_client runtime_ \ 75 -ignorePath_client libadt \ 76 -ignorePath_client opto \ 77 # 78 79 IGNORED_PLATFORMS_ARGS := \ 80 -ignorePath aarch64 \ 81 -ignorePath aix \ 82 -ignorePath arm \ 83 -ignorePath bsd \ 84 -ignorePath linux \ 85 -ignorePath posix \ 86 -ignorePath ppc \ 87 -ignorePath solaris \ 88 -ignorePath sparc \ 89 -ignorePath x86_32 \ 90 -ignorePath zero \ 91 # 92 93 ################################################################################ 94 # Build the ProjectCreator java tool. 95 96 TOOLS_OUTPUTDIR := $(HOTSPOT_OUTPUTDIR)/support/tools_classes 97 98 $(eval $(call SetupJavaCompilation, BUILD_PROJECT_CREATOR, \ 99 SETUP := GENERATE_OLDBYTECODE, \ 100 ADD_JAVAC_FLAGS := -Xlint:-auxiliaryclass, \ 101 SRC := $(TOPDIR)/make/hotspot/src/classes, \ 102 BIN := $(TOOLS_OUTPUTDIR), \ 103 )) 104 105 TARGETS += $(BUILD_PROJECT_CREATOR) 106 107 # Run the ProjectCreator tool 108 PROJECT_CREATOR_TOOL := $(JAVA_SMALL) -cp $(TOOLS_OUTPUTDIR) build.tools.projectcreator.ProjectCreator 109 110 IDE_OUTPUTDIR := $(OUTPUTDIR)/ide/hotspot-visualstudio 111 112 VCPROJ_FILE := $(IDE_OUTPUTDIR)/jvm.vcxproj 113 114 PROJECT_CREATOR_CLASS := build.tools.projectcreator.WinGammaPlatformVC10 115 116 # We hard-code gensrc dir to server (since this includes adfiles) 117 PROJECT_CREATOR_ARGS := \ 118 -sourceBase $(call FixPath, $(TOPDIR)/src) \ 119 -startAt hotspot \ 120 -relativeSrcInclude hotspot \ 121 -hidePath .hg \ 122 -hidePath .jcheck \ 123 -hidePath jdk.aot \ 124 -hidePath jdk.hotspot.agent \ 125 -hidePath jdk.internal.vm.ci \ 126 -hidePath jdk.internal.vm.compiler \ 127 -hidePath jdk.jfr \ 128 -compiler VC10 \ 129 -jdkTargetRoot $(call FixPath, $(JDK_OUTPUTDIR)) \ 130 -platformName x64 \ 131 -buildBase $(call FixPath, $(IDE_OUTPUTDIR)/vs-output) \ 132 -buildSpace $(call FixPath, $(IDE_OUTPUTDIR)) \ 133 -makeBinary $(call FixLinuxExecutable, $(MAKE)) \ 134 -makeOutput $(call FixPath, $(JDK_OUTPUTDIR)/bin/server) \ 135 -absoluteInclude $(call FixPath, $(HOTSPOT_OUTPUTDIR)/variant-server/gensrc) \ 136 -absoluteSrcInclude $(call FixPath, $(HOTSPOT_OUTPUTDIR)/variant-server/gensrc) \ 137 $(EXTRACTED_DEFINES_client) \ 138 $(EXTRACTED_INCLUDES_client) \ 139 $(ADDITIONAL_VARIANT_ARGS) \ 140 $(IGNORED_PLATFORMS_ARGS) \ 141 # 142 143 VCPROJ_VARDEPS := $(PROJECT_CREATOR_CLASS) $(PROJECT_CREATOR_ARGS) 144 VCPROJ_VARDEPS_FILE := $(call DependOnVariable, VCPROJ_VARDEPS, \ 145 $(VCPROJ_FILE).vardeps) 146 147 $(VCPROJ_FILE): $(BUILD_PROJECT_CREATOR) $(VCPROJ_VARDEPS_FILE) 148 $(call MakeDir, $(@D)) 149 $(call ExecuteWithLog, $@, \ 150 $(PROJECT_CREATOR_TOOL) $(PROJECT_CREATOR_CLASS) \ 151 $(PROJECT_CREATOR_ARGS) -projectFileName $(call FixPath, $@)) \ 152 $(LOG_INFO) 153 154 TARGETS += $(VCPROJ_FILE) 155 156 all: $(TARGETS) 157 158 else 159 all: 160 $(info Hotspot Visual Studio generation only supported on Windows) 161 endif 162 163 .PHONY: all