1 # 2 # Copyright (c) 1995, 2008, 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 # Common variables used by all the Java makefiles. This file should 28 # not contain rules. 29 # 30 31 # WARNING: This file is shared with other workspaces. 32 # So when it includes other files, it must use JDK_TOPDIR. 33 # 34 35 # Check for strange explicit settings (change to empty or true) 36 ifdef OPENJDK 37 ifneq ($(OPENJDK),true) 38 x:=$(error "OPENJDK (if defined) can only be set to true") 39 endif 40 endif 41 42 # 43 # On Solaris, the 'make' utility from Sun will not work with these makefiles. 44 # This little rule is only understood by Sun's make, and is harmless 45 # when seen by the GNU make tool. If using Sun's make, this causes the 46 # make command to fail. 47 # 48 SUN_MAKE_TEST:sh = echo "ERROR: PLEASE USE GNU VERSION OF MAKE"; exit 33 49 50 ifndef JDK_TOPDIR 51 ifdef BUILDDIR 52 JDK_TOPDIR=$(BUILDDIR)/.. 53 else 54 JDK_TOPDIR:=$(error "ERROR: Cannot define top of jdk repository") 55 endif 56 endif 57 ifndef BUILDDIR 58 # Hack, due to deploy repository using this file. 59 BUILDDIR=$(JDK_TOPDIR)/make 60 endif 61 ifndef JDK_MAKE_SHARED_DIR 62 JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared 63 endif 64 65 include $(JDK_MAKE_SHARED_DIR)/Platform.gmk 66 67 TOPDIR=$(BUILDDIR)/.. 68 69 include $(JDK_TOPDIR)/make/common/CancelImplicits.gmk 70 71 # Historically PLATFORM_SRC used to be src/$(PLATFORM), but we switched it to 72 # src/solaris so if you want to build on Linux you didn't need a src/linux 73 # directory. In an ideal world it would be called src/genunix but we are not 74 # there yet. 75 # 76 ifndef SHARE_SRC 77 SHARE_SRC = $(BUILDDIR)/../src/share 78 endif 79 80 # Files that cannot be included in the OpenJDK distribution are 81 # collected under a parent directory which contains just those files. 82 ifndef CLOSED_SRC 83 CLOSED_SRC = $(BUILDDIR)/../src/closed 84 endif 85 86 # If CLOSE_SRC_INCLUDED isn't set to true, check if there's any 87 # closed directory. 88 ifneq ($(CLOSED_SRC_INCLUDED), true) 89 CLOSED_SRC_INCLUDED := $(shell \ 90 if [ -d $(CLOSED_SRC) ] ; then \ 91 echo true; \ 92 else \ 93 echo false; \ 94 fi) 95 endif 96 97 # Set OPENJDK based on CLOSED_SRC_INCLUDED 98 ifeq ($(CLOSED_SRC_INCLUDED), false) 99 OPENJDK = true 100 endif 101 102 # Define where closed directories are 103 ifdef OPENJDK 104 CLOSED_SRC = 105 CLOSED_SHARE_SRC = 106 else 107 ifndef CLOSED_SHARE_SRC 108 CLOSED_SHARE_SRC = $(CLOSED_SRC)/share 109 endif 110 endif 111 112 # 113 # Get platform definitions 114 # 115 116 include $(JDK_TOPDIR)/make/common/Defs-$(PLATFORM).gmk 117 118 # 119 # Freetype logic is applicable to OpenJDK only 120 # 121 ifdef OPENJDK 122 123 #if we use system lib we do not need to copy it to build tree 124 USING_SYSTEM_FT_LIB=false 125 126 ifeq ($(PLATFORM), windows) 127 DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/win32/freetype-$(ARCH) 128 endif 129 ifeq ($(PLATFORM), linux) 130 DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(PLATFORM)/freetype-$(ARCH) 131 endif 132 ifeq ($(PLATFORM), solaris) 133 # historically for Solaris we have slightly different devtools 134 # naming conventions 135 DEVTOOLS_FT_DIR=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/freetype-$(ARCH) 136 endif 137 138 DEVTOOLS_FT_DIR_EXISTS = $(shell \ 139 if [ -f $(DEVTOOLS_FT_DIR)/include/ft2build.h ] ; then \ 140 echo true; \ 141 else \ 142 echo false; \ 143 fi) 144 145 ifdef ALT_FREETYPE_LIB_PATH 146 FREETYPE_LIB_PATH = $(ALT_FREETYPE_LIB_PATH) 147 else 148 ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) 149 FREETYPE_LIB_PATH = $(DEVTOOLS_FT_DIR)/lib 150 else 151 FREETYPE_LIB_PATH = /usr/lib 152 USING_SYSTEM_FT_LIB=true 153 endif 154 endif 155 156 ifdef ALT_FREETYPE_HEADERS_PATH 157 FREETYPE_HEADERS_PATH = $(ALT_FREETYPE_HEADERS_PATH) 158 else 159 ifeq ($(DEVTOOLS_FT_DIR_EXISTS), true) 160 FREETYPE_HEADERS_PATH = $(DEVTOOLS_FT_DIR)/include 161 else 162 FREETYPE_HEADERS_PATH = /usr/include 163 endif 164 endif 165 endif 166 167 # 168 # zlib version 169 # 170 ZLIB_VERSION = 1.2.3 171 172 173 # 174 # Localizations for the different parts of the product beyond English 175 # 176 177 JRE_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK 178 PLUGIN_LOCALES = de es fr it ja ko pt_BR sv zh_CN zh_TW zh_HK 179 JDK_LOCALES = ja zh_CN 180 181 # 182 # A list of locales we support but don't have resource files. 183 # This is defined to optimize the search of resource bundles. 184 # 185 JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh 186 187 # 188 # All libraries except libjava and libjvm itself link against libjvm and 189 # libjava, the latter for its exported common utilities. libjava only links 190 # against libjvm. Programs' makefiles take their own responsibility for 191 # adding other libs. 192 # 193 ifdef PACKAGE 194 # put JAVALIB first, but do not lose any platform specific values.... 195 LDLIBS_COMMON = $(JAVALIB) 196 endif # PACKAGE 197 198 # 199 # Libraries that must appear ahead of libc.so on the link command line 200 # 201 ifdef PROGRAM 202 203 ifeq ($(PLATFORM), solaris) 204 LDLIBS_COMMON = -lthread -ldl 205 endif 206 207 ifeq ($(PLATFORM), linux) 208 LDLIBS_COMMON = -ldl 209 endif 210 211 endif # PROGRAM 212 213 LDLIBS_COMMON += $(EXTRA_LIBS) 214 215 # for generated libraries 216 LIBDIR = $(OUTPUTDIR)/lib 217 ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib 218 # Optional place to save the windows .lib files 219 LIBFILES_DIR = $(OUTPUTDIR)/libfiles 220 # for ext jre files 221 EXTDIR = $(LIBDIR)/ext 222 # for generated include files 223 INCLUDEDIR = $(OUTPUTDIR)/include 224 # for generated class files 225 CLASSBINDIR = $(OUTPUTDIR)/classes 226 DEMOCLASSDIR = $(OUTPUTDIR)/democlasses 227 # for modules 228 MODULES_DIR = $(OUTPUTDIR)/modules 229 ABS_MODULES_DIR = $(ABS_OUTPUTDIR)/modules 230 # for generated tool class files 231 BUILDTOOLCLASSDIR = $(OUTPUTDIR)/btclasses 232 # for build tool jar files 233 BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars 234 ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars 235 # for generated tool class files 236 BUILDTOOLBINDIR = $(OUTPUTDIR)/btbins 237 # for generated java source files 238 GENSRCDIR = $(OUTPUTDIR)/gensrc 239 # for generated C source files (not javah) 240 GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc 241 # for imported source files 242 IMPORTSRCDIR = $(OUTPUTDIR)/impsrc 243 # for imported documents 244 IMPORTDOCDIR = $(OUTPUTDIR)/impdoc 245 # for generated demo 246 DEMODIR = $(OUTPUTDIR)/demo 247 # for sample code 248 SAMPLEDIR = $(OUTPUTDIR)/sample 249 # for generated documentation 250 DOCSDIR = $(OUTPUTDIR)/docs$(DOCSDIRSUFFIX) 251 DOCSDIRSUFFIX = 252 253 # The MESSAGE, WARNING and ERROR files are used to store sanityck and 254 # warnings and errors. 255 ifndef ERROR_FILE 256 ERROR_FILE = $(OUTPUTDIR)/sanityCheckErrors.txt 257 endif 258 ifndef WARNING_FILE 259 WARNING_FILE = $(OUTPUTDIR)/sanityCheckWarnings.txt 260 endif 261 ifndef MESSAGE_FILE 262 MESSAGE_FILE = $(OUTPUTDIR)/sanityCheckMessages.txt 263 endif 264 265 JDK_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2sdk-image 266 JRE_IMAGE_DIR = $(ABS_OUTPUTDIR)/j2re-image 267 268 #where the demo source can be found 269 DEMOSRCDIR = $(SHARE_SRC)/demo 270 271 # An attempt is made to generate unique enough directories for the 272 # generated files to not have name collisisons. Most build units 273 # defines PRODUCT (except Release.gmk), but then they may or may 274 # not define PACKAGE, THREADIR (only HPI uses this), PROGRAM, and 275 # LIBRARY. This code chunk attempts to generate a unique 276 # OBJDIR/CLASSHDRDIR for each build unit based on which of those 277 # values are set within each build unit. 278 279 UNIQUE_LOCATION_STRING = tmp 280 281 ifneq ($(PRODUCT),) 282 UNIQUE_LOCATION_STRING += /$(PRODUCT) 283 endif 284 285 ifneq ($(PACKAGE),) 286 UNIQUE_LOCATION_STRING += /$(PACKAGE) 287 endif 288 289 ifneq ($(PROGRAM),) 290 UNIQUE_LOCATION_STRING += /$(PROGRAM) 291 endif 292 293 ifneq ($(LIBRARY),) 294 ifneq ($(LIBRARY_OUTPUT),) 295 UNIQUE_LOCATION_STRING += /$(LIBRARY_OUTPUT) 296 else 297 UNIQUE_LOCATION_STRING += /$(LIBRARY) 298 endif 299 endif 300 301 ifneq ($(THREADDIR),) 302 UNIQUE_LOCATION_STRING += /$(THREADDIR) 303 endif 304 305 # 306 # Build units may or may not define MODULE. Default to "other". 307 # 308 # MODULE variable defines the lowest-level module name that 309 # might or might not be the name of the modules created in 310 # the modules build (see make/modules/modules.config and 311 # modules.group). 312 # 313 MODULES_TEMPDIR = $(OUTPUTDIR)/tmp/modules 314 ABS_MODULES_TEMPDIR = $(ABS_OUTPUTDIR)/tmp/modules 315 316 ifndef MODULE 317 MODULE = other 318 endif 319 override MODULE_DEST_DIR = $(MODULES_TEMPDIR)/$(MODULE) 320 321 # the use of += above makes a space separated list which we need to 322 # remove for filespecs. 323 # 324 NULLSTRING := 325 ONESPACE := $(NULLSTRING) # space before this comment is required. 326 UNIQUE_PATH = $(subst $(ONESPACE),,$(UNIQUE_LOCATION_STRING)) 327 328 # TEMPDIR is a unique general purpose directory 329 # need to use 'override' because GNU Make on Linux exports the wrong 330 # value. 331 override TEMPDIR = $(OUTPUTDIR)/$(UNIQUE_PATH) 332 override ABS_TEMPDIR = $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) 333 334 # This must be created right away for pattern rules in Sanity.gmk to work. 335 dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) 336 dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) 337 338 # OBJDIRNAME is the name of the directory where the object code is to 339 # be placed. It's name depends on whether the data model architecture 340 # is 32-bit or not. 341 ifneq ($(ARCH_DATA_MODEL), 32) 342 OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) 343 else 344 OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) 345 endif 346 OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) 347 348 # CLASSHDRDIR is where the generated C Class Header files go. 349 CLASSHDRDIR = $(TEMPDIR)/CClassHeaders 350 351 # 352 # CLASSDESTDIR can be used to specify the directory where generated classes 353 # are to be placed. The default is CLASSBINDIR. 354 # 355 ifndef CLASSDESTDIR 356 CLASSDESTDIR = $(CLASSBINDIR) 357 endif 358 359 INCLUDES = -I. -I$(CLASSHDRDIR) \ 360 $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) 361 OTHER_CPPFLAGS = $(INCLUDES) 362 363 364 # 365 # vpaths. These are the default locations searched for source files. 366 # GNUmakefiles of individual areas often override the default settings. 367 # There are no longer default vpath entries for C and assembler files 368 # so we can ensure that libraries don't get their hands on JVM files. 369 # 370 # We define an intermediate variable for Java files because 371 # we use its value later to help define $SOURCEPATH 372 373 VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes 374 ifdef OPENJDK 375 VPATH.java = $(VPATH0.java) 376 else 377 # 378 # If filenames are duplicated between open/closed workspaces, prefer 379 # the closed files. 380 # 381 # Source ordering is important: some targets depend on closed files 382 # replacing open ones, and thus the closed file sources must be found 383 # before the open ones. 384 # 385 # Don't reorder without consulting the teams that depend on this behavior. 386 # 387 VPATH.java = $(CLOSED_PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(CLOSED_SHARE_SRC)/classes$(CLASSPATH_SEPARATOR)$(VPATH0.java) 388 endif 389 vpath %.java $(VPATH.java) 390 vpath %.class $(CLASSBINDIR) 391 vpath %.$(OBJECT_SUFFIX) $(OBJDIR) 392 393 # 394 # VPATH.h is used elsewhere to generate include flags. By default, 395 # anyone has access to the include files that the JVM area exports, 396 # namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific 397 # relatives. 398 # 399 VPATH.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export 400 vpath %.h $(VPATH.h) 401 402 # 403 # Used in two ways: helps link against libjava.so. Also if overridden 404 # determines where your shared library is installed. 405 # 406 ifndef LIB_LOCATION 407 LIB_LOCATION = $(LIBDIR)/$(LIBARCH) 408 endif 409 410 # 411 # Java header and stub variables 412 # 413 CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) 414 CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) 415 STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h 416 417 # 418 # Classpath seen by javac (different from the one seen by the VM 419 # running javac), and useful variables. 420 # 421 SOURCEPATH = $(VPATH.java) 422 PKG = $(shell $(EXPR) $(PACKAGE) : '\([a-z]*\)') 423 PKGDIR = $(subst .,/,$(PACKAGE)) 424 425 # 426 # The java/javac/jdk variables (JAVAC_CMD, JAVA_CMD, etc.) 427 # 428 include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk 429 430 # 431 # Macros to find the module that $@ belongs to 432 # 433 434 UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH)) 435 MODULE_PATH_PATTERN = -e 's%.*\/classes\/%classes\/%' \ 436 -e 's%.*\/$(UNIQUE_PATH_PATTERN)\/%classes\/%' \ 437 -e 's%.*\/lib\/%lib\/%' \ 438 -e 's%.*\/bin\/%bin\/%' \ 439 -e 's%.*\/include\/%include\/%' \ 440 -e 's%.*\/demo\/%demo\/%' \ 441 -e 's%.*\/sample\/%sample\/%' 442 443 # Install a file to its module 444 define install-module-file 445 dest=`echo $(@D)/ | $(SED) $(MODULE_PATH_PATTERN)` ; \ 446 $(MKDIR) -p $(MODULE_DEST_DIR)/$$dest; \ 447 $(CP) -f $@ $(MODULE_DEST_DIR)/$$dest 448 endef 449 450 # Install all files from the directory to its module 451 define install-module-dir 452 dest=`echo $(@D)/ | $(SED) $(MODULE_PATH_PATTERN)` ; \ 453 $(MKDIR) -p $(MODULE_DEST_DIR)/$$dest; \ 454 $(CP) -rf $(@D)/* $(MODULE_DEST_DIR)/$$dest 455 endef 456 457 # chmod the file in its module 458 define chmod-module-file 459 dest=`echo $@ | $(SED) $(MODULE_PATH_PATTERN)` ; \ 460 $(CHMOD) $1 $(MODULE_DEST_DIR)/$$dest 461 endef 462 463 # install a sym link in its module 464 define install-module-sym-link 465 dest=`echo $@ | $(SED) $(MODULE_PATH_PATTERN)` ; \ 466 $(LN) -sf $1 $(MODULE_DEST_DIR)/$$dest 467 endef 468 469 470 # Run MAKE $@ for a launcher: 471 # $(call make-launcher, name, mainclass, java-args, main-args) 472 define make-launcher 473 $(CD) $(BUILDDIR)/launchers && \ 474 $(MAKE) -f Makefile.launcher \ 475 MODULE=$(MODULE) \ 476 PROGRAM=$(strip $1) \ 477 MAIN_CLASS=$(strip $2) \ 478 MAIN_JAVA_ARGS="$(strip $3)" \ 479 MAIN_ARGS="$(strip $4)" 480 endef 481 482 # 483 # Convenient macros 484 # 485 486 # Prepare $@ target, remove old one and making sure directory exists 487 define prep-target 488 $(MKDIR) -p $(@D) 489 $(RM) $@ 490 endef 491 492 # Simple install of $< file to $@ 493 define install-file 494 $(prep-target) 495 $(CP) $< $@ 496 @$(install-module-file) 497 endef 498 499 define chmod-file 500 $(CHMOD) $1 $@ 501 @$(call chmod-module-file, $1) 502 endef 503 504 define install-sym-link 505 $(LN) -s $1 $@ 506 @$(call install-module-sym-link, $1) 507 endef 508 509 # 510 # Marcos for files not belonging to any module 511 define install-non-module-file 512 $(prep-target) 513 $(CP) $< $@ 514 endef 515 516 define install-manifest-file 517 $(install-non-module-file) 518 endef 519 520 # Cleanup rule for after debug java run (hotspot.log file is left around) 521 # (This could be an old leftover file in a read-only area, use the @- prefix) 522 HOTSPOT_LOG_NAME = hotspot.log 523 define java-vm-cleanup 524 if [ -w $(HOTSPOT_LOG_NAME) ] ; then $(RM) $(HOTSPOT_LOG_NAME); fi 525 endef 526 527 # Current directory 528 CURRENT_DIRECTORY := $(shell $(PWD)) 529 530 # 531 # Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is 532 # used for this file, otherwise the default settings are used. 533 # 534 CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ 535 $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) 536 CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ 537 $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) 538 539 # 540 # Tool flags 541 # 542 ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) 543 CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) 544 CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) 545 CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ 546 $(DEFINES) $(OPTIONS:%=-D%) 547 LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) 548 LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) 549 LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ 550 $(OTHER_LINTFLAGS) 551 552 VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' 553 554 ifdef INSANE 555 export INSANE 556 endif 557 558 ifdef ALT_COPYRIGHT_YEAR 559 COPYRIGHT_YEAR = $(ALT_COPYRIGHT_YEAR) 560 else 561 COPYRIGHT_YEAR := $(shell $(DATE) '+%Y') 562 endif 563 564 # Install of imported file (JDK_IMPORT_PATH, or some other external location) 565 define install-importonly-file 566 @$(ECHO) "ASSEMBLY_IMPORT: $@" 567 $(prep-target) 568 $(CP) $< $@ 569 @if [ "$(PLATFORM)" = "linux" -a "$(@F)" = "libjvm.so" ] ; then \ 570 if [ -x /usr/sbin/selinuxenabled ] ; then \ 571 /usr/sbin/selinuxenabled; \ 572 if [ $$? = 0 ] ; then \ 573 $(ECHO) "/usr/bin/chcon -t textrel_shlib_t $@"; \ 574 /usr/bin/chcon -t textrel_shlib_t $@; \ 575 if [ $$? != 0 ]; then \ 576 echo "ERROR: Cannot chcon $@"; \ 577 fi; \ 578 fi; \ 579 fi; \ 580 fi 581 endef 582 583 define install-import-file 584 $(install-importonly-file) 585 @$(install-module-file) 586 endef 587 588 .PHONY: all build clean clobber