Removed old dlldefs.h and reoganized/fixed CMake-related code.

CMake changes are related to shared and static inking, adding the proper public "-DPROJECTM_STATIC_DEFINE" for the static library.
This commit is contained in:
Kai Blaschke
2021-08-18 18:42:58 +02:00
parent 825adb313f
commit 7c8d1583ce
14 changed files with 198 additions and 240 deletions

View File

@ -41,7 +41,6 @@ add_library(projectM_main OBJECT
Common.hpp
ConfigFile.cpp
ConfigFile.h
dlldefs.h
event.h
fatal.h
fftsg.cpp
@ -70,11 +69,8 @@ add_library(projectM_main OBJECT
PresetLoader.cpp
PresetLoader.hpp
projectM.cpp
projectM.h
projectM.hpp
projectM-opengl.h
ProjectMCWrapper.cpp
ProjectMCWrapper.hpp
RandomNumberGenerators.hpp
resource.h
sdltoprojectM.h
@ -90,7 +86,6 @@ add_library(projectM_main OBJECT
target_include_directories(projectM_main
PRIVATE
"${CMAKE_CURRENT_BINARY_DIR}/include/libprojectM"
"${CMAKE_SOURCE_DIR}/src"
"${CMAKE_CURRENT_SOURCE_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}/Renderer"
@ -107,11 +102,6 @@ target_link_libraries(projectM_main
${PROJECTM_OPENGL_LIBRARIES}
)
target_compile_options(projectM_main
PRIVATE
-DprojectM_main_EXPORTS
)
include(GenerateExportHeader)
generate_export_header(projectM_main
@ -120,147 +110,11 @@ generate_export_header(projectM_main
)
if (ENABLE_STATIC_LIB)
add_library(projectM_static STATIC
# Xcode needs at least one source file, otherwise it won't create the static library.
StaticLibDummy.cpp
$<TARGET_OBJECTS:projectM_main>
$<TARGET_OBJECTS:MilkdropPresetFactory>
$<TARGET_OBJECTS:NativePresetFactory>
$<TARGET_OBJECTS:Renderer>
$<TARGET_OBJECTS:hlslparser>
$<TARGET_OBJECTS:SOIL2>
$<$<PLATFORM_ID:Windows>:$<TARGET_OBJECTS:dlfcn>>
)
set_target_properties(projectM_static PROPERTIES
OUTPUT_NAME projectM
EXPORT_NAME static
FOLDER libprojectM
)
target_include_directories(projectM_static
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/libprojectM>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Renderer>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Renderer/hlslparser/src>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/MilkdropPresetFactory>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/NativePresetFactory>"
"$<BUILD_INTERFACE:${MSVC_EXTRA_INCLUDE_DIR}>"
"$<INSTALL_INTERFACE:${PROJECTM_INCLUDE_DIR}>"
)
target_link_libraries(projectM_static
PRIVATE
GLM::GLM
PUBLIC
${PROJECTM_OPENGL_LIBRARIES}
)
if(ENABLE_THREADING)
target_link_libraries(projectM_static
PUBLIC
Threads::Threads
)
endif()
if(ENABLE_LLVM)
target_link_libraries(projectM_static
PUBLIC
LLVM::LLVM
)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
target_link_libraries(projectM_static
PUBLIC
"-framework CoreFoundation"
)
endif()
install(TARGETS projectM_static
EXPORT libprojectMTargets
LIBRARY DESTINATION "${PROJECTM_LIB_DIR}"
RUNTIME DESTINATION "${PROJECTM_LIB_DIR}"
ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}"
COMPONENT Runtime
)
set(EXPORT_SHARED_LIB_TARGET projectM_static)
include(libprojectM_static.cmake)
endif()
if(ENABLE_SHARED_LIB)
add_library(projectM_shared SHARED
$<TARGET_OBJECTS:projectM_main>
$<TARGET_OBJECTS:MilkdropPresetFactory>
$<TARGET_OBJECTS:NativePresetFactory>
$<TARGET_OBJECTS:Renderer>
$<TARGET_OBJECTS:hlslparser>
$<TARGET_OBJECTS:SOIL2>
$<$<PLATFORM_ID:Windows>:$<TARGET_OBJECTS:dlfcn>>
)
set_target_properties(projectM_shared PROPERTIES
OUTPUT_NAME projectM
VERSION "${PROJECTM_LIB_VERSION}"
SOVERSION "${PROJECTM_SO_VERSION}"
EXPORT_NAME shared
FOLDER libprojectM
)
target_include_directories(projectM_shared
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/libprojectM>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Renderer>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Renderer/hlslparser/src>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/MilkdropPresetFactory>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/NativePresetFactory>"
"$<BUILD_INTERFACE:${MSVC_EXTRA_INCLUDE_DIR}>"
"$<INSTALL_INTERFACE:${PROJECTM_INCLUDE_DIR}>"
)
target_link_libraries(projectM_shared
PRIVATE
GLM::GLM
PUBLIC
${PROJECTM_OPENGL_LIBRARIES}
${CMAKE_DL_LIBS}
)
if(ENABLE_THREADING)
target_link_libraries(projectM_shared
PUBLIC
Threads::Threads
)
endif()
if(ENABLE_LLVM)
target_link_libraries(projectM_shared
PUBLIC
LLVM::LLVM
)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
target_link_libraries(projectM_shared
PUBLIC
"-framework CoreFoundation"
)
endif()
enable_target_linker_flags_if_supported(projectM_shared PRIVATE --no-undefined)
install(TARGETS projectM_shared
EXPORT libprojectMTargets
LIBRARY DESTINATION "${PROJECTM_LIB_DIR}"
RUNTIME DESTINATION "${PROJECTM_LIB_DIR}"
ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}"
COMPONENT Runtime
)
set(EXPORT_SHARED_LIB_TARGET projectM_shared)
include(libprojectM_shared.cmake)
endif()
if(ENABLE_SHARED_LINKING)
@ -270,18 +124,23 @@ else()
endif()
install(FILES
Common.hpp
PCM.hpp
dlldefs.h
event.h
fatal.h
projectM.h
projectM.hpp
"${CMAKE_CURRENT_BINARY_DIR}/include/libprojectM/projectM_export.h"
DESTINATION "${PROJECTM_INCLUDE_DIR}/libprojectM"
COMPONENT Devel
)
if(ENABLE_CXX_INTERFACE)
install(FILES
Common.hpp
PCM.hpp
fatal.h
projectM.hpp
DESTINATION "${PROJECTM_INCLUDE_DIR}/libprojectM"
COMPONENT Devel
)
endif()
# CMake target exports
@ -333,29 +192,6 @@ install(EXPORT libprojectMTargets
)
# pkgconfig export
macro(set_pkg_config_path varname path)
if(IS_ABSOLUTE "${path}")
set(${varname} "${path}")
else()
set(${varname} "\${prefix}/${path}")
endif()
endmacro()
set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}")
set_pkg_config_path(PKGCONFIG_LIB_DIR "${PROJECTM_LIB_DIR}")
set_pkg_config_path(PKGCONFIG_INCLUDE_DIR "${PROJECTM_INCLUDE_DIR}")
set_pkg_config_path(PKGCONFIG_DATADIR_PATH "${PROJECTM_DATADIR_PATH}")
configure_file(libprojectM.pc.cmake.in "${CMAKE_BINARY_DIR}/libprojectM.pc" @ONLY)
install(FILES "${CMAKE_BINARY_DIR}/libprojectM.pc"
DESTINATION "${PROJECTM_LIB_DIR}/pkgconfig"
COMPONENT Devel
)
# If the path is not absolute, need to add the prefix path (and hope the result is absolute).
if(NOT IS_ABSOLUTE PROJECTM_DATADIR_PATH)
set(PROJECTM_DATADIR_PATH_ABSOLUTE "${CMAKE_INSTALL_PREFIX}/${PROJECTM_DATADIR_PATH}")

View File

@ -53,8 +53,6 @@
extern FILE *fmemopen(void *buf, size_t len, const char *pMode);
#endif /** MACOS */
#include "dlldefs.h"
#define DEFAULT_FONT_PATH "/home/carm/fonts/courier1.glf"
#define MAX_TOKEN_SIZE 512
#define MAX_PATH_SIZE 4096

View File

@ -43,7 +43,7 @@
#define INFIX_OR 5
#define INFIX_AND 6
class DLLEXPORT InfixOp;
class InfixOp;
class Eval {
public:

View File

@ -30,7 +30,6 @@
#define _EXPR_H
#include "config.h"
#include "dlldefs.h"
#include "CValue.hpp"
#include "Func.hpp"
#include <iostream>

View File

@ -33,7 +33,7 @@
#include <string>
/* Function Type */
class DLLEXPORT Func {
class Func {
public:
/// Create a new function wrapper object

View File

@ -15,9 +15,9 @@
#include <memory>
#include "../PresetFactory.hpp"
class DLLEXPORT PresetOutputs;
class PresetOutputs;
class DLLEXPORT PresetInputs;
class PresetInputs;
class MilkdropPresetFactory : public PresetFactory
{

View File

@ -30,7 +30,6 @@
#define _PCM_H
#include <stdlib.h>
#include "dlldefs.h"
// FFT_LENGTH is number of magnitude values available from getSpectrum().
@ -47,11 +46,7 @@ enum CHANNEL
CHANNEL_1 = 1
};
class
#ifdef WIN32
DLLEXPORT
#endif
PCM
class PCM
{
public:
/* maximum number of sound samples that are actually stored. */

View File

@ -32,7 +32,6 @@
#define _BEAT_DETECT_H
#include "../PCM.hpp"
#include "../dlldefs.h"
#include <algorithm>
#include <cmath>
@ -41,7 +40,7 @@
// the actual time represented in the history depends on FPS
#define BEAT_HISTORY_LENGTH 80
class DLLEXPORT BeatDetect
class BeatDetect
{
public:
// Does this really belong here? maybe belongs on projectM.Settings?

View File

@ -1,40 +0,0 @@
/**
* projectM -- Milkdrop-esque visualisation SDK
* Copyright (C)2003-2007 projectM Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* See 'LICENSE.txt' included within this release
*
*/
/**
* $Id$
*
* DLL definitions for exporting symbols on various platforms
*
* $Log$
*/
#ifndef _DLLDEFS_H
#define _DLLDEFS_H
#ifndef DLLEXPORT
#ifdef WIN32
#define DLLEXPORT __declspec(dllexport)
#else /** !WIN32 */
#define DLLEXPORT
#endif /** WIN32 */
#endif /** !DLLEXPORT */
#endif /** !_DLLDEFS_H */

View File

@ -27,8 +27,7 @@
* $Log: event.h,v $
*/
#ifndef _PROJECTM_EVENT_H
#define _PROJECTM_EVENT_H
#pragma once
typedef enum {
/** Event types */
@ -152,6 +151,3 @@ typedef enum {
PROJECTM_KMOD_LCTRL,
PROJECTM_KMOD_RCTRL,
} projectMModifier;
#endif /** !_PROJECTM_EVENT_H */

View File

@ -9,5 +9,5 @@ Name: libprojectM
Version: @PROJECT_VERSION@
Description: projectM - OpenGL Milkdrop
Requires:
Libs: -L${libdir} -lprojectM
Cflags: -I${includedir}
Libs: -L${libdir} -l:projectM.a
Cflags: -I${includedir} -DPROJECTM_STATIC_DEFINE

View File

@ -0,0 +1,79 @@
add_library(projectM_shared SHARED
projectM.h
ProjectMCWrapper.cpp
ProjectMCWrapper.hpp
$<TARGET_OBJECTS:projectM_main>
$<TARGET_OBJECTS:MilkdropPresetFactory>
$<TARGET_OBJECTS:NativePresetFactory>
$<TARGET_OBJECTS:Renderer>
$<TARGET_OBJECTS:hlslparser>
$<TARGET_OBJECTS:SOIL2>
$<$<PLATFORM_ID:Windows>:$<TARGET_OBJECTS:dlfcn>>
)
target_compile_options(projectM_shared
PRIVATE
-DprojectM_main_EXPORTS
)
set_target_properties(projectM_shared PROPERTIES
OUTPUT_NAME projectM
VERSION "${PROJECTM_LIB_VERSION}"
SOVERSION "${PROJECTM_SO_VERSION}"
EXPORT_NAME shared
FOLDER libprojectM
)
target_include_directories(projectM_shared
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/libprojectM>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Renderer>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Renderer/hlslparser/src>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/MilkdropPresetFactory>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/NativePresetFactory>"
"$<BUILD_INTERFACE:${MSVC_EXTRA_INCLUDE_DIR}>"
"$<INSTALL_INTERFACE:${PROJECTM_INCLUDE_DIR}>"
)
target_link_libraries(projectM_shared
PRIVATE
GLM::GLM
PUBLIC
${PROJECTM_OPENGL_LIBRARIES}
${CMAKE_DL_LIBS}
)
if(ENABLE_THREADING)
target_link_libraries(projectM_shared
PUBLIC
Threads::Threads
)
endif()
if(ENABLE_LLVM)
target_link_libraries(projectM_shared
PUBLIC
LLVM::LLVM
)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
target_link_libraries(projectM_shared
PUBLIC
"-framework CoreFoundation"
)
endif()
enable_target_linker_flags_if_supported(projectM_shared PRIVATE --no-undefined)
install(TARGETS projectM_shared
EXPORT libprojectMTargets
LIBRARY DESTINATION "${PROJECTM_LIB_DIR}"
RUNTIME DESTINATION "${PROJECTM_LIB_DIR}"
ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}"
COMPONENT Runtime
)
set(EXPORT_SHARED_LIB_TARGET projectM_shared)

View File

@ -0,0 +1,97 @@
add_library(projectM_static STATIC
projectM.h
ProjectMCWrapper.cpp
ProjectMCWrapper.hpp
$<TARGET_OBJECTS:projectM_main>
$<TARGET_OBJECTS:MilkdropPresetFactory>
$<TARGET_OBJECTS:NativePresetFactory>
$<TARGET_OBJECTS:Renderer>
$<TARGET_OBJECTS:hlslparser>
$<TARGET_OBJECTS:SOIL2>
$<$<PLATFORM_ID:Windows>:$<TARGET_OBJECTS:dlfcn>>
)
target_compile_options(projectM_static
PUBLIC
-DPROJECTM_STATIC_DEFINE
)
set_target_properties(projectM_static PROPERTIES
OUTPUT_NAME projectM
EXPORT_NAME static
FOLDER libprojectM
)
target_include_directories(projectM_static
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/libprojectM>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Renderer>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Renderer/hlslparser/src>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/MilkdropPresetFactory>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/NativePresetFactory>"
"$<BUILD_INTERFACE:${MSVC_EXTRA_INCLUDE_DIR}>"
"$<INSTALL_INTERFACE:${PROJECTM_INCLUDE_DIR}>"
)
target_link_libraries(projectM_static
PRIVATE
GLM::GLM
PUBLIC
${PROJECTM_OPENGL_LIBRARIES}
)
if(ENABLE_THREADING)
target_link_libraries(projectM_static
PUBLIC
Threads::Threads
)
endif()
if(ENABLE_LLVM)
target_link_libraries(projectM_static
PUBLIC
LLVM::LLVM
)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
target_link_libraries(projectM_static
PUBLIC
"-framework CoreFoundation"
)
endif()
install(TARGETS projectM_static
EXPORT libprojectMTargets
LIBRARY DESTINATION "${PROJECTM_LIB_DIR}"
RUNTIME DESTINATION "${PROJECTM_LIB_DIR}"
ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}"
COMPONENT Runtime
)
set(EXPORT_SHARED_LIB_TARGET projectM_static)
# pkg-config export, only supports static library on UNIX systems.
if(UNIX)
macro(set_pkg_config_path varname path)
if(IS_ABSOLUTE "${path}")
set(${varname} "${path}")
else()
set(${varname} "\${prefix}/${path}")
endif()
endmacro()
set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}")
set_pkg_config_path(PKGCONFIG_LIB_DIR "${PROJECTM_LIB_DIR}")
set_pkg_config_path(PKGCONFIG_INCLUDE_DIR "${PROJECTM_INCLUDE_DIR}")
set_pkg_config_path(PKGCONFIG_DATADIR_PATH "${PROJECTM_DATADIR_PATH}")
configure_file(libprojectM.pc.cmake.in "${CMAKE_BINARY_DIR}/libprojectM.pc" @ONLY)
install(FILES "${CMAKE_BINARY_DIR}/libprojectM.pc"
DESTINATION "${PROJECTM_LIB_DIR}/pkgconfig"
COMPONENT Devel
)
endif()

View File

@ -60,7 +60,6 @@
#pragma comment(lib, "kernel32.lib")
#endif /** WIN32 */
#include "dlldefs.h"
#include "event.h"
#include "fatal.h"
#include <vector>
@ -116,7 +115,7 @@ class RandomizerFunctor {
const PresetChooser & m_chooser;
};
class DLLEXPORT projectM
class projectM
{
public:
static const int FLAG_NONE = 0;