| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- MODULES := cloop tests tests/test1
- WITH_FPC := 1
- TARGET := release
- CC := $(CC)
- CXX := $(CXX)
- LD := $(CXX)
- SRC_DIR := src
- BUILD_DIR := build
- OUT_DIR := output
- SHRLIB_EXT := .so
- EXE_EXT :=
- OBJ_DIR := $(BUILD_DIR)/$(TARGET)
- BIN_DIR := $(OUT_DIR)/$(TARGET)/bin
- LIB_DIR := $(OUT_DIR)/$(TARGET)/lib
- SRC_DIRS := $(addprefix $(SRC_DIR)/,$(MODULES))
- OBJ_DIRS := $(addprefix $(OBJ_DIR)/,$(MODULES))
- SRCS_C := $(foreach sdir,$(SRC_DIRS),$(wildcard $(sdir)/*.c))
- SRCS_CPP := $(foreach sdir,$(SRC_DIRS),$(wildcard $(sdir)/*.cpp))
- OBJS_C := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS_C))
- OBJS_CPP := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS_CPP))
- C_FLAGS := -ggdb -fPIC -MMD -MP -W -Wall -Wno-unused-parameter
- CXX_FLAGS := $(C_FLAGS) -std=c++11
- FPC_FLAGS := -Mdelphi -Cg
- ifeq ($(shell uname),FreeBSD)
- DL_LIB :=
- else
- DL_LIB := -ldl
- endif
- ifeq ($(TARGET),release)
- CXX_FLAGS += -O3
- endif
- ifeq ($(shell uname),Darwin)
- CXX_FLAGS += -stdlib=libc++
- endif
- ifeq ($(TARGET),debug)
- FPC_FLAGS += -g
- LD_FLAGS += -ggdb
- endif
- vpath %.c $(SRC_DIRS)
- vpath %.cpp $(SRC_DIRS)
- define compile
- $1/%.o: %.c | $1
- $(CC) -c $$(C_FLAGS) $$< -o $$@
- $1/%.o: %.cpp | $1
- $(CXX) -c $$(CXX_FLAGS) $$< -o $$@
- endef
- .PHONY: all core mkdirs clean
- all: core tests
- core: mkdirs \
- $(BIN_DIR)/cloop
- tests: mkdirs \
- $(BIN_DIR)/test1-c$(SHRLIB_EXT) \
- $(BIN_DIR)/test1-c$(EXE_EXT) \
- $(BIN_DIR)/test1-cpp$(SHRLIB_EXT) \
- $(BIN_DIR)/test1-cpp$(EXE_EXT) \
- $(BIN_DIR)/test1-pascal$(SHRLIB_EXT) \
- $(BIN_DIR)/test1-pascal$(EXE_EXT)
- mkdirs: $(OBJ_DIRS) $(BIN_DIR) $(LIB_DIR)
- $(OBJ_DIRS) $(BIN_DIR) $(LIB_DIR):
- @mkdir -p $@
- clean:
- @rm -rf $(BUILD_DIR) $(OUT_DIR)
- $(foreach bdir,$(OBJ_DIRS),$(eval $(call compile,$(bdir))))
- -include $(addsuffix .d,$(basename $(OBJS_C)))
- -include $(addsuffix .d,$(basename $(OBJS_CPP)))
- $(BIN_DIR)/cloop: \
- $(OBJ_DIR)/cloop/Action.o \
- $(OBJ_DIR)/cloop/Expr.o \
- $(OBJ_DIR)/cloop/Generator.o \
- $(OBJ_DIR)/cloop/Lexer.o \
- $(OBJ_DIR)/cloop/Parser.o \
- $(OBJ_DIR)/cloop/Main.o \
- | $(BIN_DIR)
- $(LD) $(LD_FLAGS) $^ -o $@ $(LIBS)
- $(SRC_DIR)/tests/test1/CalcCApi.h: $(BIN_DIR)/cloop $(SRC_DIR)/tests/test1/Interface.idl
- $(BIN_DIR)/cloop $(SRC_DIR)/tests/test1/Interface.idl c-header $@ CALC_C_API_H CALC_I
- $(SRC_DIR)/tests/test1/CalcCApi.c: $(BIN_DIR)/cloop $(SRC_DIR)/tests/test1/Interface.idl $(SRC_DIR)/tests/test1/CalcCApi.h
- $(BIN_DIR)/cloop $(SRC_DIR)/tests/test1/Interface.idl c-impl $@ CalcCApi.h CALC_I
- $(SRC_DIR)/tests/test1/CalcCppApi.h: $(BIN_DIR)/cloop $(SRC_DIR)/tests/test1/Interface.idl
- $(BIN_DIR)/cloop $(SRC_DIR)/tests/test1/Interface.idl c++ $@ CALC_CPP_API_H calc I
- $(SRC_DIR)/tests/test1/CalcPascalApi.pas: $(BIN_DIR)/cloop \
- $(SRC_DIR)/tests/test1/Interface.idl \
- $(SRC_DIR)/tests/test1/CalcPascalApi.interface.pas \
- $(SRC_DIR)/tests/test1/CalcPascalApi.implementation.pas
- $(BIN_DIR)/cloop $(SRC_DIR)/tests/test1/Interface.idl pascal $@ CalcPascalApi \
- --uses "SysUtils" \
- --interfaceFile $(SRC_DIR)/tests/test1/CalcPascalApi.interface.pas \
- --implementationFile $(SRC_DIR)/tests/test1/CalcPascalApi.implementation.pas \
- --exceptionClass CalcException
- $(SRC_DIR)/tests/test1/CppTest.cpp: $(SRC_DIR)/tests/test1/CalcCppApi.h
- $(BIN_DIR)/test1-c$(SHRLIB_EXT): \
- $(OBJ_DIR)/tests/test1/CalcCApi.o \
- $(OBJ_DIR)/tests/test1/CTest.o \
- $(LD) $(LD_FLAGS) $^ -shared $(DL_LIB) -o $@ $(LIBS)
- $(BIN_DIR)/test1-c$(EXE_EXT): \
- $(OBJ_DIR)/tests/test1/CalcCApi.o \
- $(OBJ_DIR)/tests/test1/CTest.o \
- $(LD) $(LD_FLAGS) $^ $(DL_LIB) -o $@ $(LIBS)
- $(BIN_DIR)/test1-cpp$(SHRLIB_EXT): \
- $(OBJ_DIR)/tests/test1/CppTest.o \
- $(LD) $(LD_FLAGS) $^ -shared $(DL_LIB) -o $@ $(LIBS)
- $(BIN_DIR)/test1-cpp$(EXE_EXT): \
- $(OBJ_DIR)/tests/test1/CppTest.o \
- $(LD) $(LD_FLAGS) $^ $(DL_LIB) -o $@ $(LIBS)
- $(BIN_DIR)/test1-pascal$(SHRLIB_EXT): \
- $(SRC_DIR)/tests/test1/PascalClasses.pas \
- $(SRC_DIR)/tests/test1/PascalLibrary.dpr \
- $(SRC_DIR)/tests/test1/CalcPascalApi.pas \
- ifeq ($(WITH_FPC),1)
- fpc $(FPC_FLAGS) -fPIC -FU$(OBJ_DIR)/tests/test1 -o$(BIN_DIR)/test1-pascal$(SHRLIB_EXT) $(SRC_DIR)/tests/test1/PascalLibrary.dpr
- endif
- $(BIN_DIR)/test1-pascal$(EXE_EXT): \
- $(SRC_DIR)/tests/test1/PascalClasses.pas \
- $(SRC_DIR)/tests/test1/PascalTest.dpr \
- $(SRC_DIR)/tests/test1/CalcPascalApi.pas \
- ifeq ($(WITH_FPC),1)
- fpc $(FPC_FLAGS) -FU$(OBJ_DIR)/tests/test1 -o$(BIN_DIR)/test1-pascal$(EXE_EXT) $(SRC_DIR)/tests/test1/PascalTest.dpr
- endif
|