Skip to content

Commit 6a42cec

Browse files
committed
Updated makefile, implemented basic layer
1 parent c179575 commit 6a42cec

File tree

6 files changed

+204
-15
lines changed

6 files changed

+204
-15
lines changed

README.md

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,48 @@
11
# lsp-r3d-base-lib
2-
Base library for 3D rendering
2+
3+
Base library for implementing and loading 3D rendering backend.
4+
5+
Requirements
6+
======
7+
8+
The following packages need to be installed for building:
9+
10+
* gcc >= 4.9
11+
* make >= 4.0
12+
13+
Building
14+
======
15+
16+
To build the library, perform the following commands:
17+
18+
```bash
19+
make config # Configure the build
20+
make fetch # Fetch dependencies from Git repository
21+
make
22+
sudo make install
23+
```
24+
25+
To get more build options, run:
26+
27+
```bash
28+
make help
29+
```
30+
31+
To uninstall library, simply issue:
32+
33+
```bash
34+
make uninstall
35+
```
36+
37+
To clean all binary files, run:
38+
39+
```bash
40+
make clean
41+
```
42+
43+
To clean the whole project tree including configuration files, run:
44+
45+
```bash
46+
make prune
47+
```
48+

dependencies.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
LSP_COMMON_LIB_VERSION := 1.0.2
33
LSP_COMMON_LIB_NAME := lsp-common-lib
44
LSP_COMMON_LIB_URL := https://github.com/sadko4u/$(LSP_COMMON_LIB_NAME).git
5+
LSP_COMMON_LIB_TYPE := hdr
56

67
LSP_TEST_FW_VERSION := 1.0.2
78
LSP_TEST_FW_NAME := lsp-test-fw
89
LSP_TEST_FW_URL := https://github.com/sadko4u/$(LSP_TEST_FW_NAME).git
10+
LSP_TEST_FW_TYPE := src
911

1012
STDLIB_VERSION := system
1113
STDLIB_LDFLAGS := -lpthread -ldl

make/configure.mk

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,20 @@ define pkgconfig =
4242
$(if $($(name)_OBJ),, $(eval $(name)_OBJ :=))
4343
endef
4444

45-
define bldconfig =
45+
define libconfig =
46+
$(eval name = $(1))
47+
$(if $($(name)_NAME), \
48+
$(if $($(name)_LDLAGS),, $(eval $(name)_LDFLAGS := -l$($(name)_NAME))) \
49+
)
50+
$(if $($(name)_OBJ),, $(eval $(name)_OBJ :=))
51+
endef
52+
53+
define optconfig =
54+
$(eval name = $(1))
55+
$(if $($(name)_OBJ),, $(eval $(name)_OBJ :=))
56+
endef
57+
58+
define srcconfig =
4659
$(eval name = $(1))
4760
$(if $($(name)_PATH),, $(eval $(name)_PATH := $(MODULES)/$($(name)_NAME)))
4861
$(if $($(name)_INC),, $(eval $(name)_INC := $($(name)_PATH)/include))
@@ -59,13 +72,26 @@ define bldconfig =
5972
)
6073
endef
6174

75+
define hdrconfig =
76+
$(eval name = $(1))
77+
$(if $($(name)_PATH),, $(eval $(name)_PATH := $(MODULES)/$($(name)_NAME)))
78+
$(if $($(name)_INC),, $(eval $(name)_INC := $($(name)_PATH)/include))
79+
$(if $($(name)_TESTING),, $(eval $(name)_TESTING := 0))
80+
$(if $($(name)_CFLAGS),, $(eval $(name)_CFLAGS := "-I\"$($(name)_INC)\""$(xflags)))
81+
$(if $($(name)_MFLAGS),, \
82+
$(eval $(name)_MFLAGS := \
83+
$(if $(patsubst $(ARTIFACT_NAME),,$($(name)_NAME)),"-DLSP_BUILTIN_MODULE -fvisibility=hidden",)) \
84+
)
85+
endef
86+
6287
define vardef =
6388
$(eval name = $(1))
6489
# Override variables if they are not defined
65-
$(if $(findstring system,$($(name)_VERSION)), \
66-
$(eval $(call pkgconfig, $(name))), \
67-
$(eval $(call bldconfig, $(name))) \
68-
)
90+
$(if $(findstring pkg,$($(name)_TYPE)), $(eval $(call pkgconfig, $(name))))
91+
$(if $(findstring src,$($(name)_TYPE)), $(eval $(call srcconfig, $(name))))
92+
$(if $(findstring hdr,$($(name)_TYPE)), $(eval $(call hdrconfig, $(name))))
93+
$(if $(findstring lib,$($(name)_TYPE)), $(eval $(call libconfig, $(name))))
94+
$(if $(findstring opt,$($(name)_TYPE)), $(eval $(call optconfig, $(name))))
6995
endef
7096

