Skip to content

Commit cc40740

Browse files
authored
Merge pull request #657 from scratchcpp/fix_llvm_linking
Fix LLVM linking
2 parents 496eaa6 + 3076086 commit cc40740

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+554
-348
lines changed

CMakeLists.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,17 @@ target_sources(scratchcpp
8282

8383
include(FetchContent)
8484

85+
# Compiler options
86+
target_compile_options(scratchcpp PRIVATE
87+
-fvisibility=hidden
88+
-fvisibility-inlines-hidden
89+
)
90+
91+
target_link_options(scratchcpp PRIVATE
92+
-Wl,--exclude-libs,ALL
93+
-Wl,-Bsymbolic
94+
)
95+
8596
# zip
8697
include(build/zip.cmake)
8798
target_link_libraries(scratchcpp PRIVATE zip)
@@ -139,7 +150,11 @@ target_compile_definitions(scratchcpp PRIVATE LIBSCRATCHCPP_VERSION_MINOR=${PROJ
139150
target_compile_definitions(scratchcpp PRIVATE LIBSCRATCHCPP_VERSION_PATCH=${PROJECT_VERSION_PATCH})
140151

141152
# Unit tests
153+
target_link_libraries(scratchcpp PRIVATE scratchcpp-test-export)
154+
142155
if (LIBSCRATCHCPP_BUILD_UNIT_TESTS)
156+
target_compile_definitions(scratchcpp-test-export INTERFACE LIBSCRATCHCPP_TEST)
157+
143158
enable_testing()
144159
add_subdirectory(test)
145160
endif()

build/HunterPackages.cmake

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,47 @@ set(HUNTER_LLVM_VERSION 19.1.0)
1212
set(HUNTER_LLVM_CMAKE_ARGS
1313
LLVM_ENABLE_CRASH_OVERRIDES=OFF
1414
LLVM_ENABLE_ZLIB=OFF
15+
LLVM_ENABLE_ZSTD=OFF
16+
LLVM_ENABLE_TERMINFO=OFF
1517
LLVM_ENABLE_RTTI=ON
16-
LLVM_BUILD_EXAMPLES=OFF
18+
LLVM_BUILD_LLVM_DYLIB=OFF
19+
LLVM_BUILD_RUNTIME=OFF
20+
LLVM_BUILD_RUNTIMES=OFF
21+
LLVM_BUILD_TESTS=OFF
1722
LLVM_BUILD_TOOLS=OFF
18-
LLVM_BUILD_LLVM_DYLIB=ON
23+
LLVM_BUILD_UTILS=OFF
24+
LLVM_INCLUDE_BENCHMARKS=OFF
25+
LLVM_INCLUDE_DOCS=OFF
1926
LLVM_INCLUDE_EXAMPLES=OFF
27+
LLVM_INCLUDE_RUNTIMES=OFF
28+
LLVM_INCLUDE_TESTS=OFF
29+
LLVM_INCLUDE_TOOLS=FALSE
30+
LLVM_INCLUDE_UTILS=OFF
31+
LLVM_ENABLE_PLUGINS=OFF
32+
LLVM_ENABLE_BINDINGS=OFF
33+
LLVM_ENABLE_OCAMLDOC=OFF
34+
LLVM_BUILD_LLJIT=OFF
35+
LLVM_BUILD_ORC_JIT=OFF
36+
LLVM_TOOL_LTO_BUILD=OFF
37+
LLVM_TOOL_GOLD_BUILD=OFF
38+
LLVM_TOOL_BUGPOINT_BUILD=OFF
39+
LLVM_TOOL_CLANG_BUILD=OFF
40+
LLVM_TOOL_LLDB_BUILD=OFF
41+
LLVM_TOOL_LLI_BUILD=OFF
42+
LLVM_TOOL_LLVM_AR_BUILD=OFF
43+
LLVM_TOOL_LLVM_AS_BUILD=OFF
44+
LLVM_TOOL_LLVM_BCANALYZER_BUILD=OFF
45+
LLVM_TOOL_LLVM_CAT_BUILD=OFF
46+
LLVM_TOOL_LLVM_CFI_VERIFY_BUILD=OFF
47+
LLVM_TOOL_LLVM_CONFIG_BUILD=OFF
48+
LLVM_TOOL_LLVM_COV_BUILD=OFF
49+
LLVM_TOOL_LLVM_CVTRES_BUILD=OFF
50+
LLVM_TOOL_LLVM_EXTRACT_BUILD=OFF
51+
LLVM_TOOL_LLVM_LTO_BUILD=OFF
52+
LLVM_TOOL_LLVM_LINK_BUILD=OFF
53+
LLVM_TOOL_LLVM_SIZE_BUILD=OFF
54+
LLVM_TOOL_LLVM_STRINGS_BUILD=OFF
55+
LLVM_TOOL_LLVM_SYMBOLIZER_BUILD=OFF
2056
LLVM_TARGETS_TO_BUILD=host
2157
)
2258

include/scratchcpp/compiler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
#include "enum_bitmask.h"
1010
#include "spimpl.h"
1111

12+
#define BLOCK_EXPORT extern "C" LIBSCRATCHCPP_EXPORT
13+
1214
namespace libscratchcpp
1315
{
1416

include/scratchcpp/value_functions.h

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -48,55 +48,55 @@ inline constexpr Rgb rgba(int r, int g, int b, int a)
4848

4949
extern "C"
5050
{
51-
LIBSCRATCHCPP_EXPORT void value_free(ValueData *v);
52-
53-
LIBSCRATCHCPP_EXPORT void value_init(ValueData *v);
54-
55-
LIBSCRATCHCPP_EXPORT void value_assign_double(ValueData *v, double numberValue);
56-
LIBSCRATCHCPP_EXPORT void value_assign_bool(ValueData *v, bool boolValue);
57-
LIBSCRATCHCPP_EXPORT void value_assign_string(ValueData *v, const std::string &stringValue);
58-
LIBSCRATCHCPP_EXPORT void value_assign_cstring(ValueData *v, const char *stringValue);
59-
LIBSCRATCHCPP_EXPORT void value_assign_stringPtr(ValueData *v, const StringPtr *stringValue);
60-
LIBSCRATCHCPP_EXPORT void value_assign_pointer(ValueData *v, const void *pointerValue);
61-
LIBSCRATCHCPP_EXPORT void value_assign_copy(ValueData *v, const ValueData *another);
62-
63-
LIBSCRATCHCPP_EXPORT bool value_isInfinity(const ValueData *v);
64-
LIBSCRATCHCPP_EXPORT bool value_isNegativeInfinity(const ValueData *v);
65-
LIBSCRATCHCPP_EXPORT bool value_isNaN(const ValueData *v);
66-
LIBSCRATCHCPP_EXPORT bool value_isNumber(const ValueData *v);
67-
LIBSCRATCHCPP_EXPORT bool value_isValidNumber(const ValueData *v);
68-
LIBSCRATCHCPP_EXPORT bool value_isInt(const ValueData *v);
69-
LIBSCRATCHCPP_EXPORT bool value_isBool(const ValueData *v);
70-
LIBSCRATCHCPP_EXPORT bool value_isString(const ValueData *v);
71-
LIBSCRATCHCPP_EXPORT bool value_isPointer(const ValueData *v);
72-
73-
LIBSCRATCHCPP_EXPORT long value_toLong(const ValueData *v);
74-
LIBSCRATCHCPP_EXPORT int value_toInt(const ValueData *v);
75-
LIBSCRATCHCPP_EXPORT double value_toDouble(const ValueData *v);
76-
LIBSCRATCHCPP_EXPORT bool value_toBool(const ValueData *v);
77-
LIBSCRATCHCPP_EXPORT void value_toString(const ValueData *v, std::string *dst);
78-
LIBSCRATCHCPP_EXPORT void value_toStringPtr(const ValueData *v, StringPtr *dst);
79-
LIBSCRATCHCPP_EXPORT void value_toUtf16(const ValueData *v, std::u16string *dst);
80-
LIBSCRATCHCPP_EXPORT Rgb value_toRgba(const ValueData *v);
81-
LIBSCRATCHCPP_EXPORT const void *value_toPointer(const ValueData *v);
82-
83-
LIBSCRATCHCPP_EXPORT bool value_doubleIsInt(double v);
84-
85-
LIBSCRATCHCPP_EXPORT void value_doubleToStringPtr(double v, StringPtr *dst);
86-
LIBSCRATCHCPP_EXPORT const StringPtr *value_boolToStringPtr(bool v);
87-
LIBSCRATCHCPP_EXPORT double value_stringToDouble(const StringPtr *s);
88-
LIBSCRATCHCPP_EXPORT double value_stringToDoubleWithCheck(const StringPtr *s, bool *ok);
89-
LIBSCRATCHCPP_EXPORT bool value_stringToBool(const StringPtr *s);
90-
91-
LIBSCRATCHCPP_EXPORT void value_add(const ValueData *v1, const ValueData *v2, ValueData *dst);
92-
LIBSCRATCHCPP_EXPORT void value_subtract(const ValueData *v1, const ValueData *v2, ValueData *dst);
93-
LIBSCRATCHCPP_EXPORT void value_multiply(const ValueData *v1, const ValueData *v2, ValueData *dst);
94-
LIBSCRATCHCPP_EXPORT void value_divide(const ValueData *v1, const ValueData *v2, ValueData *dst);
95-
LIBSCRATCHCPP_EXPORT void value_mod(const ValueData *v1, const ValueData *v2, ValueData *dst);
96-
97-
LIBSCRATCHCPP_EXPORT bool value_equals(const ValueData *v1, const ValueData *v2);
98-
LIBSCRATCHCPP_EXPORT bool value_greater(const ValueData *v1, const ValueData *v2);
99-
LIBSCRATCHCPP_EXPORT bool value_lower(const ValueData *v1, const ValueData *v2);
51+
void value_free(ValueData *v);
52+
53+
void value_init(ValueData *v);
54+
55+
void value_assign_double(ValueData *v, double numberValue);
56+
void value_assign_bool(ValueData *v, bool boolValue);
57+
void value_assign_string(ValueData *v, const std::string &stringValue);
58+
void value_assign_cstring(ValueData *v, const char *stringValue);
59+
void value_assign_stringPtr(ValueData *v, const StringPtr *stringValue);
60+
void value_assign_pointer(ValueData *v, const void *pointerValue);
61+
void value_assign_copy(ValueData *v, const ValueData *another);
62+
63+
bool value_isInfinity(const ValueData *v);
64+
bool value_isNegativeInfinity(const ValueData *v);
65+
bool value_isNaN(const ValueData *v);
66+
bool value_isNumber(const ValueData *v);
67+
bool value_isValidNumber(const ValueData *v);
68+
bool value_isInt(const ValueData *v);
69+
bool value_isBool(const ValueData *v);
70+
bool value_isString(const ValueData *v);
71+
bool value_isPointer(const ValueData *v);
72+
73+
long value_toLong(const ValueData *v);
74+
int value_toInt(const ValueData *v);
75+
double value_toDouble(const ValueData *v);
76+
bool value_toBool(const ValueData *v);
77+
void value_toString(const ValueData *v, std::string *dst);
78+
void value_toStringPtr(const ValueData *v, StringPtr *dst);
79+
void value_toUtf16(const ValueData *v, std::u16string *dst);
80+
Rgb value_toRgba(const ValueData *v);
81+
const void *value_toPointer(const ValueData *v);
82+
83+
bool value_doubleIsInt(double v);
84+
85+
void value_doubleToStringPtr(double v, StringPtr *dst);
86+
const StringPtr *value_boolToStringPtr(bool v);
87+
double value_stringToDouble(const StringPtr *s);
88+
double value_stringToDoubleWithCheck(const StringPtr *s, bool *ok);
89+
bool value_stringToBool(const StringPtr *s);
90+
91+
void value_add(const ValueData *v1, const ValueData *v2, ValueData *dst);
92+
void value_subtract(const ValueData *v1, const ValueData *v2, ValueData *dst);
93+
void value_multiply(const ValueData *v1, const ValueData *v2, ValueData *dst);
94+
void value_divide(const ValueData *v1, const ValueData *v2, ValueData *dst);
95+
void value_mod(const ValueData *v1, const ValueData *v2, ValueData *dst);
96+
97+
bool value_equals(const ValueData *v1, const ValueData *v2);
98+
bool value_greater(const ValueData *v1, const ValueData *v2);
99+
bool value_lower(const ValueData *v1, const ValueData *v2);
100100
}
101101

102102
} // namespace libscratchcpp

src/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ target_sources(scratchcpp
1111
rect_p.h
1212
)
1313

14+
add_library(scratchcpp-test-export
15+
INTERFACE
16+
test_export.h
17+
)
18+
19+
target_include_directories(scratchcpp-test-export INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
20+
1421
add_subdirectory(blocks)
1522
add_subdirectory(engine)
1623
add_subdirectory(internal)

src/audio/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ if (LIBSCRATCHCPP_AUDIO_SUPPORT)
1515
target_compile_definitions(scratchcpp-audio PUBLIC LIBSCRATCHCPP_AUDIO_SUPPORT)
1616
endif()
1717

18+
target_link_libraries(scratchcpp-audio PRIVATE scratchcpp-test-export)
19+
1820
target_sources(scratchcpp-audio
1921
PUBLIC
2022
iaudioengine.h

src/audio/audioinput.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22

33
#pragma once
44

5-
#include <memory>
6-
75
#include "iaudioinput.h"
6+
#include "test_export.h"
87

98
namespace libscratchcpp
109
{
1110

12-
class AudioInput : public IAudioInput
11+
class LIBSCRATCHCPP_TEST_EXPORT AudioInput : public IAudioInput
1312
{
1413
public:
1514
AudioInput();

src/audio/audiooutput.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
#pragma once
44

55
#include "iaudiooutput.h"
6+
#include "test_export.h"
67

78
namespace libscratchcpp
89
{
910

10-
class AudioOutput : public IAudioOutput
11+
class LIBSCRATCHCPP_TEST_EXPORT AudioOutput : public IAudioOutput
1112
{
1213
public:
1314
AudioOutput();

src/audio/iaudioengine.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
#pragma once
44

5-
#include <memory>
5+
#include "test_export.h"
66

77
namespace libscratchcpp
88
{
99

10-
class IAudioEngine
10+
class LIBSCRATCHCPP_TEST_EXPORT IAudioEngine
1111
{
1212
public:
1313
virtual ~IAudioEngine() { }

src/audio/internal/audioengine.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
#pragma once
44

5-
#include <memory>
6-
75
#include "../iaudioengine.h"
86

97
struct ma_engine;
@@ -12,7 +10,7 @@ namespace libscratchcpp
1210
{
1311

1412
// This is a singleton which initializes and uninitializes the miniaudio engine
15-
class AudioEngine : public IAudioEngine
13+
class LIBSCRATCHCPP_TEST_EXPORT AudioEngine : public IAudioEngine
1614
{
1715
public:
1816
AudioEngine();

0 commit comments

Comments
 (0)