Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
matrix-org
Olm
Commits
509be1b1
Commit
509be1b1
authored
May 23, 2016
by
Mark Haines
Browse files
Put the .o files in separate directories so we can have both release and debug versions
parent
63265f10
Changes
1
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
509be1b1
...
...
@@ -2,13 +2,14 @@
# Make sure that the build directory exists.
# We can't check the build directory into git because it is empty.
BUILD_DIR
:=
$(
shell
mkdir
-p
build
;
echo
build
)
OPTIMIZE_FLAGS
?=
-g
-O3
TEST
_OPTIMIZE_FLAGS
?=
-g
-O0
BUILD_DIR
:=
$(
shell
mkdir
-p
build
/release build/debug build/javascript build/tests
;
echo
build
)
RELEASE_
OPTIMIZE_FLAGS
?=
-g
-O3
DEBUG
_OPTIMIZE_FLAGS
?=
-g
-O0
JS_OPTIMIZE_FLAGS
?=
-O3
CC
=
gcc
EMCC
=
emcc
TARGET
:=
$(BUILD_DIR)
/libolm.so
RELEASE_TARGET
:=
$(BUILD_DIR)
/libolm.so
DEBUG_TARGET
:=
$(BUILD_DIR)
/libolm_debug.so
JS_TARGET
:=
javascript/olm.js
JS_EXPORTED_FUNCTIONS
:=
javascript/exported_functions.json
...
...
@@ -16,13 +17,15 @@ JS_EXPORTED_FUNCTIONS := javascript/exported_functions.json
PUBLIC_HEADERS
:=
include/olm/olm.hh
SOURCES
:=
$(
wildcard
src/
*
.cpp
)
$(
wildcard
src/
*
.c
)
OBJECTS
:=
$(
patsubst
src/%,
$(BUILD_DIR)
/%,
$(
patsubst
%.c,%.o,
$(
patsubst
%.cpp,%.o,
$(SOURCES)
)))
RELEASE_OBJECTS
:=
$(
patsubst
src/%,
$(BUILD_DIR)
/release/%,
$(
patsubst
%.c,%.o,
$(
patsubst
%.cpp,%.o,
$(SOURCES)
)))
DEBUG_OBJECTS
:=
$(
patsubst
src/%,
$(BUILD_DIR)
/debug/%,
$(
patsubst
%.c,%.o,
$(
patsubst
%.cpp,%.o,
$(SOURCES)
)))
TEST_SOURCES
:=
$(
wildcard
tests/test_
*
.cpp
)
$(
wildcard
tests/test_
*
.c
)
TEST_BINARIES
:=
$(
patsubst
tests/%,
$(BUILD_DIR)
/%,
$(
patsubst
%.c,%,
$(
patsubst
%.cpp,%,
$(TEST_SOURCES)
)))
JS_OBJECTS
:=
$(
patsubst
%.
o
,%.js.bc,
$(
OBJECT
S)
)
TEST_BINARIES
:=
$(
patsubst
tests/%,
$(BUILD_DIR)
/
tests/
%,
$(
patsubst
%.c,%,
$(
patsubst
%.cpp,%,
$(TEST_SOURCES)
)))
JS_OBJECTS
:=
$(
patsubst
src/%,
$(BUILD_DIR)
/javascript/%,
$(
patsubst
%.
c
,%.js.bc,
$(
patsubst
%.cpp,%.js.bc,
$(SOURCE
S)
)
))
JS_PRE
:=
$(
wildcard
javascript/
*
pre.js
)
JS_POST
:=
$(
wildcard
javascript/
*
post.js
)
CPPFLAGS
+=
-Iinclude
-Ilib
CFLAGS
+=
-Wall
-std
=
c89
-fPIC
CXXFLAGS
+=
-Wall
-std
=
c++11
-fPIC
...
...
@@ -42,9 +45,13 @@ CPPFLAGS += -MMD
### per-target variables
$(OBJECTS)
:
CFLAGS += $(OPTIMIZE_FLAGS)
$(OBJECTS)
:
CXXFLAGS += $(OPTIMIZE_FLAGS)
$(TARGET)
:
LDFLAGS += $(OPTIMIZE_FLAGS)
$(RELEASE_OBJECTS)
:
CFLAGS += $(RELEASE_OPTIMIZE_FLAGS)
$(RELEASE_OBJECTS)
:
CXXFLAGS += $(RELEASE_OPTIMIZE_FLAGS)
$(RELEASE_TARGET)
:
LDFLAGS += $(RELEASE_OPTIMIZE_FLAGS)
$(DEBUG_OBJECTS)
:
CFLAGS += $(DEBUG_OPTIMIZE_FLAGS)
$(DEBUG_OBJECTS)
:
CXXFLAGS += $(DEBUG_OPTIMIZE_FLAGS)
$(DEBUG_TARGET)
:
LDFLAGS += $(DEBUG_OPTIMIZE_FLAGS)
$(TEST_BINARIES)
:
CPPFLAGS += -Itests/include
$(TEST_BINARIES)
:
LDFLAGS += $(TEST_OPTIMIZE_FLAGS) -L$(BUILD_DIR)
...
...
@@ -55,25 +62,35 @@ $(JS_TARGET): LDFLAGS += $(JS_OPTIMIZE_FLAGS)
### top-level targets
lib
:
$(TARGET)
lib
:
$(
RELEASE_
TARGET)
.PHONY
:
lib
$(TARGET)
:
$(OBJECTS)
$(RELEASE_TARGET)
:
$(RELEASE_OBJECTS)
$(CXX)
$(LDFLAGS)
--shared
-fPIC
\
-Wl
,--version-script,version_script.ver
\
$(OUTPUT_OPTION)
$(RELEASE_OBJECTS)
debug
:
$(DEBUG_TARGET)
.PHONY
:
debug
$(DEBUG_TARGET)
:
$(DEBUG_OBJECTS)
$(CXX)
$(LDFLAGS)
--shared
-fPIC
\
-Wl
,--version-script,version_script.ver
\
$(OUTPUT_OPTION)
$(OBJECTS)
-Wl
,--version-script,version_script.ver
\
$(OUTPUT_OPTION)
$(DEBUG_OBJECTS)
js
:
$(JS_TARGET)
.PHONY
:
js
$(JS_TARGET)
:
$(JS_OBJECTS) $(JS_PRE) $(JS_POST) $(JS_EXPORTED_FUNCTIONS)
$(EMCC_LINK)
\
--pre-js
$(JS_PRE)
--post-js
$(JS_POST)
\
-s
"EXPORTED_FUNCTIONS=@
$(JS_EXPORTED_FUNCTIONS)
"
\
--pre-js
$(JS_PRE)
--post-js
$(JS_POST)
\
-s
"EXPORTED_FUNCTIONS=@
$(JS_EXPORTED_FUNCTIONS)
"
\
$(JS_OBJECTS)
-o
$@
clean
:
;
rm
-rf
$(OBJECTS)
$(OBJECTS:.o=.d)
\
rm
-rf
$(RELEASE_OBJECTS)
$(RELEASE_OBJECTS:.o=.d)
\
$(DEBUG_OBJECTS)
$(DEBUG_OBJECTS:.o=.d)
\
$(TEST_BINARIES)
$(TEST_BINARIES:=.d)
\
$(JS_OBJECTS)
$(JS_OBJECTS:=.d)
$(JS_TARGET)
\
$(JS_EXPORTED_FUNCTIONS)
\
...
...
@@ -91,31 +108,38 @@ $(JS_EXPORTED_FUNCTIONS): $(PUBLIC_HEADERS)
perl
-MJSON
-ne
'/(olm_[^( ]*)\(/ && push @f, "_$$1"; END { print encode_json \@f }'
$^
>
$@
.tmp
mv
$@
.tmp
$@
all
:
test js lib
all
:
test js lib
debug
.PHONY
:
lib
### rules for building objects
$(BUILD_DIR)/%.o
:
src/%.c
$(BUILD_DIR)/release/%.o
:
src/%.c
$(COMPILE.c)
$(OUTPUT_OPTION)
$<
$(BUILD_DIR)/release/%.o
:
src/%.cpp
$(COMPILE.cc)
$(OUTPUT_OPTION)
$<
$(BUILD_DIR)/debug/%.o
:
src/%.c
$(COMPILE.c)
$(OUTPUT_OPTION)
$<
$(BUILD_DIR)/%.o
:
src/%.cpp
$(BUILD_DIR)/
debug/
%.o
:
src/%.cpp
$(COMPILE.cc)
$(OUTPUT_OPTION)
$<
$(BUILD_DIR)/%.js.bc
:
src/%.c
$(BUILD_DIR)/
javascript/
%.js.bc
:
src/%.c
$(EMCC.c)
$(OUTPUT_OPTION)
$<
$(BUILD_DIR)/%.js.bc
:
src/%.cpp
$(BUILD_DIR)/
javascript/
%.js.bc
:
src/%.cpp
$(EMCC.cc)
$(OUTPUT_OPTION)
$<
$(BUILD_DIR)/%
:
tests/%.c $(OBJECTS)
$(LINK.c)
$
<
$(OBJECTS)
$(LOADLIBES)
$(LDLIBS)
-o
$@
$(BUILD_DIR)/
tests/
%
:
tests/%.c $(
DEBUG_
OBJECTS)
$(LINK.c)
$
^
$(LOADLIBES)
$(LDLIBS)
-o
$@
$(BUILD_DIR)/%
:
tests/%.cpp $(OBJECTS)
$(LINK.cc)
$
<
$(OBJECTS)
$(LOADLIBES)
$(LDLIBS)
-o
$@
$(BUILD_DIR)/
tests/
%
:
tests/%.cpp $(
DEBUG_
OBJECTS)
$(LINK.cc)
$
^
$(LOADLIBES)
$(LDLIBS)
-o
$@
### dependencies
-include
$(OBJECTS:.o=.d)
-include
$(RELEASE_OBJECTS:.o=.d)
-include
$(DEBUG_OBJECTS:.o=.d)
-include
$(JS_OBJECTS:.bc=.d)
-include
$(TEST_BINARIES:=.d)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment