export LANG=c PROJECT_ROOT = $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) SRC_DIR := $(PROJECT_ROOT) #LLVM_SRC_ROOT := /usr/local/src/clang-dev/Downloads/llvm-project-llvmorg-12.0.1/ #LLVM_BUILD_ROOT := /mnt/sda1/Shared/llvm-dev/clang-build LLVM_SRC_ROOT :=/mnt/sda2/Shared/llvm-dev/llvm-project LLVM_BUILD_ROOT :=/mnt/sda2/Shared/llvm-dev/build SRC_ROOT_DIR := $(LLVM_SRC_ROOT)/clang/lib OBJ_ROOT_DIR := $(PROJECT_ROOT)/obj Lex_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/Lex/*.cpp)) Lex_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/Lex/%.o,$(Lex_SRC_FILES)) Basic_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/Basic/*.cpp)) Basic_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/Basic/%.o,$(Basic_SRC_FILES)) Sema_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/Sema/*.cpp)) Sema_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/Sema/%.o,$(Sema_SRC_FILES)) Parse_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/Parse/*.cpp)) Parse_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/Parse/%.o,$(Parse_SRC_FILES)) AST_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/AST/*.cpp)) AST_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/AST/%.o,$(AST_SRC_FILES)) Edit_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/Edit/*.cpp)) Edit_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/Edit/%.o,$(Edit_SRC_FILES)) Serialization_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/Serialization/*.cpp)) Serialization_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/Serialization/%.o,$(Serialization_SRC_FILES)) Analysis_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/Analysis/*.cpp)) Analysis_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/Analysis/%.o,$(Analysis_SRC_FILES)) Targets_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/Basic/Targets/*.cpp)) Targets_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/Basic/Targets/%.o,$(Targets_SRC_FILES)) Interp_SRC_FILES := $(notdir $(wildcard $(SRC_ROOT_DIR)/AST/Interp/*.cpp)) Interp_OBJ_FILES := $(patsubst %.cpp,$(OBJ_ROOT_DIR)/AST/Interp/%.o,$(Interp_SRC_FILES)) #All_OBJ_FILES := $(Lex_OBJ_FILES) $(Basic_OBJ_FILES) $(Sema_SRC_FILES) $(AST_OBJ_FILES) #Lex_OBJ_FILES := $(patsubst %.cpp,%.o,$(Lex_SRC_FILES)) # Lex flags LexLDFLAGS := -L$(PROJECT_ROOT)/lib -lLex -lBasic -L$(LLVM_BUILD_ROOT)/lib \ -lLLVMMC -lLLVMCore -lLLVMRemarks -lLLVMBitstreamReader \ -lLLVMBinaryFormat -lLLVMSupport -pthread ParserLDFLAGS := -L$(PROJECT_ROOT)/lib -lParse -L$(LLVM_BUILD_ROOT)/lib -lLLVMMCParser -lLLVMFrontendOpenMP \ -L$(PROJECT_ROOT)/lib -lSema -L$(LLVM_BUILD_ROOT)/lib -lLLVMAnalysis -L$(LLVM_BUILD_ROOT)/lib -lEdit \ -lAnalysis -lSerialization -lAST -lLex -lBasic \ -L$(LLVM_BUILD_ROOT)/lib -lLLVMMC -lLLVMCore -lLLVMRemarks -lLLVMBitstreamReader \ -lLLVMBinaryFormat -lLLVMSupport -ltinfo -pthread #-DGTEST_HAS_RTTI=0 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS \ -D__STDC_LIMIT_MACROS # -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra \ -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic \ -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-noexcept-type \ -Wdelete-non-virtual-dtor -Wno-comment -Wmisleading-indentation -ffunction-sections \ -fdata-sections -fno-common -Woverloaded-virtual -fno-strict-aliasing \ -fno-exceptions -fno-rtti -std=c++14 CXXFLAGS := -std=c++14 -fno-rtti -I$(PROJECT_ROOT) -I$(LLVM_BUILD_ROOT)/tools/clang/include \ -I$(LLVM_BUILD_ROOT)/include -I$(LLVM_SRC_ROOT)/clang/include -I$(LLVM_SRC_ROOT)/llvm/include \ -I$(SRC_ROOT_DIR)/Basic -I$(LLVM_BUILD_ROOT)/tools/clang/lib/Basic/ \ -I$(LLVM_BUILD_ROOT)/tools/clang/lib/Sema -I$(LLVM_BUILD_ROOT)/tools/clang/lib/AST \ -fPIC -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual \ -Wno-missing-field-initializers -pedantic \ -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-noexcept-type \ -Wdelete-non-virtual-dtor -Wno-comment -Wmisleading-indentation BUILD_MODE := debug ifeq ($(BUILD_MODE),debug) CXXFLAGS += -ggdb3 -O0 else ifeq ($(BUILD_MODE),run) CXXFLAGS += -O2 else $(error Build mode $(BUILD_MODE) not supported by this Makefile) endif ######################## lib ################################ lib/libBasic.a: $(Basic_OBJ_FILES) $(Targets_OBJ_FILES) ar rcs lib/libBasic.a $(Basic_OBJ_FILES) $(Targets_OBJ_FILES) lib/libLex.a: $(Lex_OBJ_FILES) ar rcs lib/libLex.a $(Lex_OBJ_FILES) lib/libEdit.a: $(Edit_OBJ_FILES) ar rcs lib/libEdit.a $(Edit_OBJ_FILES) lib/libAnalysis.a: $(Analysis_OBJ_FILES) ar rcs lib/libAnalysis.a $(Analysis_OBJ_FILES) lib/libSerialization.a: $(Serialization_OBJ_FILES) ar rcs lib/libSerialization.a $(Serialization_OBJ_FILES) lib/libAST.a: $(AST_OBJ_FILES) $(Interp_OBJ_FILES) ar rcs lib/libAST.a $(AST_OBJ_FILES) $(Interp_OBJ_FILES) lib/libParse.a: $(Parse_OBJ_FILES) ar rcs lib/libParse.a $(Parse_OBJ_FILES) lib/libSema.a: $(Sema_OBJ_FILES) ar rcs lib/libSema.a $(Sema_OBJ_FILES) ############################################################# ## Lex lib lexlibs:=lib/libBasic.a lib/libLex.a parserlibs:=lib/libBasic.a lib/libLex.a lib/libParse.a lib/libSema.a lib/libAnalysis.a lib/libEdit.a \ lib/libSerialization.a lib/libAST.a ############################################################ obj/clangLex.o: clangLex.cpp $(CXX) -c $(CXXFLAGS) clangLex.cpp -o obj/clangLex.o obj/clangParser.o: clangParser.cpp $(CXX) -c $(CXXFLAGS) clangParser.cpp -o obj/clangParser.o clangLex.exe: obj/clangLex.o $(lexlibs) $(CXX) $(CXXFLAGS) obj/clangLex.o $(LexLDFLAGS) -o clangLex.exe #Parse Sema Edit Lex Serialization AST Basic Analysis clangParser.exe: obj/clangParser.o $(parserlibs) $(CXX) obj/clangParser.o $(ParserLDFLAGS) -o clangParser.exe ################## obj rules ################################## $(OBJ_ROOT_DIR)/Lex/%.o: $(SRC_ROOT_DIR)/Lex/%.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< $(OBJ_ROOT_DIR)/Basic/Targets/%.o: $(SRC_ROOT_DIR)/Basic/Targets/%.cpp $(CXX) -c $(CXXFLAGS) -I$(SRC_ROOT_DIR)/Basic -o $@ $< $(OBJ_ROOT_DIR)/AST/Interp/%.o: $(SRC_ROOT_DIR)/AST/Interp/%.cpp $(CXX) -c $(CXXFLAGS) -I$(LLVM_BUILD_ROOT)/tools/clang/lib/AST -o $@ $< $(OBJ_ROOT_DIR)/Basic/%.o: $(SRC_ROOT_DIR)/Basic/%.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< $(OBJ_ROOT_DIR)/Parse/%.o: $(SRC_ROOT_DIR)/Parse/%.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< $(OBJ_ROOT_DIR)/AST/%.o: $(SRC_ROOT_DIR)/AST/%.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< $(OBJ_ROOT_DIR)/Sema/%.o: $(SRC_ROOT_DIR)/Sema/%.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< $(OBJ_ROOT_DIR)/Edit/%.o: $(SRC_ROOT_DIR)/Edit/%.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< $(OBJ_ROOT_DIR)/Serialization/%.o: $(SRC_ROOT_DIR)/Serialization/%.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< $(OBJ_ROOT_DIR)/Analysis/%.o: $(SRC_ROOT_DIR)/Analysis/%.cpp $(CXX) -c $(CXXFLAGS) -o $@ $< ########################################################## all: clangParser.exe clean: rm -fr clangLex.exe clangParser.exe $(Lex_OBJ_FILES) $(Basic_OBJ_FILES) $(Sema_OBJ_FILES) $(Targets_OBJ_FILES) \ $(AST_OBJ_FILES) $(Parse_OBJ_FILES) $(Edit_OBJ_FILES) $(Serialization_OBJ_FILES) $(Analysis_OBJ_FILES) \ lib/libBasic.a lib/libLex.a lib/libParse.a lib/libSema.a lib/libAnalysis.a lib/libEdit.a \ lib/libSerialization.a lib/libParse.a lib/libAST.a $(Interp_OBJ_FILES) \ obj/clangLex.o obj/clangParser.o