Skip to content

Commit 65a9ffd

Browse files
authored
Add OpenCSG as a submodule (optional). (openscad#4596)
`cmake -DUSE_BUILTIN_OPENCSG=ON` now builds OpenCSG from a submodule rather than looking for it on the system.
1 parent 484335f commit 65a9ffd

File tree

7 files changed

+69
-6
lines changed

7 files changed

+69
-6
lines changed

.github/workflows/manual.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ on:
5959
description: 'Enable UBSAN'
6060
required: false
6161
default: false
62+
use_builtin_opencsg:
63+
type: boolean
64+
description: 'Use built-in OpenCSG'
65+
required: false
66+
default: false
6267
jobs:
6368
build:
6469
runs-on: ubuntu-latest
@@ -108,7 +113,7 @@ jobs:
108113
python-version: '3.11'
109114
- name: Build
110115
run: |
111-
cmake ${CMAKE_EXTRA} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DEXPERIMENTAL=${{ inputs.enable_experimental }} -DUSE_MIMALLOC=${{ inputs.use_mimalloc }} -DSANITIZE_MEMORY=${{ inputs.enable_msan }} -DSANITIZE_ADDRESS=${{ inputs.enable_asan }} -DSANITIZE_THREAD=${{ inputs.enable_tsan }} -DSANITIZE_UNDEFINED=${{ inputs.enable_ubsan }} -B b .
116+
cmake ${CMAKE_EXTRA} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DEXPERIMENTAL=${{ inputs.enable_experimental }} -DUSE_MIMALLOC=${{ inputs.use_mimalloc }} -DSANITIZE_MEMORY=${{ inputs.enable_msan }} -DSANITIZE_ADDRESS=${{ inputs.enable_asan }} -DSANITIZE_THREAD=${{ inputs.enable_tsan }} -DSANITIZE_UNDEFINED=${{ inputs.enable_ubsan }} -DUSE_BUILTIN_OPENCSG=${{ inputs.use_builtin_opencsg }} -B b .
112117
cmake --build b -j 2
113118
echo "Build exit code: $?"
114119
- name: Test

.gitmodules

+3
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@
1010
[submodule "sanitizers-cmake"]
1111
path = submodules/sanitizers-cmake
1212
url = https://github.com/arsenm/sanitizers-cmake.git
13+
[submodule "OpenCSG"]
14+
path = submodules/OpenCSG
15+
url = https://github.com/openscad/OpenCSG.git

CMakeLists.txt

+22-5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ option(PROFILE "Enable compiling with profiling / test coverage instrumentation"
4141
option(MXECROSS "Enable setup for MXE cross platform build" OFF)
4242
option(OFFLINE_DOCS "Download Documentation for offline usage" OFF)
4343
option(USE_MIMALLOC "Use mimalloc as malloc replacement." ON)
44+
option(USE_BUILTIN_OPENCSG "Use OpenCSG from submodule." OFF)
4445
option(USE_CCACHE "Use ccache to speed up compilation." ON)
4546
option(ENABLE_CAIRO "Enable support for cairo vector graphics library." ON)
4647
option(ENABLE_SPNAV "Enable support for libspnav input driver." ON)
@@ -185,9 +186,21 @@ macro(find_graphics)
185186
if(NULLGL)
186187
target_compile_definitions(OpenSCAD PRIVATE NULLGL)
187188
else()
188-
find_package(OpenCSG REQUIRED QUIET)
189-
target_link_libraries(OpenSCAD PRIVATE ${OPENCSG_LIBRARY})
190-
message(STATUS "OpenCSG: ${OPENCSG_VERSION_STRING}")
189+
if(NOT USE_BUILTIN_OPENCSG)
190+
find_package(OpenCSG REQUIRED QUIET)
191+
target_link_libraries(OpenSCAD PRIVATE ${OPENCSG_LIBRARY})
192+
message(STATUS "OpenCSG: ${OPENCSG_VERSION_STRING}")
193+
if(MSVC)
194+
find_path(OPENCSG_INCLUDE_DIRS opencsg/opencsg.h)
195+
target_include_directories(OpenSCAD SYSTEM PRIVATE "${OPENCSG_INCLUDE_DIRS}/opencsg")
196+
else()
197+
find_path(OPENCSG_INCLUDE_DIRS opencsg.h)
198+
target_include_directories(OpenSCAD SYSTEM PRIVATE ${OPENCSG_INCLUDE_DIRS})
199+
endif()
200+
else()
201+
target_link_libraries(OpenSCAD PRIVATE OpenCSG)
202+
message(STATUS "OpenCSG: <submodule>")
203+
endif()
191204
target_compile_definitions(OpenSCAD PRIVATE ENABLE_OPENCSG)
192205

193206
find_package(GLEW REQUIRED QUIET)
@@ -409,6 +422,10 @@ if(NOT MSVC)
409422
endif()
410423
endif()
411424

425+
if(USE_BUILTIN_OPENCSG)
426+
include("submodules/CMakeLists-OpenCSG.txt")
427+
endif(USE_BUILTIN_OPENCSG)
428+
412429
# Automatically add the current source and build directories to the include path.
413430
set(CMAKE_INCLUDE_CURRENT_DIR ON) # (does not propagate down to subdirectories)
414431

@@ -564,8 +581,8 @@ elseif(UNIX)
564581
set(OFFSCREEN_METHOD "Unix GLX on X11")
565582
message(STATUS "Offscreen OpenGL Context - using Unix GLX on X11")
566583
set(PLATFORM_SOURCES ${PLATFORM_SOURCES} src/glview/offscreen-old/OffscreenContextGLX.cc)
567-
find_library(X11_LIBRARY X11)
568-
target_link_libraries(OpenSCAD PRIVATE ${X11_LIBRARY})
584+
find_package(X11 REQUIRED)
585+
target_link_libraries(OpenSCAD PRIVATE X11::X11)
569586
endif()
570587
endif()
571588
elseif(WIN32)

cmake/Modules/info.cmake

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ message(STATUS "Headless build: ${HEADLESS}")
5050
message(STATUS "NULLGL build: ${NULLGL}")
5151
message(STATUS "Profiling/coverage: ${PROFILE}")
5252
message(STATUS "Use mimalloc: ${USE_MIMALLOC}")
53+
message(STATUS "Use built-in OpenCSG: ${USE_BUILTIN_OPENCSG}")
5354
message(STATUS "CSG node id-prefix: ${IDPREFIX}")
5455
message(STATUS "Offline documentation: ${OFFLINE_DOCS}")
5556
message(STATUS " ")

submodules/CMakeLists-OpenCSG.txt

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
set(USE_PBUFFER 1)
2+
if (USE_PBUFFER)
3+
set(PBUFFER_SOURCES
4+
submodules/OpenCSG/src/pBufferTexture.cpp
5+
submodules/OpenCSG/RenderTexture/RenderTexture.cpp
6+
)
7+
endif(USE_PBUFFER)
8+
9+
set(OPENCSG_SOURCES
10+
submodules/OpenCSG/src/area.cpp
11+
submodules/OpenCSG/src/batch.cpp
12+
submodules/OpenCSG/src/context.cpp
13+
submodules/OpenCSG/src/channelManager.cpp
14+
submodules/OpenCSG/src/frameBufferObject.cpp
15+
submodules/OpenCSG/src/frameBufferObjectExt.cpp
16+
submodules/OpenCSG/src/occlusionQuery.cpp
17+
submodules/OpenCSG/src/opencsgRender.cpp
18+
submodules/OpenCSG/src/openglHelper.cpp
19+
submodules/OpenCSG/src/primitive.cpp
20+
submodules/OpenCSG/src/primitiveHelper.cpp
21+
submodules/OpenCSG/src/renderGoldfeather.cpp
22+
submodules/OpenCSG/src/renderSCS.cpp
23+
submodules/OpenCSG/src/scissorMemo.cpp
24+
submodules/OpenCSG/src/settings.cpp
25+
submodules/OpenCSG/src/stencilManager.cpp
26+
${PBUFFER_SOURCES}
27+
)
28+
29+
add_library(OpenCSGObjects OBJECT ${OPENCSG_SOURCES})
30+
target_include_directories(OpenCSGObjects PRIVATE OpenCSG submodules/OpenCSG submodules/OpenCSG/include)
31+
target_link_libraries(OpenCSGObjects PRIVATE GLEW::glew)
32+
33+
add_library(OpenCSG INTERFACE)
34+
target_include_directories(OpenCSG INTERFACE submodules/OpenCSG/include)
35+
target_sources(OpenCSG INTERFACE $<TARGET_OBJECTS:OpenCSGObjects>)

submodules/OpenCSG

Submodule OpenCSG added at 7b24d76

submodules/OpenCSG.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
7b24d76 OpenCSG 1.5.1

0 commit comments

Comments
 (0)