ifeq "$(CONFIG)" ""
override CONFIG := $(shell $(dir $(lastword $(MAKEFILE_LIST)))/guess-config)
ifeq "$(CONFIG)" ""
$(error "Failed to guess config")
endif
endif
OS := $(shell echo $(CONFIG) | sed -e 's/^[^.]*\.//' -e 's/^\([^-_]*\)[-_].*/\1/')
PROC := $(shell echo $(CONFIG) | sed -e 's/^\([^.]*\)\..*/\1/')
ifeq "$(OS)" "darwin"
DDSRT = $(OS) posix
RULES = darwin
CC = clang
LD = $(CC)
OPT = -fsanitize=address PROF =
CPPFLAGS += -Wall -g $(OPT) $(PROF)
CFLAGS += $(CPPFLAGS) LDFLAGS += -g $(OPT) $(PROF)
X =
O = .o
A = .a
SO = .dylib
LIBPRE = lib
endif
ifeq "$(OS)" "solaris2.6"
DDSRT = $(OS) posix
RULES = unix
CC = gcc -std=gnu99 -mcpu=v8
LD = $(CC)
OPT = -O2 -DNDEBUG
PROF =
CPPFLAGS += -Wall -g $(OPT) $(PROF) -D_REENTRANT -D__EXTENSIONS__ -D__SunOS_5_6 -I$(PWD)/ports/solaris2.6/include
CFLAGS += $(CPPFLAGS)
LDFLAGS += -g $(OPT) $(PROF)
LDLIBS += -lposix4 -lsocket -lnsl -lc
X =
O = .o
A = .a
SO = .so
LIBPRE = lib
endif
ifeq "$(OS)" "linux"
DDSRT = posix
RULES = unix
CC = gcc-6.2 -std=gnu99 -fpic -mcx16
OPT = LD = $(CC)
PROF =
CPPFLAGS += -Wall -g $(OPT) $(PROF)
CFLAGS += $(CPPFLAGS) LDFLAGS += -g $(OPT) $(PROF)
X =
O = .o
A = .a
SO = .so
LIBPRE = lib
endif
ifeq "$(OS)" "win32"
DDSRT = windows
RULES = windows
CC = cl
LD = link
OPT = -MDd
PROF =
CPPFLAGS = -Zi -W3 $(OPT) $(PROF) -TC CFLAGS += $(CPPFLAGS)
LDFLAGS += -nologo -incremental:no -subsystem:console -debug
X = .exe
O = .obj
A = .lib
SO = .dll
LIBPRE =
endif
ifeq "$(OS)" "wine"
export WINEDEBUG=-all
DDSRT = windows
RULES = wine
GEN = gen.wine
CC = wine cl
LD = wine link
CPPFLAGS = -nologo -W3 -TC -analyze -D_WINNT=0x0604 -Drestrict=
CFLAGS += $(CPPFLAGS)
LDFLAGS += -nologo -incremental:no -subsystem:console -debug
X = .exe
O = .obj
A = .lib
SO = .dll
LIBPRE =
endif
ifeq "$(DDSRT)" ""
$(error "$(CONFIG): unsupported config")
endif
ifeq "$(CC)" "cl"
N_PWD := $(shell cygpath -m '$(PWD)')
else N_PWD := $(PWD)
endif
ifeq "$(CC)" "cl" # Windows
ifeq "$(PROC)" "x86_64"
MACHINE = -machine:X64
endif
LDFLAGS += $(MACHINE)
OBJ_OFLAG = -Fo
EXE_OFLAG = -out:
SHLIB_OFLAG = -out:
CPPFLAGS += -D_CRT_SECURE_NO_WARNINGS
else
ifeq "$(CC)" "wine cl"
OBJ_OFLAG =-Fo
EXE_OFLAG = -out:
SHLIB_OFLAG = -out:
CPPFLAGS += -D_CRT_SECURE_NO_WARNINGS
else OBJ_OFLAG = -o
EXE_OFLAG = -o
SHLIB_OFLAG = -o
ifeq "$(PROC)" "x86"
CFLAGS += -m32
LDFLAGS += -m32
endif
ifeq "$(PROC)" "x86_64"
CFLAGS += -m64
LDFLAGS += -m64
endif
endif
endif
ifeq "$(CC)" "cl"
LDFLAGS += -libpath:$(N_PWD)/gen
LIBDEP_SYS = kernel32 ws2_32
else
ifeq "$(CC)" "wine cl"
else
LDFLAGS += -L$(N_PWD)/gen
LIBDEP_SYS = kernel32 ws2_32
endif
endif
getabspath=$(abspath $1)
ifeq "$(RULES)" "darwin"
ifneq "$(findstring clang, $(CC))" ""
define make_exe
$(LD) $(LDFLAGS) $(patsubst -L%, -rpath %, $(filter -L%, $(LDFLAGS))) $(EXE_OFLAG)$@ $^ $(LDLIBS)
endef
define make_shlib
$(LD) $(LDFLAGS) $(patsubst -L%, -rpath %, $(filter -L%, $(LDFLAGS))) -dynamiclib -install_name @rpath/$(notdir $@) $(SHLIB_OFLAG)$@ $^ $(LDLIBS)
endef
else comma=,
define make_exe
$(LD) $(LDFLAGS) $(patsubst -L%, -Wl$(comma)-rpath$(comma)%, $(filter -L%, $(LDFLAGS))) $(EXE_OFLAG)$@ $^ $(LDLIBS)
endef
define make_shlib
$(LD) $(LDFLAGS) $(patsubst -L%, -Wl$(comma)-rpath$(comma)%, $(filter -L%, $(LDFLAGS))) -dynamiclib -Wl,-install_name,@rpath/$(notdir $@) $(SHLIB_OFLAG)$@ $^ $(LDLIBS)
endef
endif
define make_archive
ar -ru $@ $?
endef
define make_dep
$(CC) -M $(CPPFLAGS) $< | sed 's|[a-zA-Z0-9_-]*\.o|gen/&|' > $@ || { rm $@ ; exit 1 ; }
endef
else
ifeq "$(RULES)" "unix"
LDLIBS += -lpthread
comma=,
define make_exe
$(LD) $(LDFLAGS) $(patsubst -L%,-Wl$(comma)-rpath$(comma)%, $(filter -L%, $(LDFLAGS))) $(EXE_OFLAG)$@ $^ $(LDLIBS)
endef
define make_shlib
$(LD) $(LDFLAGS) -Wl$(comma)--no-allow-shlib-undefined $(patsubst -L%,-Wl$(comma)-rpath$(comma)%, $(filter -L%, $(LDFLAGS))) -shared $(SHLIB_OFLAG)$@ $^ $(LDLIBS)
endef
define make_archive
ar -ru $@ $?
endef
define make_dep
$(CC) -M $(CPPFLAGS) $< | sed 's|[a-zA-Z0-9_-]*\.o|gen/&|' > $@ || { rm $@ ; exit 1 ; }
endef
else
ifeq "$(RULES)" "windows"
define make_exe
$(LD) $(LDFLAGS) $(EXE_OFLAG)$@ $^ $(LDLIBS)
endef
define make_shlib
$(LD) $(LDFLAGS) $(SHLIB_OFLAG)$@ $^ $(LDLIBS)
endef
define make_archive
lib $(MACHINE) /out:$@ $^
endef
define make_dep
$(CC) -E $(CPPFLAGS) $(CPPFLAGS) $< | grep "^#line.*\\\\vdds\\\\" | cut -d '"' -f 2 | sort -u | sed -e 's@\([A-Za-z]\)\:@ /cygdrive/\1@' -e 's@\\\\@/@g' -e '$$!s@$$@ \\@' -e '1s@^@$*$O: @' >$@
endef
else
ifeq "$(RULES)" "wine"
COMPILE_MANY_ATONCE=true
getabspath=$1
lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1))))))))))))))))))))))))))
FAKEPWD = $(call lc,z:$(subst /,\\\\,$(PWD)))
define make_exe
$(LD) $(LDFLAGS) $(EXE_OFLAG)$@ $^ $(LDLIBS)
endef
define make_shlib
$(LD) $(LDFLAGS) $(SHLIB_OFLAG)$@ $^ $(LDLIBS)
endef
define make_archive
lib $(MACHINE) /out:$@ $^
endef
define make_dep
$(CC) -E $(CPPFLAGS) $(CPPFLAGS) $< | grep "^#line.*\\\\vdds\\\\" | cut -d '"' -f 2 | sort -u | sed -e 's@$(FAKEPWD)\(\\\\\)*@ @' -e 's@\\\\@/@g' -e '$$!s@$$@ \\@' -e '1s@^@$*$O: @' >$@
endef
else
$(error "$(OS) not covered by build macros for")
endif
endif
endif
endif
ifeq "$(GEN)" ""
GEN = gen
endif
%$O:
%$X:
%$(SO):
%.d: