src/share/tools/hsdis/Makefile

Wed, 29 Aug 2018 17:32:00 +0800

author
zhaixiang
date
Wed, 29 Aug 2018 17:32:00 +0800
changeset 9226
80768a44078a
parent 9225
58828a330030
child 9572
624a0741915c
permissions
-rw-r--r--

#7406 [C1] Fix fatal error: Thread holding lock at safepoint that vm can block on: tty_lock issue
Summary: Only for mips64 linking with -Wl,-z,noexecstack flag
Reviewed-by: aoqi

aoqi@0 1 #
aoqi@0 2 # Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 #
aoqi@0 5 # This code is free software; you can redistribute it and/or modify it
aoqi@0 6 # under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 # published by the Free Software Foundation.
aoqi@0 8 #
aoqi@0 9 # This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 12 # version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 13 # accompanied this code).
aoqi@0 14 #
aoqi@0 15 # You should have received a copy of the GNU General Public License version
aoqi@0 16 # 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 18 #
aoqi@0 19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 20 # or visit www.oracle.com if you need additional information or have any
aoqi@0 21 # questions.
aoqi@0 22 #
aoqi@0 23 #
aoqi@0 24
aoqi@0 25 # Single gnu makefile for solaris, linux and windows (windows requires cygwin and mingw)
aoqi@0 26
aoqi@0 27 # Default arch; it is changed below as needed.
aoqi@0 28 ARCH = i386
aoqi@0 29 OS = $(shell uname)
aoqi@0 30 AR = ar
aoqi@0 31
aoqi@0 32 ## OS = SunOS ##
aoqi@0 33 ifeq ($(OS),SunOS)
aoqi@0 34 CPU = $(shell uname -p)
aoqi@0 35 ARCH1=$(CPU:i586=i386)
aoqi@0 36 ARCH=$(ARCH1:i686=i386)
aoqi@0 37 OS = solaris
aoqi@0 38 CC = cc
aoqi@0 39 CFLAGS += -KPIC
aoqi@0 40 ifdef LP64
aoqi@0 41 ifeq ($(ARCH),sparc)
aoqi@0 42 ARCH = sparcv9
aoqi@0 43 endif
aoqi@0 44 ifeq ($(ARCH),i386)
aoqi@0 45 ARCH = amd64
aoqi@0 46 endif
aoqi@0 47 endif
aoqi@0 48 CFLAGS/sparcv9 += -xarch=v9
aoqi@0 49 CFLAGS/amd64 += -m64
aoqi@0 50 CFLAGS += $(CFLAGS/$(ARCH))
aoqi@0 51 DLDFLAGS += -G
aoqi@0 52 LDFLAGS += -ldl
aoqi@0 53 OUTFLAGS += -o $@
aoqi@0 54 LIB_EXT = .so
aoqi@0 55 else
aoqi@0 56 ## OS = Linux ##
aoqi@0 57 ifeq ($(OS),Linux)
aoqi@0 58 ifneq ($(MINGW),)
aoqi@0 59 LIB_EXT = .dll
aoqi@0 60 CPPFLAGS += -I$(TARGET_DIR)/include
aoqi@0 61 LDFLAGS += -L$(TARGET_DIR)/lib
aoqi@0 62 OS=windows
aoqi@0 63 ifneq ($(findstring x86_64-,$(MINGW)),)
aoqi@0 64 ARCH=amd64
aoqi@0 65 else
aoqi@0 66 ARCH=i386
aoqi@0 67 endif
aoqi@0 68 CC = $(MINGW)-gcc
aoqi@0 69 CONFIGURE_ARGS= --host=$(MINGW) --target=$(MINGW)
aoqi@0 70 else #linux
aoqi@0 71 CPU = $(shell uname -m)
aoqi@0 72 ARCH1=$(CPU:x86_64=amd64)
aoqi@0 73 ARCH=$(ARCH1:i686=i386)
aoqi@0 74 ifdef LP64
aoqi@0 75 CFLAGS/sparcv9 += -m64
aoqi@0 76 CFLAGS/amd64 += -m64
aoqi@0 77 CFLAGS/ppc64 += -m64
aoqi@0 78 else
aoqi@0 79 ARCH=$(ARCH1:amd64=i386)
aoqi@0 80 CFLAGS/i386 += -m32
aoqi@0 81 CFLAGS/sparc += -m32
aoqi@0 82 endif
aoqi@0 83 CFLAGS += $(CFLAGS/$(ARCH))
aoqi@0 84 CFLAGS += -fPIC
aoqi@432 85 ifeq ($(ARCH), mips64)
aoqi@432 86 CPUINFO = $(shell cat /proc/cpuinfo)
aoqi@432 87 ifneq ($(findstring Loongson,$(CPUINFO)),)
aoqi@432 88 CFLAGS += -DLOONGSON
aoqi@432 89 endif
aoqi@432 90 endif
aoqi@0 91 OS = linux
aoqi@0 92 LIB_EXT = .so
aoqi@0 93 CC = gcc
aoqi@0 94 endif
aoqi@0 95 CFLAGS += -O
aoqi@0 96 DLDFLAGS += -shared
zhaixiang@9226 97 ifeq ($(ARCH), mips64)
zhaixiang@9225 98 DLDFLAGS += -Wl,-z,noexecstack
zhaixiang@9226 99 endif
aoqi@0 100 LDFLAGS += -ldl
aoqi@0 101 OUTFLAGS += -o $@
aoqi@0 102 else
aoqi@0 103 ## OS = AIX ##
aoqi@0 104 ifeq ($(OS),AIX)
aoqi@0 105 OS = aix
aoqi@0 106 ARCH = ppc64
aoqi@0 107 CC = xlc_r
aoqi@0 108 CFLAGS += -DAIX -g -qpic=large -q64
aoqi@0 109 CFLAGS/ppc64 += -q64
aoqi@0 110 AR = ar -X64
aoqi@0 111 DLDFLAGS += -qmkshrobj -lz
aoqi@0 112 OUTFLAGS += -o $@
aoqi@0 113 LIB_EXT = .so
aoqi@0 114 else
aoqi@0 115 ## OS = Darwin ##
aoqi@0 116 ifeq ($(OS),Darwin)
aoqi@0 117 CPU = $(shell uname -m)
aoqi@0 118 ARCH1=$(CPU:x86_64=amd64)
aoqi@0 119 ARCH=$(ARCH1:i686=i386)
aoqi@0 120 ifdef LP64
aoqi@0 121 CFLAGS/sparcv9 += -m64
aoqi@0 122 CFLAGS/amd64 += -m64
aoqi@0 123 else
aoqi@0 124 ARCH=$(ARCH1:amd64=i386)
aoqi@0 125 CFLAGS/i386 += -m32
aoqi@0 126 CFLAGS/sparc += -m32
aoqi@0 127 endif # LP64
aoqi@0 128 CFLAGS += $(CFLAGS/$(ARCH))
aoqi@0 129 CFLAGS += -fPIC
aoqi@0 130 OS = macosx
aoqi@0 131 LIB_EXT = .dylib
aoqi@0 132 CC = gcc
aoqi@0 133 CFLAGS += -O
aoqi@0 134 # CFLAGS += -DZ_PREFIX
aoqi@0 135 DLDFLAGS += -shared
aoqi@0 136 DLDFLAGS += -lz
aoqi@0 137 LDFLAGS += -ldl
aoqi@0 138 OUTFLAGS += -o $@
aoqi@0 139 else
aoqi@0 140 ## OS = Windows ##
aoqi@0 141 OS = windows
aoqi@0 142 CC = gcc
aoqi@0 143 CFLAGS += /nologo /MD /W3 /WX /O2 /Fo$(@:.dll=.obj) /Gi-
aoqi@0 144 CFLAGS += LIBARCH=\"$(LIBARCH)\"
aoqi@0 145 DLDFLAGS += /dll /subsystem:windows /incremental:no \
aoqi@0 146 /export:decode_instruction
aoqi@0 147 OUTFLAGS += /link /out:$@
aoqi@0 148 LIB_EXT = .dll
aoqi@0 149 endif # Darwin
aoqi@0 150 endif # AIX
aoqi@0 151 endif # Linux
aoqi@0 152 endif # SunOS
aoqi@0 153
aoqi@0 154 LIBARCH = $(ARCH)
aoqi@0 155 ifdef LP64
aoqi@0 156 LIBARCH64/sparc = sparcv9
aoqi@0 157 LIBARCH64/i386 = amd64
aoqi@0 158 LIBARCH64 = $(LIBARCH64/$(ARCH))
aoqi@0 159 ifneq ($(LIBARCH64),)
aoqi@0 160 LIBARCH = $(LIBARCH64)
aoqi@0 161 endif # LIBARCH64/$(ARCH)
aoqi@0 162 endif # LP64
aoqi@0 163
aoqi@0 164 JDKARCH=$(LIBARCH:i386=i586)
aoqi@0 165
aoqi@0 166 ifeq ($(BINUTILS),)
aoqi@0 167 # Pop all the way out of the workspace to look for binutils.
aoqi@0 168 # ...You probably want to override this setting.
aoqi@0 169 BINUTILSDIR = $(shell cd build/binutils;pwd)
aoqi@0 170 else
aoqi@0 171 BINUTILSDIR = $(shell cd $(BINUTILS);pwd)
aoqi@0 172 endif
aoqi@0 173
aoqi@0 174 CPPFLAGS += -I$(BINUTILSDIR)/include -I$(BINUTILSDIR)/bfd -I$(TARGET_DIR)/bfd
aoqi@0 175 CPPFLAGS += -DLIBARCH_$(LIBARCH) -DLIBARCH=\"$(LIBARCH)\" -DLIB_EXT=\"$(LIB_EXT)\"
aoqi@0 176
aoqi@0 177 TARGET_DIR = build/$(OS)-$(JDKARCH)
aoqi@0 178 TARGET = $(TARGET_DIR)/hsdis-$(LIBARCH)$(LIB_EXT)
aoqi@0 179
aoqi@0 180 SOURCE = hsdis.c
aoqi@0 181
aoqi@0 182 LIBRARIES = $(TARGET_DIR)/bfd/libbfd.a \
aoqi@0 183 $(TARGET_DIR)/opcodes/libopcodes.a \
aoqi@0 184 $(TARGET_DIR)/libiberty/libiberty.a
aoqi@0 185
aoqi@0 186 DEMO_TARGET = $(TARGET_DIR)/hsdis-demo
aoqi@0 187 DEMO_SOURCE = hsdis-demo.c
aoqi@0 188
aoqi@0 189 .PHONY: all clean demo both
aoqi@0 190
aoqi@0 191 all: $(TARGET)
aoqi@0 192
aoqi@0 193 both: all all64
aoqi@0 194
aoqi@0 195 %64:
aoqi@0 196 $(MAKE) LP64=1 ${@:%64=%}
aoqi@0 197
aoqi@0 198 demo: $(TARGET) $(DEMO_TARGET)
aoqi@0 199
aoqi@0 200 $(LIBRARIES): $(TARGET_DIR) $(TARGET_DIR)/Makefile
aoqi@0 201 if [ ! -f $@ ]; then cd $(TARGET_DIR); make all-opcodes; fi
aoqi@0 202
aoqi@0 203 $(TARGET_DIR)/Makefile:
aoqi@0 204 (cd $(TARGET_DIR); CC=$(CC) CFLAGS="$(CFLAGS)" AR="$(AR)" $(BINUTILSDIR)/configure --disable-nls $(CONFIGURE_ARGS))
aoqi@0 205
aoqi@0 206 $(TARGET): $(SOURCE) $(LIBS) $(LIBRARIES) $(TARGET_DIR)
aoqi@0 207 $(CC) $(OUTFLAGS) $(CPPFLAGS) $(CFLAGS) $(SOURCE) $(DLDFLAGS) $(LIBRARIES)
aoqi@0 208
aoqi@0 209 $(DEMO_TARGET): $(DEMO_SOURCE) $(TARGET) $(TARGET_DIR)
aoqi@0 210 $(CC) $(OUTFLAGS) -DTARGET_DIR=\"$(TARGET_DIR)\" $(CPPFLAGS) -g $(CFLAGS/$(ARCH)) $(DEMO_SOURCE) $(LDFLAGS)
aoqi@0 211
aoqi@0 212 $(TARGET_DIR):
aoqi@0 213 [ -d $@ ] || mkdir -p $@
aoqi@0 214
aoqi@0 215 clean:
aoqi@0 216 rm -rf $(TARGET_DIR)

mercurial