From 74f2f47cb63b02638270beecd20acea1a0f5665e Mon Sep 17 00:00:00 2001 From: Tim Foley Date: Wed, 27 Sep 2017 11:17:39 -0700 Subject: First attempt at a Linux build (#193) * First attempt at a Linux build - Fix up places where C++ idioms were written assuming lenient behavior of Microsoft's compiler - Add a few more alternatives for platform-specific behavior where Windows was the only platform accounted for. - Add a basic Makefile that can at least invoke our build, even if it isn't going good dependency tracking, etc. - Build `libslang.so` and `slangc` that depends on it, using a relative `RPATH` to make the binary portable (I hope) - Add an initial `.travis.yml` to see if we can trigger their build process. * Fixup: const bug in `List::Sort` I'm not clear why this gets picked up by the gcc *and* clang that Travis uses, but not the (newer) gcc I'm using on Ubuntu here, but I'm hoping it is just some missing `const` qualifiers. * Fixup: reorder specialization of "class info" Clang complains about things being specialized after being instantiated (implicilty), and I hope it is just the fact that I generate the class info for the roots of the hierarchy after the other cases. We'll see. * Fixup: add `platform.cpp` to unified/lumped build * Fixup: Windows uses `FreeLibrary` and not `UnloadLibrary` * Fixup: fix Windows project file to include new source file This obviously points to the fact that we are going to need to be generating these files sooner or later. --- slang.h | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'slang.h') diff --git a/slang.h b/slang.h index 7bb50983d..3a09a7cbc 100644 --- a/slang.h +++ b/slang.h @@ -1,17 +1,28 @@ #ifndef SLANG_H #define SLANG_H -#ifdef _MSC_VER -#ifdef SLANG_DYNAMIC_EXPORT -#define SLANG_API __declspec(dllexport) -#else -#ifdef SLANG_DYNAMIC -#define SLANG_API __declspec(dllimport) -#else -#define SLANG_API +#if defined(SLANG_DYNAMIC_EXPORT) + #if !defined(SLANG_DYNAMIC) + #define SLANG_DYNAMIC + #endif #endif + +#if defined(SLANG_DYNAMIC) + #if defined(_MSC_VER) + #ifdef SLANG_DYNAMIC_EXPORT + #define SLANG_API __declspec(dllexport) + #else + #define SLANG_API __declspec(dllimport) + #endif + #else + // TODO: need to consider compiler capabilities +// #ifdef SLANG_DYNAMIC_EXPORT + #define SLANG_API __attribute__((__visibility__("default"))) +// #endif + #endif #endif -#else + +#ifndef SLANG_API #define SLANG_API #endif @@ -19,6 +30,9 @@ #include #endif // ! SLANG_NO_INTTYPES +#ifndef SLANG_NO_STDDEF +#include +#endif // ! SLANG_NO_STDDEF #ifdef __cplusplus extern "C" @@ -1007,6 +1021,7 @@ namespace slang #ifdef SLANG_INCLUDE_IMPLEMENTATION +#include "source/core/platform.cpp" #include "source/core/slang-io.cpp" #include "source/core/slang-string.cpp" #include "source/core/stream.cpp" -- cgit v1.2.3