mirror of
https://github.com/dlang/phobos.git
synced 2025-04-29 22:50:38 +03:00
224 lines
6.7 KiB
Makefile
224 lines
6.7 KiB
Makefile
# Makefile to build linux D runtime library libphobos2.a and its unit test
|
|
|
|
DOC_OUTPUT_DIR = ../web/2.0/phobos
|
|
DRUNTIMEDIR = ../druntime/lib/release
|
|
PRODUCTIONLIBDIR = $(dir $(shell which dmd))../lib
|
|
OBJDIR = obj
|
|
DOCSRC = ../docsrc
|
|
STDDOC = $(DOCSRC)/std.ddoc
|
|
STYLECSS_SRC = $(DOCSRC)/style.css
|
|
STYLECSS_TGT = $(DOC_OUTPUT_DIR)/../style.css
|
|
|
|
OS = wine posix win32remote
|
|
BUILDS = debug release
|
|
|
|
################################################################################
|
|
|
|
# Wine options
|
|
CC_wine = dmc.exe
|
|
DMD_wine = dmd.exe
|
|
OBJSUFFIX_wine = .obj
|
|
LIB_wine = phobos.lib
|
|
EXESUFFIX_wine = .exe
|
|
CFLAGS_wine_debug = $(CFLAGS)
|
|
CFLAGS_wine_release = $(CFLAGS)
|
|
LIBDRUNTIME_wine =
|
|
|
|
# Win32 remote options
|
|
CC_win32remote = dmc.exe
|
|
DMD_win32remote = dmd.exe
|
|
OBJSUFFIX_win32remote = .obj
|
|
LIB_win32remote = phobos.lib
|
|
EXESUFFIX_win32remote = .exe
|
|
CFLAGS_win32remote_debug = $(CFLAGS)
|
|
CFLAGS_win32remote_release = $(CFLAGS)
|
|
LIBDRUNTIME_win32remote =
|
|
|
|
# These options only pertain to Andrei's settings for accessing the
|
|
# server donated by Adam Ruppe
|
|
SERVER_win32remote = 206.125.170.138
|
|
SERVERDIR_win32remote = code/dmd/phobos
|
|
HOMEMAP_win32remote = /ssh/winmachine/home/andrei
|
|
|
|
# Posix options
|
|
CC_posix = $(CC)
|
|
DMD_posix = dmd
|
|
OBJSUFFIX_posix = .o
|
|
LIB_posix = libphobos2.a
|
|
EXESUFFIX_posix =
|
|
LIBDRUNTIME_posix = $(DRUNTIMEDIR)/libdruntime.a
|
|
CFLAGS_posix_debug = -m32 -g $(CFLAGS)
|
|
CFLAGS_posix_release = -m32 -O3 $(CFLAGS)
|
|
|
|
# D flags for all OSs, but customized by build
|
|
DFLAGS_debug = -w -g -debug -d $(DFLAGS)
|
|
DFLAGS_release = -w -O -release -inline -nofloat -d $(DFLAGS)
|
|
|
|
# D flags for documentation generation
|
|
DDOCFLAGS=-version=ddoc -d -c -o- $(STDDOC)
|
|
|
|
################################################################################
|
|
|
|
STD_MODULES = $(addprefix std/, algorithm array atomics base64 bigint \
|
|
bitmanip boxer compiler complex contracts conv cpuid cstream \
|
|
ctype date datebase dateparse demangle encoding file format \
|
|
functional getopt intrinsic iterator loader math md5 \
|
|
metastrings mmfile numeric outbuffer path perf process random \
|
|
range regex regexp signals socket socketstream stdint stdio \
|
|
stdiobase stream string syserror system traits typecons \
|
|
typetuple uni uri utf variant xml zip zlib)
|
|
EXTRA_MODULES = $(addprefix std/c/, stdarg stdio) $(addprefix etc/c/, \
|
|
zlib)
|
|
EXTRA_MODULES_posix = $(addprefix std/c/linux/, linux socket)
|
|
EXTRA_MODULES_wine = $(addprefix std/c/windows/, com stat windows winsock) \
|
|
$(addprefix std/windows/, charset iunknown syserror)
|
|
EXTRA_MODULES_win32remote = $(EXTRA_MODULES_wine)
|
|
C_MODULES = $(addprefix etc/c/zlib/, adler32 compress crc32 gzio \
|
|
uncompr deflate trees zutil inflate infback inftrees inffast)
|
|
|
|
SRC_DOCUMENTABLES = phobos.d $(addsuffix .d,$(STD_MODULES))
|
|
|
|
define LINKOPTS_wine
|
|
endef
|
|
define LINKOPTS_win32remote
|
|
endef
|
|
define LINKOPTS_posix
|
|
-L-ldl -L-Lobj/posix/$1/
|
|
endef
|
|
|
|
define REL2ABS_wine
|
|
'z:$(subst /,\,$(abspath $1))'
|
|
endef
|
|
define REL2ABS_win32remote
|
|
'z:$(subst /,\,$(abspath $1))'
|
|
endef
|
|
define REL2ABS_posix
|
|
$(abspath $1)
|
|
endef
|
|
|
|
define REL2REL_wine
|
|
'$(subst /,\,$1)'
|
|
endef
|
|
define REL2REL_win32remote
|
|
'$(subst /,\\,$1)'
|
|
endef
|
|
define REL2REL_posix
|
|
$1
|
|
endef
|
|
|
|
define RUN_wine
|
|
wine $1
|
|
endef
|
|
define RUN_win32remote
|
|
ssh $(SERVER_win32remote) "cd $(SERVERDIR_win32remote) && $1"
|
|
endef
|
|
define RUN_posix
|
|
$1
|
|
endef
|
|
|
|
################################################################################
|
|
define GENERATE
|
|
# $1 is OS, $2 is the build
|
|
|
|
ROOT$1$2 = $$(OBJDIR)/$1/$2
|
|
OBJS_$1_$2 = $$(addsuffix $$(OBJSUFFIX_$1), $$(addprefix \
|
|
$$(OBJDIR)/$1/$2/, $$(basename $$(C_MODULES))))
|
|
LIB_$1_$2 = $$(OBJDIR)/$1/$2/$$(LIB_$1)
|
|
SRC2LIB_$1 = $$(addsuffix .d,crc32 $(STD_MODULES) $(EXTRA_MODULES) \
|
|
$(EXTRA_MODULES_$1))
|
|
CC$1$2 = $$(call RUN_$1,$(CC_$1))
|
|
DMD$1$2 = $$(call RUN_$1,$(DMD_$1))
|
|
|
|
$$(ROOT$1$2)/%$$(OBJSUFFIX_$1) : %.c $$(ROOT$1$2)/.directory
|
|
@[ -d $$(dir $$@) ] || mkdir --parents $$(dir $$@) || [ -d $$(dir $$@) ]
|
|
$$(CC$1$2) -c $(CFLAGS_$1_$2) -o$$@ $$<
|
|
|
|
$$(ROOT$1$2)/emptymain.d : $$(ROOT$1$2)/.directory
|
|
@echo 'void main(){}' >$$@
|
|
|
|
$$(ROOT$1$2)/unittest/std/%$$(EXESUFFIX_$1) : std/%.d $$(LIB_$1_$2) $$(ROOT$1$2)/emptymain.d
|
|
@echo Testing $$@
|
|
@$$(DMD$1$2) $(DFLAGS_$2) -unittest \
|
|
$$(call LINKOPTS_$1,$2) \
|
|
-of$$(call REL2REL_$1,$$@) \
|
|
$$(ROOT$1$2)/emptymain.d \
|
|
$$(foreach F,$$<,$$F)
|
|
# make the file very old so it builds and runs again if it fails
|
|
@touch -t 197001230123 $$@
|
|
# run unittest in its own directory
|
|
#cd $$(dir $$@) && $$(call RUN_$1,./`basename $$@`)
|
|
@$$(call RUN_$1,$$@)
|
|
# succeeded, render the file new again
|
|
@touch $$@
|
|
|
|
# $(PRODUCTIONLIBDIR)/tmp_$2$$(LIB_$1) : $$(LIB_$1_$2)
|
|
# ln -sf $$(realpath $$<) $$@
|
|
|
|
$1/$2 : $$(LIB_$1_$2)
|
|
$$(LIB_$1_$2) : $$(SRC2LIB_$1) $$(OBJS_$1_$2) \
|
|
$(LIBDRUNTIME_$1)
|
|
@echo $$(DMD$1$2) $(DFLAGS_$2) -lib -of$$@ "[...tons of files...]"
|
|
@$$(DMD$1$2) $(DFLAGS_$2) -lib -of$$@ $$^
|
|
|
|
$$(ROOT$1$2)/.directory :
|
|
mkdir --parents $$(OBJDIR) || exists $$(OBJDIR)
|
|
if [ "$(SERVER_$1)" != "" ]; then \
|
|
$$(call RUN_$1,mkdir) --parents $$(OBJDIR)/$1 && \
|
|
ln -sf $(HOMEMAP_$1)/$(SERVERDIR_$1)/$$(OBJDIR)/$1 obj/ ; \
|
|
fi
|
|
mkdir --parents $$@ || [ -d $$@ ]
|
|
|
|
$1/$2/unittest : $1/$2 $$(addsuffix $$(EXESUFFIX_$1),$$(addprefix $$(OBJDIR)/$1/$2/unittest/,$(STD_MODULES)))
|
|
|
|
endef
|
|
|
|
################################################################################
|
|
# Default OS is posix, default build is release
|
|
default : posix/release
|
|
|
|
# Define targets windows posix etc.
|
|
$(foreach S,$(OS), $(eval $S : $(foreach B,$(BUILDS), $S/$B/unittest)))
|
|
|
|
# Define targets debug release
|
|
$(foreach B,$(BUILDS), $(eval $B : $(foreach S,$(OS), $S/$B/unittest)))
|
|
|
|
# The unittest target builds unittests for all OSs
|
|
unittest : $(foreach S,$(OS), $S)
|
|
|
|
# # Production replaces the produc
|
|
# production : posix/release
|
|
# ln -sf $(realpath $(OBJDIR)/posix/release/$(LIB_posix)) \
|
|
# $(PRODUCTIONLIBDIR)/$(LIB_posix)
|
|
|
|
all : $(BUILDS) html
|
|
clean :
|
|
rm -rf $(foreach S,$(OS),$(OBJDIR)/$S/* $(OBJDIR)/$S/)
|
|
rm -rf $(OBJDIR) $(DOC_OUTPUT_DIR)
|
|
|
|
# This generates the entire thingy
|
|
$(eval $(foreach B,$(BUILDS), $(foreach S,$(OS), $(call \
|
|
GENERATE,$S,$B))))
|
|
|
|
###########################################################
|
|
# Dox
|
|
|
|
$(DOC_OUTPUT_DIR)/%.html : %.d $(STDDOC)
|
|
$(call RUN_wine,$(DMD_wine)) $(DDOCFLAGS) -Df$@ $<
|
|
|
|
$(DOC_OUTPUT_DIR)/std_%.html : std/%.d $(STDDOC)
|
|
$(call RUN_wine,$(DMD_wine)) $(DDOCFLAGS) -Df$@ $<
|
|
|
|
$(DOC_OUTPUT_DIR)/std_c_%.html : std/c/%.d $(STDDOC)
|
|
$(call RUN_wine,$(DMD_wine)) $(DDOCFLAGS) -Df$@ $<
|
|
|
|
$(DOC_OUTPUT_DIR)/std_c_linux_%.html : std/c/linux/%.d $(STDDOC)
|
|
$(call RUN_wine,$(DMD_wine)) $(DDOCFLAGS) -Df$@ $<
|
|
|
|
$(STYLECSS_TGT) : $(STYLECSS_SRC)
|
|
cp $< $@
|
|
|
|
html : $(addprefix $(DOC_OUTPUT_DIR)/, $(subst /,_,$(subst .d,.html, \
|
|
$(SRC_DOCUMENTABLES)))) $(STYLECSS_TGT)
|
|
@$(MAKE) -f $(DOCSRC)/linux.mak -C $(DOCSRC) --no-print-directory
|
|
|
|
##########################################################
|