1# 2# %CopyrightBegin% 3# 4# Copyright Ericsson AB 2004-2020. All Rights Reserved. 5# 6# Licensed under the Apache License, Version 2.0 (the "License"); 7# you may not use this file except in compliance with the License. 8# You may obtain a copy of the License at 9# 10# http://www.apache.org/licenses/LICENSE-2.0 11# 12# Unless required by applicable law or agreed to in writing, software 13# distributed under the License is distributed on an "AS IS" BASIS, 14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15# See the License for the specific language governing permissions and 16# limitations under the License. 17# 18# %CopyrightEnd% 19# 20 21include $(ERL_TOP)/make/output.mk 22include $(ERL_TOP)/make/target.mk 23include ../include/internal/$(TARGET)/ethread.mk 24 25ifeq ($(TARGET),win32) 26EXE_SUFFIX=.exe 27else 28EXE_SUFFIX= 29endif 30 31OMIT_OMIT_FP=no 32 33CC=@CC@ 34LD=@LD@ 35AR=@AR@ 36RANLIB=@RANLIB@ 37MKDIR=@MKDIR@ 38INSTALL=@INSTALL@ 39INSTALL_DIR=@INSTALL_DIR@ 40INSTALL_DATA=@INSTALL_DATA@ 41INSTALL_PROGRAM=@INSTALL_PROGRAM@ 42 43ERLANG_OSTYPE=@ERLANG_OSTYPE@ 44 45OMIT_FP=false 46CFLAGS=$(subst O2,O3, @CFLAGS@) 47LDFLAGS=@LDFLAGS@ 48 49ifeq ($(TYPE),debug) 50CFLAGS=@DEBUG_CFLAGS@ -DDEBUG 51TYPE_SUFFIX=.debug 52ifeq ($(USING_VC),yes) 53LD_FLAGS += -g 54endif 55PRE_LD= 56 57else 58 59ifeq ($(TYPE),gcov) 60CFLAGS=@DEBUG_CFLAGS@ -DGCOV -fprofile-arcs -ftest-coverage -O0 61TYPE_SUFFIX=.gcov 62PRE_LD= 63else 64ifeq ($(TYPE),valgrind) 65CFLAGS=@DEBUG_CFLAGS@ -DVALGRIND 66TYPE_SUFFIX=.valgrind 67PRE_LD= 68else 69ifeq ($(TYPE),asan) 70CFLAGS=@DEBUG_CFLAGS@ 71TYPE_SUFFIX=.asan 72PRE_LD= 73else 74ifeq ($(TYPE),gprof) 75CFLAGS += -DGPROF -pg 76TYPE_SUFFIX=.gprof 77PRE_LD= 78else 79ifeq ($(TYPE),lcnt) 80TYPE_SUFFIX = .lcnt 81CFLAGS += -DERTS_ENABLE_LOCK_COUNT 82OMIT_FP=true 83PRE_LD= 84else 85ifeq ($(TYPE),frmptr) 86TYPE_SUFFIX = .frmptr 87CFLAGS += -DERTS_FRMPTR 88OMIT_OMIT_FP=yes 89PRE_LD= 90else 91ifeq ($(TYPE),icount) 92TYPE_SUFFIX = .icount 93CFLAGS += -DERTS_OPCODE_COUNTER_SUPPORT 94PRE_LD= 95else 96override TYPE=opt 97OMIT_FP=true 98TYPE_SUFFIX= 99PRE_LD= 100endif 101endif 102endif 103endif 104endif 105endif 106endif 107endif 108 109OPSYS=@OPSYS@ 110sol2CFLAGS= 111linuxCFLAGS= 112darwinCFLAGS=-DDARWIN 113noopsysCFLAGS= 114OPSYSCFLAGS=$($(OPSYS)CFLAGS) 115ARCH=@ARCH@ 116ultrasparcCFLAGS=-Wa,-xarch=v8plusa 117ARCHCFLAGS=$($(ARCH)CFLAGS) 118 119ifeq ($(OMIT_OMIT_FP),yes) 120CFLAGS += -fno-omit-frame-pointer 121OMIT_FP=false 122endif 123 124CREATE_DIRS= 125 126ifeq ($(CC)-$(OMIT_FP), gcc-true) 127CFLAGS += -fomit-frame-pointer 128endif 129 130CFLAGS += @WFLAGS@ @DEFS@ $(ARCHCFLAGS) 131 132ifeq ($(findstring -D_GNU_SOURCE,$(CFLAGS)),) 133THR_DEFS = $(ETHR_DEFS) 134else 135# Remove duplicate -D_GNU_SOURCE 136THR_DEFS = $(filter-out -D_GNU_SOURCE%, $(ETHR_DEFS)) 137endif 138 139LIBS=@LIBS@ 140 141TT_DIR=$(TARGET)/$(TYPE) 142 143ERTS_INCL=../include 144ERTS_INCL_INT=../include/internal 145 146INCLUDES=-I$(ERTS_INCL) -I$(ERTS_INCL)/$(TARGET) -I$(ERTS_INCL_INT) -I$(ERTS_INCL_INT)/$(TARGET) 147INCLUDES += -I../emulator/beam -I../emulator/sys/$(ERLANG_OSTYPE) 148 149USING_VC=@MIXED_VC@ 150 151ifeq ($(USING_VC),yes) 152LIB_SUFFIX=.lib 153LIB_PREFIX= 154else 155LIB_SUFFIX=.a 156LIB_PREFIX=lib 157endif 158 159OBJS_ROOT_DIR=obj 160OBJ_DIR=$(OBJS_ROOT_DIR)/$(TT_DIR) 161 162CREATE_DIRS += $(OBJ_DIR) 163 164ERTS_LIBS= 165 166ifeq ($(findstring -D_GNU_SOURCE,$(CFLAGS)),) 167THR_DEFS = $(ETHR_DEFS) 168else 169# Remove duplicate -D_GNU_SOURCE 170THR_DEFS = $(filter-out -D_GNU_SOURCE%, $(ETHR_DEFS)) 171endif 172 173# 174# erts (public) library 175# 176 177ERTS_LIB_SRCS = common/erl_memory_trace_parser.c 178 179ERTS_LIB_DIR=../lib/$(TARGET) 180CREATE_DIRS += $(ERTS_LIB_DIR) 181 182ifeq ($(USING_VC),yes) 183# Windows obj dir 184MD_OBJ_DIR=$(OBJ_DIR)/MD 185MDd_OBJ_DIR=$(OBJ_DIR)/MDd 186MT_OBJ_DIR=$(OBJ_DIR)/MT 187MTd_OBJ_DIR=$(OBJ_DIR)/MTd 188 189CREATE_DIRS += $(MD_OBJ_DIR) \ 190 $(MDd_OBJ_DIR) \ 191 $(MT_OBJ_DIR) \ 192 $(MTd_OBJ_DIR) 193 194ERTS_MD_LIB_OBJS=$(addprefix $(MD_OBJ_DIR)/,$(notdir $(ERTS_LIB_SRCS:.c=.o))) 195ERTS_MDd_LIB_OBJS=$(addprefix $(MDd_OBJ_DIR)/,$(notdir $(ERTS_LIB_SRCS:.c=.o))) 196ERTS_MT_LIB_OBJS=$(addprefix $(MT_OBJ_DIR)/,$(notdir $(ERTS_LIB_SRCS:.c=.o))) 197ERTS_MTd_LIB_OBJS=$(addprefix $(MTd_OBJ_DIR)/,$(notdir $(ERTS_LIB_SRCS:.c=.o))) 198 199else # --- Not windows --- 200 201# Reentrant obj dir 202ifneq ($(strip $(ETHR_LIB_NAME)),) 203r_OBJ_DIR = $(OBJ_DIR)/r 204CREATE_DIRS += $(r_OBJ_DIR) 205ERTS_r_LIB_OBJS=$(addprefix $(r_OBJ_DIR)/,$(notdir $(ERTS_LIB_SRCS:.c=.o))) 206endif 207ERTS_LIB_OBJS=$(addprefix $(OBJ_DIR)/,$(notdir $(ERTS_LIB_SRCS:.c=.o))) 208 209endif 210 211ifeq ($(USING_VC),yes) 212ERTS_MD_LIB=$(ERTS_LIB_DIR)/$(LIB_PREFIX)erts_MD$(TYPE_SUFFIX)$(LIB_SUFFIX) 213ERTS_MDd_LIB=$(ERTS_LIB_DIR)/$(LIB_PREFIX)erts_MDd$(TYPE_SUFFIX)$(LIB_SUFFIX) 214ERTS_MT_LIB=$(ERTS_LIB_DIR)/$(LIB_PREFIX)erts_MT$(TYPE_SUFFIX)$(LIB_SUFFIX) 215ERTS_MTd_LIB=$(ERTS_LIB_DIR)/$(LIB_PREFIX)erts_MTd$(TYPE_SUFFIX)$(LIB_SUFFIX) 216ERTS_LIBS += \ 217 $(ERTS_MD_LIB) \ 218 $(ERTS_MDd_LIB) \ 219 $(ERTS_MT_LIB) \ 220 $(ERTS_MTd_LIB) 221else 222 223ERTS_LIB = $(ERTS_LIB_DIR)/$(LIB_PREFIX)erts$(TYPE_SUFFIX)$(LIB_SUFFIX) 224ERTS_LIBS += $(ERTS_LIB) 225 226ifneq ($(strip $(ETHR_LIB_NAME)),) 227ERTS_r_LIB = $(ERTS_LIB_DIR)/$(LIB_PREFIX)erts_r$(TYPE_SUFFIX)$(LIB_SUFFIX) 228ERTS_LIBS += $(ERTS_r_LIB) 229endif 230 231endif 232 233# 234# erts_internal library 235# 236 237ERTS_LIB_INTERNAL_DIR=../lib/internal/$(TARGET) 238CREATE_DIRS += $(ERTS_LIB_INTERNAL_DIR) 239 240ERTS_INTERNAL_LIBS= 241 242ERTS_INTERNAL_LIB_SRCS = \ 243 common/erl_printf_format.c \ 244 common/erl_printf.c \ 245 common/erl_misc_utils.c 246 247ERTS_INTERNAL_LIB_NAME=erts_internal$(TYPE_SUFFIX) 248 249ifeq ($(USING_VC),yes) 250ifeq ($(TYPE),debug) 251ERTS_INTERNAL_LIB_OBJS = \ 252 $(addprefix $(MTd_OBJ_DIR)/,$(notdir $(ERTS_INTERNAL_LIB_SRCS:.c=.o))) 253else 254ERTS_INTERNAL_LIB_OBJS = \ 255 $(addprefix $(MT_OBJ_DIR)/,$(notdir $(ERTS_INTERNAL_LIB_SRCS:.c=.o))) 256endif 257else 258ERTS_INTERNAL_LIB_OBJS = \ 259 $(addprefix $(OBJ_DIR)/,$(notdir $(ERTS_INTERNAL_LIB_SRCS:.c=.o))) 260endif 261 262ERTS_INTERNAL_LIB=$(ERTS_LIB_INTERNAL_DIR)/$(LIB_PREFIX)$(ERTS_INTERNAL_LIB_NAME)$(LIB_SUFFIX) 263 264ERTS_INTERNAL_LIBS += $(ERTS_INTERNAL_LIB) 265 266ifneq ($(strip $(ETHR_LIB_NAME)),) 267ERTS_INTERNAL_r_LIB_NAME=erts_internal_r$(TYPE_SUFFIX) 268 269ifeq ($(USING_VC),yes) 270ifeq ($(TYPE),debug) 271ERTS_INTERNAL_r_LIB_OBJS = \ 272 $(addprefix $(MDd_OBJ_DIR)/,$(notdir $(ERTS_INTERNAL_LIB_SRCS:.c=.o))) 273else 274ERTS_INTERNAL_r_LIB_OBJS = \ 275 $(addprefix $(MD_OBJ_DIR)/,$(notdir $(ERTS_INTERNAL_LIB_SRCS:.c=.o))) 276endif 277else 278ERTS_INTERNAL_r_LIB_OBJS = \ 279 $(addprefix $(r_OBJ_DIR)/,$(notdir $(ERTS_INTERNAL_LIB_SRCS:.c=.o))) 280endif 281 282ERTS_INTERNAL_r_LIB=$(ERTS_LIB_INTERNAL_DIR)/$(LIB_PREFIX)$(ERTS_INTERNAL_r_LIB_NAME)$(LIB_SUFFIX) 283 284ERTS_INTERNAL_LIBS += $(ERTS_INTERNAL_r_LIB) 285 286endif 287 288# 289# ethread library 290# 291ETHR_THR_LIB_BASE_DIR=@ETHR_THR_LIB_BASE_DIR@ 292ifneq ($(strip $(ETHR_LIB_NAME)),) 293ETHREAD_LIB_SRC=common/ethr_aux.c \ 294 common/ethr_atomics.c \ 295 common/ethr_mutex.c \ 296 common/ethr_cbf.c \ 297 $(ETHR_THR_LIB_BASE_DIR)/ethread.c \ 298 $(ETHR_THR_LIB_BASE_DIR)/ethr_event.c 299ETHR_X86_SSE2_ASM=@ETHR_X86_SSE2_ASM@ 300ifeq ($(ETHR_X86_SSE2_ASM),yes) 301ETHREAD_LIB_SRC += pthread/ethr_x86_sse2_asm.c 302endif 303ETHREAD_LIB_NAME=ethread$(TYPE_SUFFIX) 304 305ifeq ($(USING_VC),yes) 306ifeq ($(TYPE),debug) 307ETHREAD_LIB_OBJS = \ 308 $(addprefix $(MDd_OBJ_DIR)/,$(notdir $(ETHREAD_LIB_SRC:.c=.o))) 309else 310ETHREAD_LIB_OBJS = \ 311 $(addprefix $(MD_OBJ_DIR)/,$(notdir $(ETHREAD_LIB_SRC:.c=.o))) 312endif 313else 314ETHREAD_LIB_OBJS = \ 315 $(addprefix $(r_OBJ_DIR)/,$(notdir $(ETHREAD_LIB_SRC:.c=.o))) 316endif 317 318ETHREAD_LIB=$(ERTS_LIB_INTERNAL_DIR)/$(LIB_PREFIX)$(ETHREAD_LIB_NAME)$(LIB_SUFFIX) 319 320else 321 322ETHREAD_LIB_SRC= 323ETHREAD_LIB_NAME= 324ETHREAD_LIB_OBJS= 325ETHREAD_LIB= 326 327endif 328 329ifneq ($(strip $(CREATE_DIRS)),) 330_create_dirs := $(shell mkdir -p $(CREATE_DIRS)) 331endif 332 333# 334# Everything to build 335# 336.PHONY: all 337all: $(OBJ_DIR)/MADE 338 339YCF_SOURCE_DIR=$(ERL_TOP)/erts/lib_src/yielding_c_fun 340 341include $(YCF_SOURCE_DIR)/main_target.mk 342 343$(OBJ_DIR)/MADE: $(YCF_EXECUTABLE) $(ETHREAD_LIB) $(ERTS_LIBS) $(ERTS_INTERNAL_LIBS) 344 $(gen_verbose) 345ifeq ($(OMIT_OMIT_FP),yes) 346 @echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' 347 @echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' 348 @echo '* * * *' 349 @echo '* * NOTE: Omit frame pointer optimization has been omitted * *' 350 @echo '* * * *' 351 @echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' 352 @echo '* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *' 353endif 354 $(V_at)echo $? > $(OBJ_DIR)/MADE 355 356# 357# The libs ... 358# 359ifeq ($(USING_VC),yes) 360AR_OUT=-out: 361AR_FLAGS= 362else 363AR_OUT= 364ifeq ($(V),0) 365AR_FLAGS=rc 366else 367AR_FLAGS=rcv 368endif 369endif 370 371ifndef RANLIB 372RANLIB=true 373endif 374 375$(ETHREAD_LIB): $(ETHREAD_LIB_OBJS) 376 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ETHREAD_LIB_OBJS) 377 $(V_RANLIB) $@ 378 379$(ERTS_INTERNAL_LIB): $(ERTS_INTERNAL_LIB_OBJS) 380 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ERTS_INTERNAL_LIB_OBJS) 381 $(V_RANLIB) $@ 382 383$(ERTS_INTERNAL_r_LIB): $(ERTS_INTERNAL_r_LIB_OBJS) 384 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ERTS_INTERNAL_r_LIB_OBJS) 385 $(V_RANLIB) $@ 386 387$(ERTS_MD_LIB): $(ERTS_MD_LIB_OBJS) 388 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ERTS_MD_LIB_OBJS) 389 $(V_RANLIB) $@ 390 391$(ERTS_MDd_LIB): $(ERTS_MDd_LIB_OBJS) 392 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ERTS_MDd_LIB_OBJS) 393 $(V_RANLIB) $@ 394 395$(ERTS_MT_LIB): $(ERTS_MT_LIB_OBJS) 396 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ERTS_MT_LIB_OBJS) 397 $(V_RANLIB) $@ 398 399$(ERTS_MTd_LIB): $(ERTS_MTd_LIB_OBJS) 400 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ERTS_MTd_LIB_OBJS) 401 $(V_RANLIB) $@ 402 403$(ERTS_r_LIB): $(ERTS_r_LIB_OBJS) 404 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ERTS_r_LIB_OBJS) 405 $(V_RANLIB) $@ 406 407$(ERTS_LIB): $(ERTS_LIB_OBJS) 408 $(V_AR) $(AR_FLAGS) $(AR_OUT)$@ $(ERTS_LIB_OBJS) 409 $(V_RANLIB) $@ 410 411# 412# Object files 413# 414 415$(r_OBJ_DIR)/ethr_x86_sse2_asm.o: pthread/ethr_x86_sse2_asm.c 416 $(V_CC) -msse2 $(THR_DEFS) $(CFLAGS) $(INCLUDES) -c $< -o $@ 417 418$(r_OBJ_DIR)/%.o: common/%.c 419 $(V_CC) $(THR_DEFS) $(CFLAGS) $(INCLUDES) -c $< -o $@ 420 421$(r_OBJ_DIR)/%.o: $(ETHR_THR_LIB_BASE_DIR)/%.c 422 $(V_CC) $(THR_DEFS) $(CFLAGS) $(INCLUDES) -c $< -o $@ 423 424$(OBJ_DIR)/%.o: common/%.c 425 $(V_CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ 426 427$(OBJ_DIR)/%.o: $(ETHR_THR_LIB_BASE_DIR)/%.c 428 $(V_CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ 429 430# Win32 specific 431 432$(MD_OBJ_DIR)/%.o: common/%.c 433 $(V_CC) $(THR_DEFS) $(CFLAGS) -MD $(INCLUDES) -c $< -o $@ 434 435$(MD_OBJ_DIR)/%.o: $(ETHR_THR_LIB_BASE_DIR)/%.c 436 $(V_CC) $(THR_DEFS) $(CFLAGS) -MD $(INCLUDES) -c $< -o $@ 437 438$(MDd_OBJ_DIR)/%.o: common/%.c 439 $(V_CC) $(THR_DEFS) $(CFLAGS) -MDd $(INCLUDES) -c $< -o $@ 440 441$(MDd_OBJ_DIR)/%.o: $(ETHR_THR_LIB_BASE_DIR)/%.c 442 $(V_CC) $(THR_DEFS) $(CFLAGS) -MDd $(INCLUDES) -c $< -o $@ 443 444$(MT_OBJ_DIR)/%.o: common/%.c 445 $(V_CC) $(THR_DEFS) $(CFLAGS) -MT $(INCLUDES) -c $< -o $@ 446 447$(MT_OBJ_DIR)/%.o: $(ETHR_THR_LIB_BASE_DIR)/%.c 448 $(V_CC) $(THR_DEFS) $(CFLAGS) -MT $(INCLUDES) -c $< -o $@ 449 450$(MTd_OBJ_DIR)/%.o: common/%.c 451 $(V_CC) $(THR_DEFS) $(CFLAGS) -MTd $(INCLUDES) -c $< -o $@ 452 453$(MTd_OBJ_DIR)/%.o: $(ETHR_THR_LIB_BASE_DIR)/%.c 454 $(V_CC) $(THR_DEFS) $(CFLAGS) -MTd $(INCLUDES) -c $< -o $@ 455 456# 457# Install 458# 459 460include $(ERL_TOP)/make/otp_release_targets.mk 461include ../vsn.mk 462RELSYSDIR = $(RELEASE_PATH)/erts-$(VSN) 463 464RELEASE_INCLUDES= \ 465 $(ERTS_INCL)/erl_memory_trace_parser.h \ 466 $(ERTS_INCL)/$(TARGET)/erl_int_sizes_config.h \ 467 $(ERTS_INCL)/erl_fixed_size_int_types.h 468RELEASE_LIBS=$(ERTS_LIBS) 469 470INTERNAL_RELEASE_INCLUDES= \ 471 $(ERTS_INCL_INT)/README \ 472 $(ERTS_INCL_INT)/ethread.h \ 473 $(ERTS_INCL_INT)/ethread_inline.h \ 474 $(ERTS_INCL_INT)/ethr_mutex.h \ 475 $(ERTS_INCL_INT)/ethr_optimized_fallbacks.h \ 476 $(ERTS_INCL_INT)/ethr_atomics.h \ 477 $(ERTS_INCL_INT)/$(TARGET)/ethread.mk \ 478 $(ERTS_INCL_INT)/$(TARGET)/erts_internal.mk \ 479 $(ERTS_INCL_INT)/$(TARGET)/ethread_header_config.h \ 480 $(ERTS_INCL_INT)/erl_printf.h \ 481 $(ERTS_INCL_INT)/erl_printf_format.h \ 482 $(ERTS_INCL_INT)/erl_memory_trace_protocol.h \ 483 $(ERTS_INCL_INT)/erl_misc_utils.h \ 484 $(ERTS_INCL_INT)/erl_errno.h 485 486INTERNAL_X_RELEASE_INCLUDE_DIRS= \ 487 i386 x86_64 ppc32 sparc32 sparc64 tile gcc pthread win libatomic_ops 488 489INTERNAL_RELEASE_LIBS= \ 490 ../lib/internal/README \ 491 $(ETHREAD_LIB) \ 492 $(ERTS_INTERNAL_LIBS) 493 494.PHONY: release_spec 495release_spec: all 496 $(INSTALL_PROGRAM) $(YCF_EXECUTABLE) "$(RELSYSDIR)/bin" 497ifneq ($(strip $(RELEASE_INCLUDES)),) 498 $(INSTALL_DIR) "$(RELSYSDIR)/include" 499 $(INSTALL_DIR) "$(RELEASE_PATH)/usr/include" 500 $(INSTALL_DATA) $(RELEASE_INCLUDES) "$(RELSYSDIR)/include" 501 $(INSTALL_DATA) $(RELEASE_INCLUDES) "$(RELEASE_PATH)/usr/include" 502endif 503ifneq ($(strip $(INTERNAL_RELEASE_INCLUDES)),) 504 $(INSTALL_DIR) "$(RELSYSDIR)/include/internal" 505 $(INSTALL_DATA) $(INTERNAL_RELEASE_INCLUDES) "$(RELSYSDIR)/include/internal" 506endif 507ifneq ($(strip $(INTERNAL_X_RELEASE_INCLUDE_DIRS)),) 508 for xdir in $(INTERNAL_X_RELEASE_INCLUDE_DIRS); do \ 509 $(INSTALL_DIR) "$(RELSYSDIR)/include/internal/$$xdir"; \ 510 $(INSTALL_DATA) $(ERTS_INCL_INT)/$$xdir/*.h \ 511 "$(RELSYSDIR)/include/internal/$$xdir"; \ 512 done 513endif 514ifneq ($(strip $(RELEASE_LIBS)),) 515 $(INSTALL_DIR) "$(RELSYSDIR)/lib" 516 $(INSTALL_DIR) "$(RELEASE_PATH)/usr/lib" 517 $(INSTALL_DATA) $(RELEASE_LIBS) "$(RELSYSDIR)/lib" 518 $(INSTALL_DATA) $(RELEASE_LIBS) "$(RELEASE_PATH)/usr/lib" 519endif 520ifneq ($(strip $(INTERNAL_RELEASE_LIBS)),) 521 $(INSTALL_DIR) "$(RELSYSDIR)/lib/internal" 522 $(INSTALL_DATA) $(INTERNAL_RELEASE_LIBS) "$(RELSYSDIR)/lib/internal" 523endif 524 525.PHONY: docs 526docs: 527 528.PHONY: release_docs_spec 529release_docs_spec: 530 531# 532# Cleanup 533# 534.PHONY: clean 535clean: 536 $(RM) -r ../lib/internal/$(TARGET)/* 537 $(RM) -r ../lib/$(TARGET)/* 538 $(RM) -r obj/$(TARGET)/* 539 $(RM) yielding_c_fun/bin/$(TARGET)/* 540 $(RM) yielding_c_fun/$(TARGET)/* 541 542# 543# Make dependencies 544# 545 546ifeq ($(USING_VC),yes) 547# VC++ used for compiling. We undef __GNUC__ since if __GNUC__ is defined 548# we will include other headers than when compiling which will result in 549# faulty dependencies. 550#DEP_CC=@EMU_CC@ -U__GNUC__ 551DEP_CC=$(CC) 552else 553DEP_CC=$(CC) 554endif 555 556#SED_REPL_WIN_DRIVE=s|\([ ]\)\([A-Za-z]\):|\1/cygdrive/\2|g;s|^\([A-Za-z]\):|/cygdrive/\1|g 557SED_REPL_O=s|^\([^:]*\)\.o:|$$(OBJ_DIR)/\1.o:|g 558SED_REPL_r_O=s|^\([^:]*\)\.o:|$$(r_OBJ_DIR)/\1.o:|g 559SED_REPL_MD_O=s|^\([^:]*\)\.o:|$$(MD_OBJ_DIR)/\1.o:|g 560SED_REPL_MDd_O=s|^\([^:]*\)\.o:|$$(MDd_OBJ_DIR)/\1.o:|g 561SED_REPL_MT_O=s|^\([^:]*\)\.o:|$$(MT_OBJ_DIR)/\1.o:|g 562SED_REPL_MTd_O=s|^\([^:]*\)\.o:|$$(MTd_OBJ_DIR)/\1.o:|g 563SED_REPL_TT_DIR=s|$(TT_DIR)/|$$(TT_DIR)/|g 564SED_REPL_TARGET=s|$(TARGET)/|$$(TARGET)/|g 565 566ifeq ($(TARGET),win32) 567#SED_PREFIX=$(SED_REPL_WIN_DRIVE); 568SED_PREFIX= 569DEP_FLAGS=$(subst -O3,,$(subst -O2,,$(CFLAGS))) $(INCLUDES) 570else 571SED_PREFIX= 572DEP_FLAGS=$(CFLAGS) $(INCLUDES) 573endif 574 575SED_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_O);$(SED_REPL_TT_DIR);$(SED_REPL_TARGET)' 576SED_r_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_r_O);$(SED_REPL_TT_DIR);$(SED_REPL_TARGET)' 577SED_MD_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_MD_O);$(SED_REPL_TT_DIR);$(SED_REPL_TARGET)' 578SED_MDd_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_MDd_O);$(SED_REPL_TT_DIR);$(SED_REPL_TARGET)' 579SED_MT_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_MT_O);$(SED_REPL_TT_DIR);$(SED_REPL_TARGET)' 580SED_MTd_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_MTd_O);$(SED_REPL_TT_DIR);$(SED_REPL_TARGET)' 581 582DEPEND_MK=$(OBJ_DIR)/depend.mk 583 584.PHONY: depend 585depend: $(DEPEND_MK) 586$(DEPEND_MK): 587 $(gen_verbose) 588 $(V_colon)@echo "Generating dependency file $(DEPEND_MK)..." 589 @echo "# Generated dependency rules" > $(DEPEND_MK); 590 @echo "# " >> $(DEPEND_MK); 591ifneq ($(strip $(ETHREAD_LIB_SRC)),) 592 @echo "# ethread lib objects..." >> $(DEPEND_MK); 593ifeq ($(USING_VC),yes) 594 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ETHREAD_LIB_SRC) \ 595 | $(SED_MD_DEPEND) >> $(DEPEND_MK) 596 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ETHREAD_LIB_SRC) \ 597 | $(SED_MDd_DEPEND) >> $(DEPEND_MK) 598else 599 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ETHREAD_LIB_SRC) \ 600 | $(SED_r_DEPEND) >> $(DEPEND_MK) 601endif 602endif 603ifneq ($(strip $(ERTS_INTERNAL_LIB_SRCS)),) 604ifneq ($(strip $(ETHREAD_LIB_SRC)),) 605 @echo "# erts_internal_r lib objects..." >> $(DEPEND_MK); 606ifeq ($(USING_VC),yes) 607 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_INTERNAL_LIB_SRCS) \ 608 | $(SED_MD_DEPEND) >> $(DEPEND_MK) 609 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_INTERNAL_LIB_SRCS) \ 610 | $(SED_MDd_DEPEND) >> $(DEPEND_MK) 611else 612 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_INTERNAL_LIB_SRCS) \ 613 | $(SED_r_DEPEND) >> $(DEPEND_MK) 614endif 615endif 616 @echo "# erts_internal lib objects..." >> $(DEPEND_MK); 617ifeq ($(USING_VC),yes) 618 $(V_at)$(DEP_CC) -MM $(DEP_FLAGS) $(ERTS_INTERNAL_LIB_SRCS) \ 619 | $(SED_MD_DEPEND) >> $(DEPEND_MK) 620 $(V_at)$(DEP_CC) -MM $(DEP_FLAGS) $(ERTS_INTERNAL_LIB_SRCS) \ 621 | $(SED_MDd_DEPEND) >> $(DEPEND_MK) 622else 623 $(V_at)$(DEP_CC) -MM $(DEP_FLAGS) $(ERTS_INTERNAL_LIB_SRCS) \ 624 | $(SED_DEPEND) >> $(DEPEND_MK) 625endif 626endif 627ifneq ($(strip $(ERTS_LIB_SRCS)),) 628ifeq ($(USING_VC),yes) 629 @echo "# erts_MD lib objects..." >> $(DEPEND_MK); 630 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_LIB_SRCS) \ 631 | $(SED_MD_DEPEND) >> $(DEPEND_MK) 632 @echo "# erts_MDd lib objects..." >> $(DEPEND_MK); 633 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_LIB_SRCS) \ 634 | $(SED_MDd_DEPEND) >> $(DEPEND_MK) 635 @echo "# erts_MT lib objects..." >> $(DEPEND_MK); 636 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_LIB_SRCS) \ 637 | $(SED_MT_DEPEND) >> $(DEPEND_MK) 638 @echo "# erts_MTd lib objects..." >> $(DEPEND_MK); 639 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_LIB_SRCS) \ 640 | $(SED_MTd_DEPEND) >> $(DEPEND_MK) 641 @echo "# erts_internal_r lib objects..." >> $(DEPEND_MK); 642 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_INTERNAL_LIB_SRCS) \ 643 | $(SED_MD_DEPEND) >> $(DEPEND_MK) 644 @echo "# erts_internal_r.debug lib objects..." >> $(DEPEND_MK); 645 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_INTERNAL_LIB_SRCS) \ 646 | $(SED_MDd_DEPEND) >> $(DEPEND_MK) 647else 648ifneq ($(strip $(ETHREAD_LIB_SRC)),) 649 @echo "# erts_r lib objects..." >> $(DEPEND_MK); 650 $(V_at)$(DEP_CC) -MM $(THR_DEFS) $(DEP_FLAGS) $(ERTS_LIB_SRCS) \ 651 | $(SED_r_DEPEND) >> $(DEPEND_MK) 652endif 653 @echo "# erts lib objects..." >> $(DEPEND_MK); 654 $(V_at)$(DEP_CC) -MM $(DEP_FLAGS) $(ERTS_LIB_SRCS) \ 655 | $(SED_DEPEND) >> $(DEPEND_MK) 656endif 657endif 658 @echo "# EOF" >> $(DEPEND_MK); 659 660ifneq ($(ERTS_SKIP_DEPEND),true) 661ifneq ($(MAKECMDGOALS),clean) 662-include $(DEPEND_MK) 663endif 664endif 665 666# eof 667