161 lines
5.0 KiB
Makefile
161 lines
5.0 KiB
Makefile
#
|
|
# ispc Makefile
|
|
#
|
|
|
|
ARCH_OS = $(shell uname)
|
|
ARCH_TYPE = $(shell arch)
|
|
|
|
ifeq ($(shell llvm-config --version), 3.1svn)
|
|
LLVM_LIBS=-lLLVMAsmParser -lLLVMInstrumentation -lLLVMLinker \
|
|
-lLLVMArchive -lLLVMBitReader -lLLVMDebugInfo -lLLVMJIT -lLLVMipo \
|
|
-lLLVMBitWriter -lLLVMTableGen -lLLVMCBackendInfo \
|
|
-lLLVMX86Disassembler -lLLVMX86CodeGen -lLLVMSelectionDAG \
|
|
-lLLVMAsmPrinter -lLLVMX86AsmParser -lLLVMX86Desc -lLLVMX86Info \
|
|
-lLLVMX86AsmPrinter -lLLVMX86Utils -lLLVMMCDisassembler -lLLVMMCParser \
|
|
-lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMTransformUtils \
|
|
-lLLVMipa -lLLVMAnalysis -lLLVMMCJIT -lLLVMRuntimeDyld \
|
|
-lLLVMExecutionEngine -lLLVMTarget -lLLVMMC -lLLVMObject -lLLVMCore \
|
|
-lLLVMSupport
|
|
else
|
|
LLVM_LIBS=$(shell llvm-config --libs)
|
|
endif
|
|
|
|
CLANG=clang
|
|
CLANG_LIBS = -lclangFrontend -lclangDriver \
|
|
-lclangSerialization -lclangParse -lclangSema \
|
|
-lclangAnalysis -lclangAST -lclangLex -lclangBasic
|
|
|
|
ISPC_LIBS=$(shell llvm-config --ldflags) $(CLANG_LIBS) $(LLVM_LIBS) \
|
|
-lpthread -ldl
|
|
|
|
LLVM_CXXFLAGS=$(shell llvm-config --cppflags)
|
|
LLVM_VERSION=LLVM_$(shell llvm-config --version | sed s/\\./_/)
|
|
LLVM_VERSION_DEF=-D$(LLVM_VERSION)
|
|
|
|
BUILD_DATE=$(shell date +%Y%m%d)
|
|
BUILD_VERSION=$(shell git log --abbrev-commit --abbrev=16 | head -1)
|
|
|
|
CXX=g++
|
|
CPP=cpp
|
|
OPT=-g3
|
|
CXXFLAGS=$(OPT) $(LLVM_CXXFLAGS) -I. -Iobjs/ -Wall $(LLVM_VERSION_DEF) \
|
|
-DBUILD_DATE="\"$(BUILD_DATE)\"" -DBUILD_VERSION="\"$(BUILD_VERSION)\""
|
|
|
|
LDFLAGS=
|
|
ifeq ($(ARCH_OS),Linux)
|
|
# try to link everything statically under Linux (including libstdc++) so
|
|
# that the binaries we generate will be portable across distributions...
|
|
ifeq ($(ARCH_TYPE),x86_64)
|
|
LDFLAGS=-static -L/usr/lib/gcc/x86_64-linux-gnu/4.4
|
|
else
|
|
LDFLAGS=-L/usr/lib/gcc/i686-redhat-linux/4.6.0
|
|
endif
|
|
endif
|
|
|
|
LEX=flex
|
|
YACC=bison -d -v -t
|
|
|
|
###########################################################################
|
|
|
|
CXX_SRC=ast.cpp builtins.cpp ctx.cpp decl.cpp expr.cpp func.cpp ispc.cpp \
|
|
llvmutil.cpp main.cpp module.cpp opt.cpp stmt.cpp sym.cpp type.cpp \
|
|
util.cpp
|
|
HEADERS=ast.h builtins.h ctx.h decl.h expr.h func.h ispc.h llvmutil.h module.h \
|
|
opt.h stmt.h sym.h type.h util.h
|
|
BUILTINS_SRC=builtins-avx.ll builtins-avx-x2.ll builtins-sse2.ll builtins-sse2-x2.ll \
|
|
builtins-sse4.ll builtins-sse4-x2.ll builtins-dispatch.ll
|
|
BISON_SRC=parse.yy
|
|
FLEX_SRC=lex.ll
|
|
|
|
OBJS=$(addprefix objs/, $(CXX_SRC:.cpp=.o) $(BUILTINS_SRC:.ll=.o) \
|
|
builtins-c-32.o builtins-c-64.o stdlib_ispc.o $(BISON_SRC:.yy=.o) \
|
|
$(FLEX_SRC:.ll=.o))
|
|
|
|
default: ispc
|
|
|
|
.PHONY: dirs clean depend doxygen print_llvm_src
|
|
.PRECIOUS: objs/builtins-%.cpp
|
|
|
|
depend: $(CXX_SRC) $(HEADERS)
|
|
@echo Updating dependencies
|
|
@gcc -MM $(CXXFLAGS) $(CXX_SRC) | sed 's_^\([a-z]\)_objs/\1_g' > depend
|
|
|
|
-include depend
|
|
|
|
dirs:
|
|
@echo Creating objs/ directory
|
|
@/bin/mkdir -p objs
|
|
|
|
print_llvm_src:
|
|
@echo Using LLVM `llvm-config --version` from `llvm-config --libdir`
|
|
|
|
clean:
|
|
/bin/rm -rf objs ispc
|
|
|
|
doxygen:
|
|
/bin/rm -rf docs/doxygen
|
|
doxygen doxygen.cfg
|
|
|
|
ispc: print_llvm_src dirs $(OBJS)
|
|
@echo Creating ispc executable
|
|
@$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(ISPC_LIBS)
|
|
|
|
objs/%.o: %.cpp
|
|
@echo Compiling $<
|
|
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
|
|
|
objs/parse.cc: parse.yy
|
|
@echo Running bison on $<
|
|
@$(YACC) -o $@ $<
|
|
|
|
objs/parse.o: objs/parse.cc $(HEADERS)
|
|
@echo Compiling $<
|
|
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
|
|
|
objs/lex.cpp: lex.ll
|
|
@echo Running flex on $<
|
|
@$(LEX) -o $@ $<
|
|
|
|
objs/lex.o: objs/lex.cpp $(HEADERS) objs/parse.cc
|
|
@echo Compiling $<
|
|
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
|
|
|
objs/builtins-%.cpp: builtins-%.ll
|
|
@echo Creating C++ source from builtin definitions file $<
|
|
@m4 -DLLVM_VERSION=$(LLVM_VERSION) builtins.m4 $< | ./bitcode2cpp.py $< > $@
|
|
|
|
objs/builtins-%.o: objs/builtins-%.cpp
|
|
@echo Compiling $<
|
|
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
|
|
|
objs/builtins-c-32.cpp: builtins-c.c
|
|
@echo Creating C++ source from builtins definition file $<
|
|
@$(CLANG) -m32 -emit-llvm -c $< -o - | llvm-dis - | ./bitcode2cpp.py builtins-c-32.c > $@
|
|
|
|
objs/builtins-c-32.o: objs/builtins-c-32.cpp
|
|
@echo Compiling $<
|
|
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
|
|
|
objs/builtins-c-64.cpp: builtins-c.c
|
|
@echo Creating C++ source from builtins definition file $<
|
|
@$(CLANG) -m64 -emit-llvm -c $< -o - | llvm-dis - | ./bitcode2cpp.py builtins-c-64.c > $@
|
|
|
|
objs/builtins-c-64.o: objs/builtins-c-64.cpp
|
|
@echo Compiling $<
|
|
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
|
|
|
objs/stdlib_ispc.cpp: stdlib.ispc
|
|
@echo Creating C++ source from $<
|
|
@$(CLANG) -E -x c -DISPC=1 -DPI=3.1415926536 $< -o - | ./stdlib2cpp.py > $@
|
|
|
|
objs/stdlib_ispc.o: objs/stdlib_ispc.cpp
|
|
@echo Compiling $<
|
|
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
|
|
|
objs/builtins-sse2.cpp: builtins.m4 builtins-sse2-common.ll builtins-sse2.ll
|
|
objs/builtins-sse2-x2.cpp: builtins.m4 builtins-sse2-common.ll builtins-sse2-x2.ll
|
|
objs/builtins-sse4.cpp: builtins.m4 builtins-sse4-common.ll builtins-sse4.ll
|
|
objs/builtins-sse4-x2.cpp: builtins.m4 builtins-sse4-common.ll builtins-sse4-x2.ll
|
|
objs/builtins-avx.cpp: builtins.m4 builtins-avx-common.ll builtins-avx.ll
|
|
objs/builtins-avx-x2.cpp: builtins.m4 builtins-avx-common.ll builtins-avx-x2.ll
|