Skip to content

Commit

Permalink
Main binary is now buildable with CMake
Browse files Browse the repository at this point in the history
Enable the '-z defs' linker which detects undefined symbols in shared objects,
and used this information to add the required link options to our shared
libraries. Because these link options are declared PUBLIC in CMake, they
automatically propagate through to whatever links against the built library, so
we don't need to manually repeat all of the link options when building the main
binary.

Also added some missing source files, including CPP files in subdirectories of
wxutil, and the PicoModel C files in radiantcore.

C++ standard version is increased to 17 to allow for std::filesystem; if this
proves problematic the fallback to boost::filesystem can be brought across from
the Automake build system.
  • Loading branch information
Matthew Mott committed Dec 4, 2020
1 parent bd69224 commit a151ee8
Show file tree
Hide file tree
Showing 8 changed files with 240 additions and 4 deletions.
23 changes: 20 additions & 3 deletions CMakeLists.txt
Expand Up @@ -4,26 +4,42 @@ cmake_minimum_required(VERSION 3.12)
project(darkradiant VERSION 2.9.2)

# C++ standard
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# Build shared libraries by default
option(BUILD_SHARED_LIBS "Build shared libraries" ON)

# Define GNU-style directory structure by default, and pass directories to the
# code with defines
include(GNUInstallDirs)
add_compile_definitions(LOCALEDIR="${CMAKE_INSTALL_FULL_LOCALEDIR}")

# Locate system packages
include(FindPkgConfig)
pkg_check_modules(XML libxml-2.0 REQUIRED)
pkg_check_modules(SIGC sigc++-2.0 REQUIRED)
pkg_check_modules(FTGL ftgl REQUIRED)
pkg_check_modules(FREETYPE freetype2 REQUIRED)
pkg_check_modules(XML libxml-2.0 REQUIRED)
pkg_check_modules(GL gl REQUIRED)
pkg_check_modules(GLEW glew REQUIRED)
pkg_check_modules(JPEG libjpeg REQUIRED)
pkg_check_modules(PNG libpng REQUIRED)

# Locate wxWidgets
find_package(wxWidgets REQUIRED COMPONENTS base)
find_package(wxWidgets REQUIRED
COMPONENTS base core stc adv gl xrc)
message("Using wxWidgets file ${wxWidgets_USE_FILE}")
include(${wxWidgets_USE_FILE})

# Global includes and flags
include_directories(libs libs/libfmt include)
add_compile_definitions(POSIX WXINTL_NO_GETTEXT_MACRO)
add_compile_definitions(POSIX
WXINTL_NO_GETTEXT_MACRO
FMT_HEADER_ONLY
HAVE_STD_FILESYSTEM)
add_link_options(LINKER:-z,defs)

# Supporting libraries
add_subdirectory(libs/math)
Expand All @@ -34,3 +50,4 @@ add_subdirectory(libs/module)

