summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2017-09-29 13:43:08 -0700
committerGitHub <noreply@github.com>2017-09-29 13:43:08 -0700
commit8a0ebb9fa25fd44def17b03b3f8aa1a33ad77940 (patch)
tree3f855c1f8057e53763cb083c3b898effb559b80b /Makefile
parent74f2f47cb63b02638270beecd20acea1a0f5665e (diff)
Get tests running/passing under Linux (#194)
* Get tests running/passing under Linux - Fix up `dlopen` abstraction - Fix up some test cases to request hlsl (rather than default to dxbc) so they can run on non-Windows targets - Fix up test runner ignore tests that can't run on current platform (and not count those as failure) - Fix file handle leeak in process spawner absttraction - Get additional test-related applications building - More tweaks to Travis script; in theory deployment is set up now (yeah, right) * fixup * fixup: Travis environment variable syntax * fixup: Buffer->begin * fixup: actually run full tests on one config * fixup: add build status badge for Travis
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile82
1 files changed, 70 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index 138322165..404432b81 100644
--- a/Makefile
+++ b/Makefile
@@ -9,10 +9,21 @@
# or track fine-grained dependencies, so almost any source change will
# trigger a full rebuild. Anybody who wants to do their active development
# on a platform supported by this Makefile should feel free to contribute
-# improvements, with the caveat that we will not be adoptttting autoconf,
-# CMake, or any other build system that has a tendency to "infect" a codebbbase.
+# improvements, with the caveat that we will not be adopting autoconf,
+# CMake, or any other build system that has a tendency to "infect" a codebase.
#
+PLATFORM := $(shell uname -s | tr '[:upper:]' '[:lower:]')
+ARCHITECTURE := $(shell uname -p)
+
+ifeq (,$(CONFIGURATION))
+ CONFIGURATION := release
+endif
+
+ifeq (,$(SLANG_TEST_CATEGORY))
+ SLANG_TEST_CATEGORY := full
+endif
+
#
# The Windows build (using Visual Studio) tries to output things to
# directories that take the target platform (and build configuration) into
@@ -20,8 +31,7 @@
# "triple" from the compiler (which we assume is either gcc or clang) and
# call that our target "platformm"
#
-TARGET := $(shell $(CXX) -dumpmachine)
-
+TARGET := $(PLATFORM)-$(ARCHITECTURE)
#
# TODO: We need a way to control the "configuration" (debug vs. release)
# but for now just geting *something* working will be a good start.
@@ -32,8 +42,8 @@ TARGET := $(shell $(CXX) -dumpmachine)
# the target platform chosen. If we ever have steps that need to
# output intermediate files, we'd set up the directory here.
#
-OUTPUTDIR := bin/$(TARGET)/
-INTERMEDIATEDIR := intermediate/$(TARGET)/
+OUTPUTDIR := bin/$(TARGET)/$(CONFIGURATION)/
+INTERMEDIATEDIR := intermediate/$(TARGET)/$(CONFIGURATION)/
#
# Now we will start defining a bunch of variables for build
@@ -48,10 +58,17 @@ BIN_SUFFIX :=
# Note: we set `visibility=hidden` to avoid exporting more symbols than
# we really need.
CFLAGS := -std=c++11 -fvisibility=hidden
+CFLAGS += -I.
LDFLAGS := -L$(OUTPUTDIR)
SHARED_LIB_LDFLAGS := -shared
SHARED_LIB_CFLAGS := -fPIC
+ifeq (debug,$(CONFIGURATION))
+CFLAGS += -g
+else
+CFLAGS += -O2
+endif
+
# Make sure that shared library inherits build flags
# from the default case.
SHARED_LIB_LDFLAGS += $(LDFLAGS)
@@ -74,11 +91,40 @@ CORE_HEADERS := source/core/*.h
SLANG_SOURCES := source/slang/*.cpp
SLANG_HEADERS := slang.h source/slang/*.h
+#
SLANG_SOURCES += $(CORE_SOURCES)
SLANG_HEADERS += $(CORE_HEADERS)
SLANGC_SOURCES := source/slangc/*.cpp
SLANGC_HEADERS := $(SLANG_HEADERS)
+#
+SLANGC_SOURCES += $(CORE_SOURCES)
+
+SLANG_GLSLANG_SOURCES := source/slang-glslang/*.cpp
+SLANG_GLSLANG_HEADERS := source/slang-glslang/*.h
+
+SLANG_EVAL_TEST_SOURCES := tools/eval-test/*.cpp
+SLANG_EVAL_TEST_HEADERS :=
+
+# Add `glslang` sources to the build or `slang-glslang`
+#
+# Note: We aren't going to wasttte time trying to work with
+# the existing CMake-based build for `glslang`.
+#
+SLANG_GLSLANG_SOURCES += \
+ external/glslang/OGLCompilersDLL/*.cpp \
+ external/glslang/SPIRV/*.cpp \
+ external/glslang/glslang/GenericCodeGen/*.cpp \
+ external/glslang/glslang/MachineIndependent/*.cpp \
+ external/glslang/glslang/MachineIndependent/preprocessor/*.cpp \
+ external/glslang/glslang/OSDependent/Unix/*.cpp
+
+
+SLANG_TEST_SOURCES := tools/slang-test/*.cpp
+SLANG_TEST_HEADERS := tools/slang-test/*.h
+#
+SLANG_TEST_SOURCES += $(CORE_SOURCES)
+SLANG_TEST_HEADERS += $(CORE_HEADERS)
#
# Each project will have a variable that is an alias for
@@ -86,31 +132,43 @@ SLANGC_HEADERS := $(SLANG_HEADERS)
#
SLANG := $(OUTPUTDIR)$(SHARED_LIB_PREFIX)slang$(SHARED_LIB_SUFFIX)
SLANGC := $(OUTPUTDIR)slangc$(BIN_SUFFIX)
+SLANG_GLSLANG := $(OUTPUTDIR)$(SHARED_LIB_PREFIX)slang-glslang$(SHARED_LIB_SUFFIX)
+SLANG_TEST := $(OUTPUTDIR)slang-test$(BIN_SUFFIX)
+SLANG_EVAL_TEST := $(OUTPUTDIR)slang-eval-test$(BIN_SUFFIX)
# By default, when the user invokes `make`, we will build the
# `slang` shared library, and the `slangc` front-end application.
-all: slang slangc
+all: slang slang-glslang slangc slang-test slang-eval-test
mkdirs: $(OUTPUTDIR)
# Project-specific targets depend on making theappropriate binary.
slang: mkdirs $(SLANG)
slangc: mkdirs $(SLANGC)
-
+slang-glslang: mkdirs $(SLANG_GLSLANG)
+slang-test: mkdirs $(SLANG_TEST)
+slang-eval-test: mkdirs $(SLANG_EVAL_TEST)
$(SLANG): $(SLANG_SOURCES) $(SLANG_HEADERS)
- $(CXX) $(SHARED_LIB_LDFLAGS) -o $@ -DSLANG_DYNAMIC_EXPORT $(SHARED_LIB_CFLAGS) $(SLANG_SOURCES)
+ $(CXX) $(SHARED_LIB_LDFLAGS) -o $@ -DSLANG_DYNAMIC_EXPORT $(SHARED_LIB_CFLAGS) $(SLANG_SOURCES) -ldl $(RELATIVE_RPATH_INCANTATION)
$(SLANGC): $(SLANGC_SOURCES) $(SLANGC_HEADERS) $(SLANG)
- $(CXX) $(LDFLAGS) -o $@ $(CFLAGS) $(SLANGC_SOURCES) $(CORE_SOURCES) -ldl $(RELATIVE_RPATH_INCANTATION) -lslang
+ $(CXX) $(LDFLAGS) -o $@ $(CFLAGS) $(SLANGC_SOURCES) -ldl $(RELATIVE_RPATH_INCANTATION) -lslang
+
+$(SLANG_GLSLANG): $(SLANG_GLSLANG_SOURCES) $(SLANG_GLSLANG_HEADERS)
+ $(CXX) $(SHARED_LIB_LDFLAGS) -pthread -o $@ -Iexternal/glslang/ $(SHARED_LIB_CFLAGS) $(SLANG_GLSLANG_SOURCES)
+$(SLANG_TEST): $(SLANG_TEST_SOURCES) $(SLANG_TEST_HEADERS) $(SLANG)
+ $(CXX) $(LDFLAGS) -o $@ $(CFLAGS) $(SLANG_TEST_SOURCES) -ldl $(RELATIVE_RPATH_INCANTATION) -lslang
+$(SLANG_EVAL_TEST): $(SLANG_EVAL_TEST_SOURCES) $(SLANG)
+ $(CXX) $(LDFLAGS) -o $@ $(CFLAGS) $(SLANG_EVAL_TEST_SOURCES) $(RELATIVE_RPATH_INCANTATION) -lslang
$(OUTPUTDIR):
mkdir -p $(OUTPUTDIR)
-test:
- # TODO need to actually run the test runner
+test: $(SLANG_TEST) $(SLANG_EVAL_TEST)
+ $(SLANG_TEST) -bindir $(OUTPUTDIR) -category $(SLANG_TEST_CATEGORY)
clean:
rm -rf $(OUTPUTDIR)