mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-03-10 23:20:23 -07:00
MSVC does not allow for specifying /std:c99 so we need c11. We don't rely on the default standard because it does not allow for static struct initializers.
226 lines
6.8 KiB
Makefile
Executable file
226 lines
6.8 KiB
Makefile
Executable file
#
|
|
# Makefile for ECL core library
|
|
#
|
|
top_srcdir = ..\..\src
|
|
srcdir = ..\..\src\c
|
|
|
|
!if "$(ECL_WIN64)" != ""
|
|
ECL_FPE_CODE=fpe_none.c
|
|
!else
|
|
ECL_FPE_CODE=fpe_x86.c
|
|
!endif
|
|
|
|
!if "$(ECL_THREADS)" != ""
|
|
ECL_THREADS_FLAG=1
|
|
THREADS_OBJ= thread.obj mutex.obj condition_variable.obj rwlock.obj \
|
|
semaphore.obj barrier.obj mailbox.obj
|
|
!else
|
|
ECL_THREADS_FLAG=0
|
|
THREADS_OBJ=
|
|
!endif
|
|
|
|
!if "$(ECL_UNICODE)" != ""
|
|
ECL_UNICODE_FLAG=21
|
|
ECL_UCD_OBJ = ucd.obj ucd-0000.obj ucd-0016.obj \
|
|
ucd-0032.obj ucd-0048.obj ucd-0064.obj \
|
|
ucd-0080.obj ucd-0096.obj ucd-0112.obj \
|
|
ucd-0128.obj ucd-0144.obj ucd_names_char.obj ucd_names_codes.obj ucd_names_pair.obj ucd_names_str.obj
|
|
|
|
!else
|
|
ECL_UNICODE_FLAG=0
|
|
!endif
|
|
|
|
!if "$(ECL_SSE)" != ""
|
|
ECL_SSE_FLAG=1
|
|
ECL_SSE_OBJ=sse2.obj
|
|
!else
|
|
ECL_SSE_FLAG=0
|
|
ECL_SSE_OBJ=
|
|
!endif
|
|
|
|
!if "$(ECL_USE_DBGHELP)" != ""
|
|
ECL_USE_DBGHELP_FLAG=1
|
|
!else
|
|
ECL_USE_DBGHELP_FLAG=0
|
|
!endif
|
|
|
|
# Programs used by "make":
|
|
#
|
|
CC = cl
|
|
CFLAGS = -c $(ECL_CFLAGS) /std:c11 -DECL_BUILD -DECL_API="__declspec(dllexport)" -I./ -I../ -I../ecl -I$(srcdir) -I$(srcdir)/unicode
|
|
|
|
SHELL = /bin/sh
|
|
RM = del
|
|
CP = copy /Y
|
|
MV = move /Y
|
|
LINK = link
|
|
EXE = .exe
|
|
DPP = .\dpp$(EXE)
|
|
|
|
# Data for installation
|
|
#
|
|
INSTALL = @INSTALL@
|
|
INSTALL_DATA = @INSTALL_DATA@
|
|
prefix=@prefix@
|
|
exec_prefix=$(prefix)
|
|
libdir=$(prefix)\lib\ecl
|
|
|
|
# Files
|
|
|
|
HDIR = $(top_srcdir)\h
|
|
HFILES = ..\ecl\config.h ..\ecl\config-internal.h ..\ecl\atomic_ops.h \
|
|
$(HDIR)\ecl.h $(HDIR)\ecl-cmp.h \
|
|
$(HDIR)\object.h $(HDIR)\cs.h $(HDIR)\stacks.h \
|
|
$(HDIR)\external.h $(HDIR)\cons.h $(HDIR)\legacy.h \
|
|
$(HDIR)\number.h $(HDIR)\page.h \
|
|
$(HDIR)\internal.h $(HDIR)\ecl-inl.h $(HDIR)\bytecodes.h \
|
|
$(HDIR)\impl\math_dispatch.h $(HDIR)\impl\math_dispatch2.h \
|
|
$(HDIR)\impl\math_fenv.h $(HDIR)\impl\math_fenv_msvc.h \
|
|
$(HDIR)\cache.h $(HDIR)\stack-resize.h \
|
|
$(HDIR)\ecl_atomics.h
|
|
|
|
NUCL_OBJS = boot.obj call.obj jump.obj atomic.obj process.obj memory.obj \
|
|
module.obj stacks.obj
|
|
|
|
CLOS_OBJS = cache.obj accessor.obj instance.obj gfun.obj
|
|
|
|
NUM_OBJS = number.obj num_pred.obj num_arith.obj num_co.obj num_log.obj num_rand.obj \
|
|
cos.obj sin.obj tan.obj atan.obj \
|
|
cosh.obj sinh.obj tanh.obj exp.obj \
|
|
expt.obj log.obj sqrt.obj abs.obj \
|
|
zerop.obj plusp.obj minusp.obj negate.obj \
|
|
conjugate.obj one_plus.obj one_minus.obj \
|
|
plus.obj minus.obj times.obj divide.obj \
|
|
number_compare.obj number_equalp.obj minmax.obj \
|
|
floor.obj ceiling.obj round.obj truncate.obj
|
|
|
|
WRITER_OBJS = print.obj float_to_digits.obj float_to_string.obj \
|
|
integer_to_string.obj write_ugly.obj \
|
|
write_object.obj write_symbol.obj write_array.obj \
|
|
write_list.obj write_code.obj write_sse.obj \
|
|
print_unreadable.obj
|
|
|
|
READER_OBJS = read.obj parse_integer.obj parse_number.obj
|
|
|
|
STREAM_OBJS = stream.obj file.obj strm_os.obj strm_clos.obj \
|
|
strm_string.obj strm_composite.obj strm_common.obj \
|
|
strm_sequence.obj strm_eformat.obj strm_binary.obj
|
|
|
|
FFI_OBJS = ffi.obj libraries.obj backtrace.obj mmap.obj cdata.obj
|
|
|
|
OBJS = main.obj symbol.obj package.obj cons.obj list.obj apply.obj eval.obj \
|
|
interpreter.obj compiler.obj disassembler.obj reference.obj character.obj \
|
|
error.obj string.obj cfun.obj typespec.obj assignment.obj memory.obj \
|
|
predicate.obj array.obj vector_push.obj sequence.obj cmpaux.obj macros.obj \
|
|
backq.obj stacks.obj time.obj unixint.obj mapfun.obj multival.obj hash.obj \
|
|
format.obj pathname.obj structure.obj load.obj unixfsys.obj unixsys.obj \
|
|
serialize.obj atomic.obj process.obj \
|
|
big.obj mem_gc.obj tcp.obj \
|
|
$(BOOT_OBJS) $(NUM_OBJS) $(WRITER_OBJS) $(READER_OBJS) $(STREAM_OBJS) \
|
|
$(CLOS_OBJS) $(FFI_OBJS) $(THREADS_OBJ) $(ECL_UCD_OBJ) $(ECL_SSE_OBJ)
|
|
|
|
all: $(DPP) ..\eclmin.lib ..\cinit.obj
|
|
|
|
.SUFFIXES: .obj .c .d
|
|
|
|
{$(srcdir:\=/)}.d{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/arch}.d{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/clos/}.d{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/reader}.d{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/streams}.d{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/printer}.d{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/ffi}.d{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/unicode}.c{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/numbers}.d{}.c:
|
|
$(DPP) $< $@
|
|
{$(srcdir:\=/)/threads}.d{}.c:
|
|
$(DPP) $< $@
|
|
|
|
#.d.c:
|
|
# $(DPP) $< $@
|
|
.c.obj:
|
|
$(CC) $(CFLAGS) /Fo$@ $<
|
|
|
|
.PHONY: all
|
|
|
|
cut.exe: $(top_srcdir)/util/cut.c
|
|
$(CC) $(LDFLAGS) /Fecut.exe $(top_srcdir)/util/cut.c
|
|
|
|
..\eclmin.lib: $(OBJS:.obj=.c) all_symbols.c $(OBJS) all_symbols.obj all_symbols2.obj
|
|
-$(RM) $@
|
|
$(LINK) -lib -nologo -out:$@ $(OBJS)
|
|
|
|
clean:
|
|
-for %f in ($(OBJS:.obj=.c) all_symbols.c) do $(RM) %f
|
|
-for %f in ($(OBJS) all_symbols.obj all_symbols2.obj) do $(RM) %f
|
|
-$(RM) *.pdb
|
|
-for %f in (..\ecl\config.h dpp dpp.obj $(DPP) cut.exe cut.obj \
|
|
..\eclmin.lib ..\cinit.obj cinit.c) \
|
|
do $(RM) %f
|
|
-for %f in (..\ecl\*.h) do $(RM) %f
|
|
-for %f in (cut.exe cut.obj dpp.exe dpp.obj) do $(RM) %f
|
|
-del /S /Q ..\ecl\atomic_ops
|
|
-del /S /Q ..\ecl\impl
|
|
|
|
# Build rules
|
|
|
|
$(DPP): $(srcdir)/dpp.c $(srcdir)/symbols_list.h ../ecl/config.h ../ecl/config-internal.h
|
|
$(CC) /nologo -I.. -I./ $(srcdir)/dpp.c /Fe$@
|
|
$(HFILES): ../ecl/config.h.msvc6 ../ecl/config-internal.h.msvc6 Makefile
|
|
-mkdir ..\ecl\impl
|
|
cut.exe "@ECL_FPE_CODE@" "$(srcdir:\=/)/arch/$(ECL_FPE_CODE)" \
|
|
"@ECL_VERSION_NUMBER@" "$(ECL_VERSION_NUMBER)" \
|
|
"@ECL_DEFAULT_C_STACK_SIZE@" "$(ECL_DEFAULT_C_STACK_SIZE)" \
|
|
"@ECL_THREADS@" "$(ECL_THREADS_FLAG)" \
|
|
"@ECL_UNICODE@" "$(ECL_UNICODE_FLAG)" \
|
|
"@ECL_SSE2@" "$(ECL_SSE_FLAG)" \
|
|
"@ECL_USE_DBGHELP@" "$(ECL_USE_DBGHELP_FLAG)" \
|
|
< ..\ecl\config.h.msvc6 > ..\ecl\config.h
|
|
cut.exe "@ECL_FPE_CODE@" "$(srcdir:\=/)/arch/$(ECL_FPE_CODE)" \
|
|
"@ECL_VERSION_NUMBER@" "$(ECL_VERSION_NUMBER)" \
|
|
"@ECL_DEFAULT_C_STACK_SIZE@" "$(ECL_DEFAULT_C_STACK_SIZE)" \
|
|
"@ECL_THREADS@" "$(ECL_THREADS_FLAG)" \
|
|
"@ECL_UNICODE@" "$(ECL_UNICODE_FLAG)" \
|
|
"@ECL_SSE2@" "$(ECL_SSE_FLAG)" \
|
|
"@ECL_USE_DBGHELP@" "$(ECL_USE_DBGHELP_FLAG)" \
|
|
"@ARCHITECTURE@" "$(ECL_ARCHITECTURE)" \
|
|
< ..\ecl\config-internal.h.msvc6 > ..\ecl\config-internal.h
|
|
xcopy /SYI $(top_srcdir)\h\*.h ..\ecl
|
|
-mkdir ..\ecl\atomic_ops
|
|
-mkdir ..\ecl\atomic_ops\sysdeps
|
|
xcopy /SYI $(top_srcdir)\bdwgc\libatomic_ops\src\atomic_ops.h ..\ecl
|
|
xcopy /SYI $(top_srcdir)\bdwgc\libatomic_ops\src\atomic_ops\generalize*.h ..\ecl\atomic_ops
|
|
xcopy /SYI $(top_srcdir)\bdwgc\libatomic_ops\src\atomic_ops\sysdeps\* ..\ecl\atomic_ops\sysdeps
|
|
xcopy /SYI $(top_srcdir)\bdwgc\libatomic_ops\src\atomic_ops\ao_version.h ..\ecl\atomic_ops
|
|
|
|
#
|
|
# GCC might break this code
|
|
#
|
|
gbc.o: gbc.c $(HFILES)
|
|
$(CC) $(CFLAGS) -O0 gbc.c /Fo$@
|
|
#
|
|
# This reduces the overhead of jumping to other functions
|
|
#
|
|
apply.o: apply.c $(HFILES) $(HDIR)/cs.h
|
|
$(CC) $(CFLAGS) apply.c /Fo$@
|
|
#
|
|
# These files are interrelated
|
|
#
|
|
all_symbols.obj: all_symbols.c
|
|
$(CC) $(CFLAGS) -Fo$@ -I../ -I./ all_symbols.c
|
|
all_symbols2.obj: all_symbols.c
|
|
$(CC) $(CFLAGS) -DECL_FINAL -Fo$@ -I../ -I./ all_symbols.c
|
|
#
|
|
# This is in another directory
|
|
#
|
|
../cinit.obj: cinit.c
|
|
$(CC) $(CFLAGS) -I../ -I./ /Focinit.obj cinit.c
|
|
$(MV) cinit.obj ..\
|