# Main radiant components
add_subdirectory(radiantcore)
add_subdirectory(radiant)
1 change: 1 addition & 0 deletions libs/module/CMakeLists.txt
Expand Up @@ -4,3 +4,4 @@ add_library(module
DynamicLibrary.cpp
StaticModule.cpp)
target_compile_options(module PUBLIC ${SIGC_CFLAGS})
target_link_libraries(module PUBLIC dl)
1 change: 1 addition & 0 deletions libs/scene/CMakeLists.txt
Expand Up @@ -9,3 +9,4 @@ add_library(scenegraph
TraversableNodeSet.cpp
Traverse.cpp)
target_compile_options(scenegraph PUBLIC ${SIGC_CFLAGS})
target_link_libraries(scenegraph PUBLIC ${SIGC_LIBRARIES} math)
21 changes: 20 additions & 1 deletion libs/wxutil/CMakeLists.txt
@@ -1,22 +1,41 @@
add_library(wxutil
ConsoleView.cpp
dialog/DialogBase.cpp
dialog/Dialog.cpp
dialog/MessageBox.cpp
DirChooser.cpp
EntityClassChooser.cpp
FileChooser.cpp
FreezePointer.cpp
GLFont.cpp
GLWidget.cpp
KeyValueTable.cpp
menu/PopupMenu.cpp
ModalProgressDialog.cpp
MouseToolHandler.cpp
PanedPosition.cpp
PathEntry.cpp
preview/GuiRenderer.cpp
preview/GuiView.cpp
preview/ModelPreview.cpp
preview/ParticlePreview.cpp
preview/RenderPreview.cpp
SerialisableWidgets.cpp
SourceView.cpp
Splitter.cpp
TreeModel.cpp
TreeModelFilter.cpp
TreeView.cpp
VFSTreePopulator.cpp
WindowPosition.cpp)
WindowPosition.cpp
window/TransientWindow.cpp)
target_compile_options(wxutil PUBLIC ${SIGC_CFLAGS} ${FTGL_CFLAGS})
target_link_libraries(wxutil PUBLIC
math
scenegraph
xmlutil
${wxWidgets_LIBRARIES}
${SIGC_LIBRARIES}
${FTGL_LIBRARIES}
${GLEW_LIBRARIES}
${GL_LIBRARIES})
1 change: 1 addition & 0 deletions libs/xmlutil/CMakeLists.txt
@@ -1,3 +1,4 @@
add_library(xmlutil
Document.cpp Node.cpp)
target_compile_options(xmlutil PUBLIC ${XML_CFLAGS})
target_link_libraries(xmlutil PUBLIC ${XML_LIBRARIES})
169 changes: 169 additions & 0 deletions radiant/CMakeLists.txt
@@ -0,0 +1,169 @@
add_executable(darkradiant
camera/CameraSettings.cpp
camera/CamWnd.cpp
camera/FloatingCamWnd.cpp
camera/GlobalCameraWndManager.cpp
clipboard/ClipboardModule.cpp
eventmanager/Accelerator.cpp
eventmanager/EventManager.cpp
eventmanager/GlobalKeyEventFilter.cpp
eventmanager/MouseToolGroup.cpp
eventmanager/MouseToolManager.cpp
eventmanager/Statement.cpp
eventmanager/Toggle.cpp
eventmanager/WidgetToggle.cpp
log/Console.cpp
main.cpp
map/AutoSaver.cpp
map/StartupMapLoader.cpp
precompiled.cpp
RadiantApp.cpp
render/OpenGLModule.cpp
selection/ManipulateMouseTool.cpp
selection/SelectionMouseTools.cpp
settings/LocalisationModule.cpp
settings/LocalisationProvider.cpp
settings/Win32Registry.cpp
textool/item/BrushItem.cpp
textool/item/FaceItem.cpp
textool/item/FaceVertexItem.cpp
textool/item/PatchItem.cpp
textool/item/PatchVertexItem.cpp
textool/TexTool.cpp
textool/TexToolItem.cpp
ui/aas/AasControl.cpp
ui/aas/AasControlDialog.cpp
ui/aas/RenderableAasFile.cpp
ui/about/AboutDialog.cpp
ui/brush/FindBrush.cpp
ui/brush/QuerySidesDialog.cpp
ui/commandlist/CommandList.cpp
ui/commandlist/ShortcutChooser.cpp
ui/common/CommandEntry.cpp
ui/common/DefinitionView.cpp
ui/common/EntityChooser.cpp
ui/common/MapPreview.cpp
ui/common/MaterialDefinitionView.cpp
ui/common/RenderableAABB.cpp
ui/common/ShaderChooser.cpp
ui/common/ShaderSelector.cpp
ui/common/SoundShaderDefinitionView.cpp
ui/common/TexturePreviewCombo.cpp
ui/DispatchEvent.cpp
ui/Documentation.cpp
ui/eclasstree/EClassTreeBuilder.cpp
ui/eclasstree/EClassTree.cpp
ui/einspector/AddPropertyDialog.cpp
ui/einspector/AnglePropertyEditor.cpp
ui/einspector/BooleanPropertyEditor.cpp
ui/einspector/ClassnamePropertyEditor.cpp
ui/einspector/ColourPropertyEditor.cpp
ui/einspector/EntityInspector.cpp
ui/einspector/EntityPropertyEditor.cpp
ui/einspector/FloatPropertyEditor.cpp
ui/einspector/LightTextureChooser.cpp
ui/einspector/ModelPropertyEditor.cpp
ui/einspector/PropertyEditor.cpp
ui/einspector/PropertyEditorFactory.cpp
ui/einspector/SkinChooser.cpp
ui/einspector/SkinPropertyEditor.cpp
ui/einspector/SoundPropertyEditor.cpp
ui/einspector/TexturePropertyEditor.cpp
ui/einspector/Vector3PropertyEditor.cpp
ui/entitylist/EntityList.cpp
ui/entitylist/GraphTreeModel.cpp
ui/filters/editor/FilterDialog.cpp
ui/filters/editor/FilterEditor.cpp
ui/filters/FilterContextMenu.cpp
ui/filters/FilterMenu.cpp
ui/filters/FilterOrthoContextMenuItem.cpp
ui/filters/FiltersMainMenu.cpp
ui/filters/FilterUserInterface.cpp
ui/findshader/FindShader.cpp
ui/gl/WxGLWidgetManager.cpp
ui/grid/GridUserInterface.cpp
ui/layers/CreateLayerDialog.cpp
ui/layers/LayerContextMenu.cpp
ui/layers/LayerControl.cpp
ui/layers/LayerControlDialog.cpp
ui/layers/LayerOrthoContextMenuItem.cpp
ui/lightinspector/LightInspector.cpp
ui/LongRunningOperationHandler.cpp
ui/mainframe/EmbeddedLayout.cpp
ui/mainframe/FloatingLayout.cpp
ui/mainframe/MainFrame.cpp
ui/mainframe/MainFrameLayoutManager.cpp
ui/mainframe/RegularLayout.cpp
ui/mainframe/ScreenUpdateBlocker.cpp
ui/mainframe/SplitPaneLayout.cpp
ui/mainframe/TopLevelFrame.cpp
uimanager/animationpreview/AnimationPreview.cpp
uimanager/animationpreview/MD5AnimationChooser.cpp
uimanager/animationpreview/MD5AnimationViewer.cpp
uimanager/colourscheme/ColourSchemeEditor.cpp
uimanager/DialogManager.cpp
uimanager/GroupDialog.cpp
uimanager/menu/MenuBar.cpp
uimanager/menu/MenuElement.cpp
uimanager/menu/MenuFolder.cpp
uimanager/menu/MenuItem.cpp
uimanager/menu/MenuManager.cpp
uimanager/menu/MenuSeparator.cpp
uimanager/SoundChooser.cpp
uimanager/SoundShaderPreview.cpp
uimanager/StatusBarManager.cpp
uimanager/ToolbarManager.cpp
uimanager/UIManager.cpp
ui/MapCommands.cpp
ui/MapFileProgressHandler.cpp
ui/mapinfo/EntityInfoTab.cpp
ui/mapinfo/LayerInfoTab.cpp
ui/mapinfo/MapInfoDialog.cpp
ui/mapinfo/ModelInfoTab.cpp
ui/mapinfo/ShaderInfoTab.cpp
ui/mediabrowser/MediaBrowser.cpp
ui/modelexport/ExportAsModelDialog.cpp
ui/modelexport/ExportCollisionModelDialog.cpp
ui/modelselector/MaterialsList.cpp
ui/modelselector/ModelSelector.cpp
ui/mousetool/BindToolDialog.cpp
ui/mousetool/ToolMappingDialog.cpp
ui/ortho/OrthoContextMenu.cpp
ui/overlay/Overlay.cpp
ui/overlay/OverlayDialog.cpp
ui/particles/ParticleEditor.cpp
ui/particles/ParticlesChooser.cpp
ui/patch/BulgePatchDialog.cpp
ui/patch/CapDialog.cpp
ui/patch/PatchCreateDialog.cpp
ui/patch/PatchInspector.cpp
ui/patch/PatchThickenDialog.cpp
ui/prefabselector/PrefabPopulator.cpp
ui/prefabselector/PrefabSelector.cpp
ui/prefdialog/GameSetupDialog.cpp
ui/prefdialog/GameSetupPage.cpp
ui/prefdialog/GameSetupPageIdTech.cpp
ui/prefdialog/GameSetupPageTdm.cpp
ui/prefdialog/PrefDialog.cpp
ui/prefdialog/PreferenceItem.cpp
ui/prefdialog/PrefPage.cpp
ui/script/ScriptMenu.cpp
ui/script/ScriptUserInterfaceModule.cpp
ui/script/ScriptWindow.cpp
ui/selectionset/SelectionSetToolmenu.cpp
ui/splash/Splash.cpp
ui/statusbar/EditingStopwatchStatus.cpp
ui/surfaceinspector/SurfaceInspector.cpp
ui/texturebrowser/TextureBrowser.cpp
ui/texturebrowser/TextureBrowserManager.cpp
ui/transform/TransformDialog.cpp
ui/UserInterfaceModule.cpp
xyview/FloatingOrthoView.cpp
xyview/GlobalXYWnd.cpp
xyview/tools/BrushCreatorTool.cpp
xyview/tools/ClipperTool.cpp
xyview/tools/MeasurementTool.cpp
xyview/XYWnd.cpp)
target_compile_options(darkradiant PRIVATE ${SIGC_CFLAGS} ${FREETYPE_CFLAGS})
target_include_directories(darkradiant PRIVATE .)
target_link_libraries(darkradiant PRIVATE radiantcore)
2 changes: 2 additions & 0 deletions radiant/selection/SelectionMouseTools.cpp
Expand Up @@ -9,6 +9,8 @@
#include "selection/SelectionVolume.h"
#include "igl.h"

