# -*- makefile-gmake -*- ######################################################################## # Detect the PLATFORM with uname. ifndef PLATFORM ifeq ($(shell uname),Darwin) PLATFORM=macosx else ifeq ($(shell uname),FreeBSD) PLATFORM=bsd LIBCHIBI_FLAGS = -Wl,-soname,libchibi-scheme$(SO).$(SOVERSION_MAJOR) else ifeq ($(shell uname),NetBSD) PLATFORM=bsd else ifeq ($(shell uname),OpenBSD) PLATFORM=bsd else ifeq ($(shell uname),DragonFly) PLATFORM=bsd else ifeq ($(shell uname -o),Msys) PLATFORM=windows SOLIBDIR = $(BINDIR) DIFFOPTS = -b else ifeq ($(shell uname -o),Cygwin) PLATFORM=cygwin SOLIBDIR = $(BINDIR) DIFFOPTS = -b else ifeq ($(shell uname -o),Android) PLATFORM=android else ifeq ($(shell uname -o),GNU/Linux) PLATFORM=linux else ifeq ($(shell uname),SunOS) PLATFORM=solaris else PLATFORM=unix endif endif endif endif endif endif endif endif endif endif endif ifndef ARCH ARCH = $(shell uname -m) endif ######################################################################## # Set default variables for the platform. LIBDL = -ldl SO_VERSIONED_SUFFIX = $(SO).$(SOVERSION) SO_MAJOR_VERSIONED_SUFFIX = $(SO).$(SOVERSION_MAJOR) STATIC_LDFLAGS = -lm -ldl -lutil ifeq ($(PLATFORM),macosx) SO = .dylib SO_VERSIONED_SUFFIX = .$(SOVERSION)$(SO) SO_MAJOR_VERSIONED_SUFFIX = .$(SOVERSION_MAJOR)$(SO) EXE = CLIBFLAGS = CLINKFLAGS = -dynamiclib STATICFLAGS = -DSEXP_USE_DL=0 # -static-libgcc LIBCHIBI_FLAGS = -install_name $(DESTDIR)$(SOLIBDIR)/libchibi-scheme.$(SOVERSION).dylib else ifeq ($(PLATFORM),bsd) SO = .so EXE = CLIBFLAGS = -fPIC CLINKFLAGS = -shared LIBDL = RLDFLAGS=-Wl,-R$(LIBDIR) else ifeq ($(PLATFORM),solaris) SO = .so EXE = CLIBFLAGS = -fPIC CLINKFLAGS = -shared LIBDL = -ldl RLDFLAGS=-Wl,-R$(LIBDIR) else ifeq ($(PLATFORM),windows) SO = .dll EXE = .exe CC ?= gcc CLIBFLAGS = CLINKFLAGS = -shared CPPFLAGS += -DSEXP_USE_STRING_STREAMS=0 -DSEXP_USE_GREEN_THREADS=0 -DSEXP_USE_GC_FILE_DESCRIPTORS=0 -DBUILDING_DLL LIBCHIBI_FLAGS = -Wl,--out-implib,libchibi-scheme$(SO).a STATICFLAGS = STATIC_LDFLAGS = -lm -ldl LIBDL = -lws2_32 else ifeq ($(PLATFORM),msys) SO = .dll EXE = .exe CC = gcc CLIBFLAGS = CLINKFLAGS = -shared CPPFLAGS += -DSEXP_USE_STRING_STREAMS=0 LIBCHIBI_FLAGS = -Wl,--out-implib,libchibi-scheme$(SO).a STATIC_LDFLAGS = -lm -ldl else ifeq ($(PLATFORM),cygwin) SO = .dll EXE = .exe CC = gcc CLIBFLAGS = CLINKFLAGS = -shared CPPFLAGS += -DSEXP_USE_STRING_STREAMS=0 LIBCHIBI_FLAGS = -Wl,--out-implib,libchibi-scheme$(SO).a STATIC_LDFLAGS = -lm -ldl else SO = .so EXE = CLIBFLAGS = -fPIC CLINKFLAGS = -shared STATICFLAGS = -static -DSEXP_USE_DL=0 LIBCHIBI_FLAGS = -Wl,-soname,libchibi-scheme$(SO).$(SOVERSION_MAJOR) endif endif endif endif endif endif ifeq ($(PLATFORM),emscripten) STATIC_LDFLAGS = -lm -ldl endif ifeq ($(PLATFORM),unix) #RLDFLAGS=-rpath $(LIBDIR) RLDFLAGS=-Wl,-R$(LIBDIR) endif ######################################################################## # Library config. # # This is to allow "make SEXP_USE_BOEHM=1" and "make SEXP_USE_DL=0" to # automatically include the necessary compiler and linker flags in # addition to setting those features. If not using GNU make just # comment out the ifs and use the else branches for the defaults. ifeq ($(SEXP_USE_BOEHM),1) GCLDFLAGS := -lgc XCPPFLAGS := $(CPPFLAGS) -Iinclude $(D:%=-DSEXP_USE_%) -DSEXP_USE_BOEHM=1 else GCLDFLAGS := XCPPFLAGS := $(CPPFLAGS) -Iinclude $(D:%=-DSEXP_USE_%) endif ifeq ($(SEXP_USE_DL),0) XLDFLAGS := $(LDFLAGS) $(RLDFLAGS) $(GCLDFLAGS) -lm XCFLAGS := -Wall -DSEXP_USE_DL=0 -g -g3 -O3 $(CFLAGS) else XLDFLAGS := $(LDFLAGS) $(RLDFLAGS) $(GCLDFLAGS) $(LIBDL) -lm XCFLAGS := -Wall -g -g3 -O3 $(CFLAGS) endif ifeq ($(PLATFORM),solaris) XLDFLAGS += -lsocket XCPPFLAGS += -D_POSIX_PTHREAD_SEMANTICS endif # Choose compiled library on MSYS ifeq ($(OS), Windows_NT) ifeq ($(PLATFORM),msys) EXCLUDE_WIN32_LIBS=1 else ifeq ($(shell uname -o),Cygwin) EXCLUDE_WIN32_LIBS=1 else EXCLUDE_POSIX_LIBS=1 endif endif endif CHIBI_POSIX_COMPILED_LIBS = lib/chibi/process$(SO) lib/chibi/time$(SO) \ lib/chibi/system$(SO) lib/chibi/stty$(SO) lib/chibi/pty$(SO) \ lib/chibi/net$(SO) lib/srfi/18/threads$(SO) CHIBI_WIN32_COMPILED_LIBS = lib/chibi/win32/process-win32$(SO) ifndef EXCLUDE_POSIX_LIBS CHIBI_COMPILED_LIBS += $(CHIBI_POSIX_COMPILED_LIBS) else CHIBI_COMPILED_LIBS += $(CHIBI_WIN32_COMPILED_LIBS) endif ######################################################################## # Check for headers (who needs autoconf?) ifndef SEXP_USE_NTP_GETTIME SEXP_USE_NTP_GETTIME := $(shell echo "int main(){struct ntptimeval n; ntp_gettime(&n);}" | $(CC) -fsyntax-only -include sys/timex.h -xc - >/dev/null 2>/dev/null && echo 1 || echo 0) endif ifeq ($(SEXP_USE_NTP_GETTIME),1) XCPPFLAGS += -DSEXP_USE_NTPGETTIME endif ifndef SEXP_USE_INTTYPES SEXP_USE_INTTYPES := $(shell echo "int main(){int_least8_t x;}" | $(CC) -fsyntax-only -include inttypes.h -xc - >/dev/null 2>/dev/null && echo 1 || echo 0) endif ifeq ($(SEXP_USE_INTTYPES),1) XCPPFLAGS += -DSEXP_USE_INTTYPES endif