116 lines
4 KiB
Makefile
116 lines
4 KiB
Makefile
# DVX SQL Library Makefile for DJGPP cross-compilation
|
|
#
|
|
# Builds SQLite3 from source and wraps it with a high-level
|
|
# handle-based API for the BASIC runtime.
|
|
#
|
|
# Two-phase build:
|
|
# 1. Native tools (lemon, mkkeywordhash) built with host GCC
|
|
# to generate parse.c, opcodes.c, opcodes.h, keywordhash.h
|
|
# 2. SQLite + wrapper cross-compiled with DJGPP into dvxsql.lib DXE
|
|
|
|
DJGPP_PREFIX = $(HOME)/djgpp/djgpp
|
|
CC = $(DJGPP_PREFIX)/bin/i586-pc-msdosdjgpp-gcc
|
|
DXE3GEN = PATH=$(DJGPP_PREFIX)/bin:$(PATH) DJDIR=$(DJGPP_PREFIX)/i586-pc-msdosdjgpp $(DJGPP_PREFIX)/i586-pc-msdosdjgpp/bin/dxe3gen
|
|
HOSTCC = gcc
|
|
|
|
SQLITE_DIR = thirdparty/sqlite
|
|
SQLITE_SRC = $(SQLITE_DIR)/src
|
|
SQLITE_TOOL = $(SQLITE_DIR)/tool
|
|
|
|
CFLAGS = -O2 -Wall -Wno-type-limits -Wno-sign-compare -march=i486 -mtune=i586 \
|
|
-I../core -I../core/platform -I../tasks \
|
|
-DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION \
|
|
-I$(SQLITE_SRC) -I$(SQLITE_DIR)/examples -I$(OBJDIR)
|
|
|
|
OBJDIR = ../obj/sql
|
|
LIBSDIR = ../bin/libs
|
|
TARGET = $(LIBSDIR)/dvxsql.lib
|
|
|
|
# SQLite library source files (no test, shell, tcl, server, md5, os_test)
|
|
SQLITE_SRCS = \
|
|
alter analyze attach auth btmutex btree build callback complete \
|
|
date delete expr fault func hash insert journal \
|
|
legacy loadext main malloc mem1 mem2 mem3 mem4 \
|
|
mutex mutex_os2 mutex_unix mutex_w32 \
|
|
os os_os2 os_unix os_win \
|
|
pager pragma prepare printf random select \
|
|
table tokenize trigger update utf util vacuum \
|
|
vdbeapi vdbeaux vdbeblob vdbe vdbefifo vdbemem vtab where
|
|
|
|
SQLITE_OBJS = $(SQLITE_SRCS:%=$(OBJDIR)/sqlite_%.o)
|
|
|
|
# Generated files
|
|
GEN_PARSE_C = $(OBJDIR)/parse.c
|
|
GEN_PARSE_H = $(OBJDIR)/parse.h
|
|
GEN_OPCODES_H = $(OBJDIR)/opcodes.h
|
|
GEN_OPCODES_C = $(OBJDIR)/opcodes.c
|
|
GEN_KEYWORDHASH = $(OBJDIR)/keywordhash.h
|
|
|
|
# Native tools
|
|
LEMON = $(OBJDIR)/lemon
|
|
MKKEYWORDHASH = $(OBJDIR)/mkkeywordhash
|
|
|
|
OBJS = $(OBJDIR)/dvxSql.o $(SQLITE_OBJS) $(OBJDIR)/sqlite_parse.o $(OBJDIR)/sqlite_opcodes.o
|
|
|
|
.PHONY: all clean
|
|
|
|
all: $(TARGET) $(LIBSDIR)/dvxsql.dep
|
|
|
|
$(LIBSDIR)/dvxsql.dep: ../config/dvxsql.dep | $(LIBSDIR)
|
|
sed 's/$$/\r/' $< > $@
|
|
|
|
# ---- Phase 1: Native tools and generated files ----
|
|
|
|
$(LEMON): $(SQLITE_TOOL)/lemon.c | $(OBJDIR)
|
|
$(HOSTCC) -O2 -o $@ $<
|
|
|
|
$(MKKEYWORDHASH): $(SQLITE_TOOL)/mkkeywordhash.c | $(OBJDIR)
|
|
$(HOSTCC) -O2 -o $@ $<
|
|
|
|
$(GEN_PARSE_C) $(GEN_PARSE_H): $(SQLITE_SRC)/parse.y $(LEMON) $(SQLITE_DIR)/addopcodes.awk | $(OBJDIR)
|
|
cp $(SQLITE_SRC)/parse.y $(OBJDIR)/parse.y
|
|
cp $(SQLITE_TOOL)/lempar.c $(OBJDIR)/lempar.c
|
|
cd $(OBJDIR) && $(abspath $(LEMON)) parse.y
|
|
mv $(OBJDIR)/parse.h $(OBJDIR)/parse.h.temp
|
|
gawk -f $(SQLITE_DIR)/addopcodes.awk $(OBJDIR)/parse.h.temp > $(OBJDIR)/parse.h
|
|
|
|
$(GEN_OPCODES_H): $(GEN_PARSE_H) $(SQLITE_SRC)/vdbe.c $(SQLITE_DIR)/mkopcodeh.awk
|
|
cat $(GEN_PARSE_H) $(SQLITE_SRC)/vdbe.c | gawk -f $(SQLITE_DIR)/mkopcodeh.awk > $@
|
|
|
|
$(GEN_OPCODES_C): $(GEN_OPCODES_H) $(SQLITE_DIR)/mkopcodec.awk
|
|
sort -n -b -k 3 $(GEN_OPCODES_H) | gawk -f $(SQLITE_DIR)/mkopcodec.awk > $@
|
|
|
|
$(GEN_KEYWORDHASH): $(MKKEYWORDHASH)
|
|
$(MKKEYWORDHASH) > $@
|
|
|
|
# ---- Phase 2: Cross-compile SQLite + wrapper ----
|
|
|
|
$(OBJDIR)/dvxSql.o: dvxSql.c dvxSql.h | $(OBJDIR)
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
$(OBJDIR)/sqlite_%.o: $(SQLITE_SRC)/%.c $(GEN_OPCODES_H) $(GEN_KEYWORDHASH) $(GEN_PARSE_H) | $(OBJDIR)
|
|
$(CC) $(CFLAGS) -Wno-unused-parameter -Wno-unused-variable -Wno-implicit-fallthrough -c -o $@ $<
|
|
|
|
$(OBJDIR)/sqlite_parse.o: $(GEN_PARSE_C) $(GEN_OPCODES_H) | $(OBJDIR)
|
|
$(CC) $(CFLAGS) -Wno-unused-parameter -Wno-unused-variable -Wno-implicit-fallthrough -c -o $@ $<
|
|
|
|
$(OBJDIR)/sqlite_opcodes.o: $(GEN_OPCODES_C) | $(OBJDIR)
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
$(TARGET): $(OBJS) | $(LIBSDIR)
|
|
$(DXE3GEN) -o $(LIBSDIR)/dvxsql.dxe \
|
|
-E _dvxSql -E _sqlite3 \
|
|
-U $(OBJS)
|
|
mv $(LIBSDIR)/dvxsql.dxe $@
|
|
|
|
$(OBJDIR):
|
|
mkdir -p $(OBJDIR)
|
|
|
|
$(LIBSDIR):
|
|
mkdir -p $(LIBSDIR)
|
|
|
|
clean:
|
|
rm -f $(OBJS) $(TARGET) $(LIBSDIR)/dvxsql.dep
|
|
rm -f $(LEMON) $(MKKEYWORDHASH)
|
|
rm -f $(GEN_PARSE_C) $(GEN_PARSE_H) $(GEN_OPCODES_H) $(GEN_OPCODES_C) $(GEN_KEYWORDHASH)
|
|
rm -f $(OBJDIR)/parse.y $(OBJDIR)/parse.out
|