#include <climits>

namespace ui
{

Expand Down
26 changes: 26 additions & 0 deletions radiantcore/CMakeLists.txt
Expand Up @@ -152,6 +152,29 @@ add_library(radiantcore
model/picomodel/StaticModel.cpp
model/picomodel/StaticModelNode.cpp
model/picomodel/StaticModelSurface.cpp
model/picomodel/lib/lwo/clip.c
model/picomodel/lib/lwo/envelope.c
model/picomodel/lib/lwo/list.c
model/picomodel/lib/lwo/lwio.c
model/picomodel/lib/lwo/lwo2.c
model/picomodel/lib/lwo/lwob.c
model/picomodel/lib/lwo/pntspols.c
model/picomodel/lib/lwo/surface.c
model/picomodel/lib/lwo/vecmath.c
model/picomodel/lib/lwo/vmap.c
model/picomodel/lib/picointernal.c
model/picomodel/lib/picomodel.c
model/picomodel/lib/picomodules.c
model/picomodel/lib/pm_3ds.c
model/picomodel/lib/pm_ase.c
model/picomodel/lib/pm_fm.c
model/picomodel/lib/pm_lwo.c
model/picomodel/lib/pm_md2.c
model/picomodel/lib/pm_md3.c
model/picomodel/lib/pm_mdc.c
model/picomodel/lib/pm_ms3d.c
model/picomodel/lib/pm_obj.c
model/picomodel/lib/pm_terrain.c
modulesystem/ModuleLoader.cpp
modulesystem/ModuleRegistry.cpp
particles/ParticleDef.cpp
Expand Down Expand Up @@ -246,3 +269,6 @@ add_library(radiantcore
xmlregistry/XMLRegistry.cpp)
target_compile_options(radiantcore PUBLIC ${SIGC_CFLAGS})
target_include_directories(radiantcore PRIVATE .)
target_link_libraries(radiantcore PUBLIC
math xmlutil scenegraph wxutil module
${JPEG_LIBRARIES} ${PNG_LIBRARIES})

0 comments on commit a151ee8

Please sign in to comment.