My precious. added by Jubjub on Mon May 5 20:28:47 2014
#CCACHE = $(shell which -p ccache 2> /dev/null)
LIBS =
SCFLAGS = -Wall -std=c++11
LDFLAGS =
SCC = csc
CC = gcc
CC_FLAGS = -fno-strict-aliasing -fwrapv
CC_INCLUDES = -Ibuild/eggs/stb-vorbis-egg/
OPTIMIZATION =
DEFINES = -DDEBUG -DAL_LIBTYPE_STATIC
FEATURES = -feature standalone
EMSCRIPTEN_SDK = ../../Downloads/emsdk-1.12.0-portable-32bit/emscripten/1.13.0/
XBRIDGE_SDK = /crossbridge/sdk/
CHICKEN_CORE = ../chicken-core/
RM = rm -fr
SCM_SRC = $(wildcard src/*.scm)
CHICKEN_SRC = runtime.c build-version.c library.c eval.c expand.c modules.c chicken-syntax.c\
chicken-config.h buildtag.h chicken.h\
srfi-1.c srfi-4.c srfi-13.c srfi-14.c srfi-69.c lolevel.c extras.c\
irregex.c scheduler.c files.c data-structures.c
LOCAL_CHICKEN = $(addprefix build/chicken/, $(CHICKEN_SRC))
LOCAL_CHICKEN_OBJ = $(filter-out %.h, $(LOCAL_CHICKEN:.c=.o))
EGGS = build/eggs/matchable build/eggs/glfw3-egg build/eggs/opengl build/eggs/stb_image-egg\
build/eggs/freetype-egg build/eggs/openal-egg build/eggs/stb-vorbis-egg
STANDALONE_LIBS = -static -lwsock32 -lglfw3 -lopengl32 -lgdi32 -lfreetype -lOpenAL32 -lwinmm\
-ldsound -lole32
# platform dependent stuff
UNAME = $(shell uname -s)
ifeq ($(UNAME), Linux)
LIBS +=
DEFINES += -DPLATFORM_LINUX
else
LDFLAGS +=
LIBS +=
DEFINES += -DPLATFORM_WINDOWS
endif
all: rockets
# standalone common
.PHONY: standalone
standalone: standalone-setup $(LOCAL_CHICKEN_OBJ) $(EGGS) build/main.c
$(CC) $(CC_FLAGS) $(CC_INCLUDES) $(DEFINES) -Ibuild/chicken/ $(LOCAL_CHICKEN_OBJ)\
build/main.c build/eggs/stb-vorbis-egg/stb_vorbis.c\
$(STANDALONE_LIBS) -o build/rockets
standalone-setup:
mkdir -p build
mkdir -p build/chicken
mkdir -p build/eggs
build/main.c: $(SCM_SRC)
chicken src/main.scm $(FEATURES) -output-file build/main.c
# TODO: use hacked apply for desktop standalone
$(LOCAL_CHICKEN_OBJ): $(LOCAL_CHICKEN)
$(CC) $(CC_FLAGS) $(DEFINES) -DHAVE_CHICKEN_CONFIG_H -DC_NO_HACKED_APPLY -c\
$(@:.o=.c) -o $@
$(LOCAL_CHICKEN):
cp $(CHICKEN_CORE)$(notdir $@) $@
build/eggs/matchable:
cd build/eggs && chicken-install -r matchable
build/eggs/glfw3-egg:
-cd build/eggs && git clone git@github.com:Metanoia/glfw3-egg
build/eggs/opengl:
cd build/eggs && chicken-install -r opengl
build/eggs/stb_image-egg:
-cd build/eggs && git clone git@github.com:Metanoia/stb_image-egg
build/eggs/freetype-egg:
-cd build/eggs && git clone git@github.com:Metanoia/freetype-egg
build/eggs/openal-egg:
-cd build/eggs && git clone git@github.com:Metanoia/openal-egg
sed -i -e "s/extern char \*alcGetString(void \*, int);//g"\
build/eggs/openal-egg/openal.scm
sed -i -e "s/(use/(import/g"\
build/eggs/openal-egg/openal.scm
build/eggs/stb-vorbis-egg:
-cd build/eggs && git clone git@github.com:Metanoia/stb-vorbis-egg
sed -i -e "s/^(foreign-declare/#+never (foreign-declare/g"\
build/eggs/stb-vorbis-egg/stb-vorbis.scm
# js target
emscripten: CC = $(EMSCRIPTEN_SDK)emcc
emscripten: DEFINES += -DC_NONUNIX -DECOS -s LEGACY_GL_EMULATION=1 -s GL_UNSAFE_OPTS=0
emscripten: FEATURES += -feature emscripten
emscripten: STANDALONE_LIBS =
emscripten: standalone-setup $(LOCAL_CHICKEN) emscripten-setup $(LOCAL_CHICKEN_OBJ) $(EGGS) build/main.c
emscripten:
$(CC) $(CC_FLAGS) $(DEFINES) -Ibuild/chicken/ $(LOCAL_CHICKEN_OBJ)\
build/main.c $(STANDALONE_LIBS) -o build/rockets.html
emscripten-setup:
@# fix runtime.c
sed -i -e "s/#include /\/* removed by sed *\//g"\
build/chicken/runtime.c
# desktop target
.PHONY: rockets
rockets:
$(SCC) -o $@ src/main.scm $(LDFLAGS) $(LIBS) $(OPTIMIZATION)
# flash target
.PHONY: flash
flash: CC = PATH=$(XBRIDGE_SDK)/../cygwin/bin/:$$PATH; export CYGWIN=nodosfilewarning;\
$(XBRIDGE_SDK)/usr/bin/gcc
flash: FEATURES += -feature flash
flash: STANDALONE_LIBS =
flash: standalone-setup $(LOCAL_CHICKEN_OBJ) $(EGGS) crossbridge/console.abc xvfs build/main.c
PATH=$(XBRIDGE_SDK)/../cygwin/bin/:$$PATH;\
export CYGWIN=nodosfilewarning;\
$(XBRIDGE_SDK)/usr/bin/gcc -emit-swf -swf-size=800x600\
-symbol-abc=crossbridge/console.abc\
-Ibuild/chicken/\
$(LOCAL_CHICKEN_OBJ) build/main.c crossbridge/xvfs.abc -o rockets.swf\
$(STANDALONE_LIBS)
@# signal end of compilation
@echo -e "\007" && echo -e "\007" && echo -e "\007"
crossbridge/console.abc: xvfs
cp $(XBRIDGE_SDK)/usr/share/LSOBackingStore.as crossbridge/
java -jar $(XBRIDGE_SDK)/usr/lib/asc2.jar -md -merge -AS3 -strict -optimize \
-import $(XBRIDGE_SDK)/usr/lib/builtin.abc \
-import $(XBRIDGE_SDK)/usr/lib/playerglobal.abc \
-import $(XBRIDGE_SDK)/usr/lib/BinaryData.abc \
-import $(XBRIDGE_SDK)/usr/lib/ISpecialFile.abc \
-import $(XBRIDGE_SDK)/usr/lib/IBackingStore.abc \
-import $(XBRIDGE_SDK)/usr/lib/IVFS.abc \
-import $(XBRIDGE_SDK)/usr/lib/InMemoryBackingStore.abc \
-import $(XBRIDGE_SDK)/usr/lib/PlayerKernel.abc \
-import $(XBRIDGE_SDK)/usr/lib/CModule.abc\
-import crossbridge/xvfs.abc\
crossbridge/LSOBackingStore.as misc/AGALMiniAssembler.as misc/Console.as\
-outdir crossbridge -out console
# TODO: test compressed vfs
.PHONY:
xvfs:
mkdir -p crossbridge/data
cp -r data crossbridge/data
cd crossbridge && PATH=$(XBRIDGE_SDK)/../cygwin/bin/:$$PATH;\
CYGWIN=nodosfilewarning;\
$(XBRIDGE_SDK)/usr/bin/genfs --type=embed --name=xvfs data/ xvfs
$(RM) crossbridge/data
java -jar $(XBRIDGE_SDK)/usr/lib/asc2.jar -merge -md -AS3 -strict -optimize \
-import $(XBRIDGE_SDK)/usr/lib/builtin.abc \
-import $(XBRIDGE_SDK)/usr/lib/playerglobal.abc \
-import $(XBRIDGE_SDK)/usr/lib/BinaryData.abc \
-import $(XBRIDGE_SDK)/usr/lib/ISpecialFile.abc \
-import $(XBRIDGE_SDK)/usr/lib/IBackingStore.aBC \
-import $(XBRIDGE_SDK)/usr/lib/IVFS.abc \
-import $(XBRIDGE_SDK)/usr/lib/InMemoryBackingStore.abc \
-import $(XBRIDGE_SDK)/usr/lib/PlayerKernel.abc \
crossbridge/xvfs_*.as -outdir crossbridge -out xvfs
# TODO: profile guided optimization
.PHONY:
#release: export OPTIMIZATION = -Ofast -mtune=generic -msse -mfpmath=sse -flto
release: export OPTIMIZATION = -Ofast -mtune=generic -msse -mfpmath=sse
release: export DEFINES = -DNDEBUG
#release: export LDFLAGS += -fwhole-program
release: all
.PHONY:
pack: release
strip rockets*
mkdir pack
mkdir pack/rockets
@#cp -R data pack/rockets
pushd data/ && zip -r9 ../pack/rockets/main.dat * && popd
-cp rockets pack/rockets
-cp rockets.exe pack/rockets
cd pack && zip -r9 ../rockets.zip rockets
rm -fr pack
.PHONY:
publish: pack
@echo "Key name for warsaw (default 'ssh_rsa'):"; \
read key_name; \
key_name=$${key_name:-ssh_rsa}; \
scp -i ~/.ssh/$$key_name rockets.zip root@warsaw:/root/rockets.zip
.PHONY:
stats:
@echo "Line count:" `cat src/*.cpp src/*.h | wc -l`
@echo "Data folder size:" `du -c data -h | awk END{print} | sed s/\t.*$$//`
@echo "Git commit count:" `git rev-list --count HEAD`
.PHONY:
run: rockets
./rockets || true
.PHONY:
debug: all
gdb rockets || true
.PHONY:
profile: LIBS += -pg
profile: release
./rockets && gprof rockets.exe gmon.out > profile.txt
.PHONY:
clean:
$(RM) build
$(RM) rockets
$(RM) rockets.exe
$(RM) rockets.zip
$(RM) crossbridge
$(RM) rockets.swf