7197
# Define predefined variables
@@ -80,6 +106,7 @@ ifndef $(ARTIFACT_VARS)_PATH
80106
endif
81107

82108
$(ARTIFACT_VARS)_TESTING = $(TEST)
109+
$(ARTIFACT_VARS)_TYPE := src
83110

84111
OVERALL_DEPS := $(DEPENDENCIES) $(ARTIFACT_VARS)
85112
__tmp := $(foreach dep,$(OVERALL_DEPS),$(call vardef, $(dep)))
@@ -90,6 +117,7 @@ CONFIG_VARS = \
90117
$(foreach name, $(OVERALL_DEPS), \
91118
$(name)_NAME \
92119
$(name)_VERSION \
120+
$(name)_TYPE \
93121
$(name)_BRANCH \
94122
$(name)_PATH \
95123
$(name)_INC \
@@ -132,11 +160,14 @@ help: | toolvars sysvars
132160
@echo " <ARTIFACT>_PATH location of the source code of the artifact"
133161
@echo " <ARTIFACT>_SRC path to source code files of the artifact"
134162
@echo " <ARTIFACT>_TEST location of test files of the artifact"
163+
@echo " <ARTIFACT>_TYPE artifact usage type"
164+
@echo " - src - use sources and headers from git"
165+
@echo " - hdr - use headers only from git"
166+
@echo " - pkg - use pkgconfig for configuration"
167+
@echo " - lib - use system headers and -l<libname> flags"
168+
@echo " - opt - use optional configuration"
135169
@echo " <ARTIFACT>_URL location of the artifact git repoisitory"
136-
@echo " <ARTIFACT>_VERSION version of the artifact used for building:"
137-
@echo " - version contained in git tag"
138-
@echo " - git branch name"
139-
@echo " - 'system' for system library use"
170+
@echo " <ARTIFACT>_VERSION version of the artifact used for building"
140171
@echo ""
141172
@echo "Artifacts used for build:"
142173
@echo " $(DEPENDENCIES)"

make/modules.mk

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,22 @@ include $(BASEDIR)/project.mk
77
DEPENDENCIES += $(TEST_DEPENDENCIES)
88

99
# Form list of modules, exclude all modules that have 'system' version
10-
MODULES = $(foreach dep, $(DEPENDENCIES), $(if $(findstring system,$($(dep)_VERSION)),,$(dep)))
10+
SRC_MODULES = $(foreach dep, $(DEPENDENCIES), $(if $(findstring src,$($(dep)_TYPE)),$(dep)))
11+
HDR_MODULES = $(foreach dep, $(DEPENDENCIES), $(if $(findstring hdr,$($(dep)_TYPE)),$(dep)))
1112

1213
# Branches
13-
.PHONY: $(MODULES)
14+
.PHONY: $(SRC_MODULES) $(HDR_MODULES)
1415
.PHONY: fetch prune clean
1516

16-
$(MODULES):
17+
$(SRC_MODULES) $(HDR_MODULES):
1718
@echo "Cloning $($(@)_URL) -> $($(@)_PATH) [$($(@)_BRANCH)]"
1819
@test -f "$($(@)_PATH)/.git/config" || $(GIT) clone "$($(@)_URL)" "$($(@)_PATH)"
1920
@$(GIT) -C "$($(@)_PATH)" fetch origin --prune --force
2021
@$(GIT) -C "$($(@)_PATH)" fetch origin --prune '+refs/heads/*:refs/tags/*' --force
2122
@$(GIT) -c advice.detachedHead=false -C "$($(@)_PATH)" checkout origin/$($(@)_BRANCH) || \
2223
$(GIT) -c advice.detachedHead=false -C "$($(@)_PATH)" checkout refs/tags/$($(@)_BRANCH)
2324

24-
fetch: $(MODULES)
25+
fetch: $(SRC_MODULES) $(HDR_MODULES)
2526

2627
clean:
2728
@echo rm -rf "$($(ARTIFACT_VARS)_BIN)/$(ARTIFACT_NAME)"

project.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
ARTIFACT_NAME = lsp-r3d-base-lib
33
ARTIFACT_VARS = LSP_R3D_BASE_LIB
44
ARTIFACT_HEADERS = lsp-plug.in
5-
ARTIFACT_EXPORT_ALL = 1
5+
ARTIFACT_EXPORT_ALL = 0
66
VERSION = 0.5.0-devel
77

88
# List of dependencies

src/Makefile

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
CONFIG := $(CURDIR)/.config.mk
2+
3+
include $(CONFIG)
4+
include $(CURDIR)/../project.mk
5+
6+
rwildcard = $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
7+
CXX_SRCMAIN = $(call rwildcard, main, *.cpp)
8+
CXX_SRCTEST = $(call rwildcard, test, *.cpp)
9+
CXX_SRC = $(CXX_SRCMAIN)
10+
CXX_OBJ = $(patsubst %.cpp, $($(ARTIFACT_VARS)_BIN)/%.o, $(CXX_SRC))
11+
CXX_FILE = $(patsubst $($(ARTIFACT_VARS)_BIN)/%.o,%.cpp, $(@))
12+
CXX_HEADERS = $(foreach hdr,$(ARTIFACT_HEADERS),$(call rwildcard, $($(ARTIFACT_VARS)_INC)/$(hdr), *.h)
13+
CXX_INSTHEADERS = $(patsubst $($(ARTIFACT_VARS)_INC)/%,$(DESTDIR)$(PREFIX)/include/%,$(CXX_HEADERS))
14+
15+
ARTIFACT_BIN = $($(ARTIFACT_VARS)_BIN)
16+
ARTIFACT_LIB = $(ARTIFACT_BIN)/$($(ARTIFACT_VARS)_NAME)-$($(ARTIFACT_VARS)_VERSION)$(LIBRARY_EXT)
17+
ARTIFACT_TESTBIN = $(ARTIFACT_BIN)/$($(ARTIFACT_VARS)_NAME)-test$(EXECUTABLE_EXT)
18+
ARTIFACT_OBJ = $($(ARTIFACT_VARS)_OBJ)
19+
ARTIFACT_MFLAGS = $($(ARTIFACT_VARS)_MFLAGS) $(foreach dep,$(DEPENDENCIES),-DUSE_$(dep))
20+
21+
CFLAGS_DEPS = $(foreach dep, $(DEPENDENCIES) $(ARTIFACT_VARS), $(if $($(dep)_CFLAGS), $($(dep)_CFLAGS)))
22+
BUILD_DEPS = $(foreach dep, $(DEPENDENCIES), $(if $($(dep)_OBJ), $(dep)))
23+
LINKER_DEPS = $(foreach dep, $(DEPENDENCIES), $(if $($(dep)_LDFLAGS), $($(dep)_LDFLAGS)))
24+
LINKER_OBJS = $(foreach dep, $(DEPENDENCIES), $(if $($(dep)_OBJ), $($(dep)_OBJ)))
25+
BUILD_ALL = $(ARTIFACT_LIB)
26+
27+
ifeq ($(TEST), 1)
28+
ifeq ($($(ARTIFACT_VARS)_TESTING),1)
29+
CXX_SRC += $(CXX_SRCTEST)
30+
BUILD_ALL += $(ARTIFACT_TESTBIN)
31+
endif
32+
DEPENDENCIES += $(TEST_DEPENDENCIES)
33+
endif
34+
35+
ifeq ($(NO_DEPENDENCIES),1)
36+
BUILD_DEPS =
37+
endif
38+
39+
CXX_DEPS = $(foreach src,$(CXX_SRCMAIN) $(CXX_SRCTEST),$(patsubst %.cpp,$(ARTIFACT_BIN)/%.d,$(src)))
40+
CXX_DEPFILE = $(patsubst $(ARTIFACT_BIN)/%.d,%.cpp,$(@))
41+
CXX_DEPTARGET = $(patsubst $(ARTIFACT_BIN)/%.d,%.o,$(@))
42+
43+
.DEFAULT_GOAL = all
44+
.PHONY: compile depend dep_clean all install uninstall
45+
.PHONY: $(BUILD_DEPS)
46+
47+
compile: $(ARTIFACT_OBJ)
48+
49+
all: $(BUILD_ALL)
50+
51+
dep_clean:
52+
53+
$(CXX_DEPS): dep_clean
54+
@echo " dep [$(ARTIFACT_NAME)] $(CXX_DEPFILE)"
55+
@mkdir -p $(dir $(@))
56+
$(CXX) -MM -MT "\$$($(ARTIFACT_VARS)_BIN)/$(CXX_DEPTARGET)" -MF $(@) $(CXX_DEPFILE) $(CXXFLAGS) $(INCLUDE) $(CFLAGS_DEPS)
57+
58+
depend: $(CXX_DEPS)
59+
$(foreach dep,$(DEPENDENCIES) $(ARTIFACT_VARS),\
60+
$(if $($(dep)_INC), \
61+
$(eval SED_RULES += s/$(shell echo "$($(dep)_INC)" | sed "s/\\//\\\\\//g")/\$$$$\\($(dep)_INC\\)/g;)\
62+
)\
63+
$(if $($(dep)_BIN), \
64+
$(eval SED_RULES += s/$(shell echo "$($(dep)_BIN)" | sed "s/\\//\\\\\//g")/\\$$$$\\($(dep)_BIN\\)/g;)\
65+
)\
66+
)
67+
@cat $(CXX_DEPS) | sed -E "$(SED_RULES)" >Makefile.d
68+
69+
$(BUILD_DEPS):
70+
@echo "make $(notdir $($(@)_OBJ))"
71+
@$(MAKE) -s -C "$($(@)_PATH)" compile CONFIG="$(CONFIG)" NO_DEPENDENCIES="1"
72+
73+
$(ARTIFACT_OBJ): $(BUILD_DEPS) $(CXX_OBJ)
74+
@echo " $(LD) [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_OBJ))"
75+
@$(LD) -o $(ARTIFACT_OBJ) -r $(CXX_OBJ)
76+
77+
$(ARTIFACT_LIB): $(ARTIFACT_OBJ)
78+
@echo " $(CXX) [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_LIB))"
79+
@$(CXX) -o $(ARTIFACT_LIB) $(LINKER_OBJS) $(ARTIFACT_OBJ) $(SO_FLAGS) $(LINKER_DEPS)
80+
81+
$(ARTIFACT_TESTBIN): $(ARTIFACT_OBJ)
82+
@echo " $(CXX) [$(ARTIFACT_NAME)] $(notdir $(ARTIFACT_TESTBIN))"
83+
@$(CXX) -o $(ARTIFACT_TESTBIN) $(LINKER_OBJS) $(ARTIFACT_OBJ) $(EXE_FLAGS) $(LINKER_DEPS)
84+
85+
$(CXX_OBJ):
86+
@echo " $(CXX) [$(ARTIFACT_NAME)] $(CXX_FILE)"
87+
@mkdir -p $(dir $@)
88+
@$(CXX) -o $(@) -c $(CXX_FILE) -fPIC $(CXXFLAGS) $(ARTIFACT_MFLAGS) $(INCLUDE) $(CFLAGS_DEPS)
89+
90+
install: all
91+
@echo "Installing $($(ARTIFACT_VARS)_NAME)"
92+
@mkdir -p "$(DESTDIR)$(PREFIX)/include"
93+
@mkdir -p "$(DESTDIR)$(PREFIX)/lib"
94+
@cp -r $($(ARTIFACT_VARS)_INC)/* "$(DESTDIR)$(PREFIX)/include/"
95+
@echo $(INSTALL) $(ARTIFACT_LIB) -t "$(DESTDIR)$(PREFIX)/lib"
96+
@$(INSTALL) $(ARTIFACT_LIB) -t "$(DESTDIR)$(PREFIX)/lib"
97+
@ln -sf $(notdir $(ARTIFACT_LIB)) "$(DESTDIR)$(PREFIX)/lib/$($(ARTIFACT_VARS)_NAME)$(LIBRARY_EXT)"
98+
@echo "Install OK"
99+
100+
uninstall:
101+
@echo "Uninstalling $($(ARTIFACT_VARS)_NAME)"
102+
@-rm -f "$(DESTDIR)$(PREFIX)/lib/$(notdir $(ARTIFACT_LIB))"
103+
@-rm -f "$(DESTDIR)$(PREFIX)/lib/$($(ARTIFACT_VARS)_NAME)$(LIBRARY_EXT)"
104+
@echo rm -f $(CXX_INSTHEADERS)
105+
@-rm -f $(CXX_INSTHEADERS)
106+
@echo "Uninstall OK"
107+
108+
# Dependencies
109+
-include $(CURDIR)/Makefile.d

0 commit comments

Comments
 (0)