1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 99946ee..e8935ca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,6 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.12.0)
PROJECT(MojoShader)
+CMAKE_POLICY(SET CMP0063 NEW)
# !!! FIXME: can we lowercase this file, if nothing else?
@@ -29,45 +30,7 @@ INCLUDE_DIRECTORIES(.)
# This was a Mercurial thing. In Git, it's always -1.
SET(MOJOSHADER_VERSION -1)
-# If Git is installed and we are in a git repository, include the changeset as version information.
-FIND_PROGRAM(GIT git DOC "Path to git command line app: https://git-scm.com/")
-IF(NOT GIT)
- MESSAGE(STATUS "Git not found. You can go on, but version info will be wrong.")
- SET(MOJOSHADER_CHANGESET "???")
-ELSE(NOT GIT)
- MARK_AS_ADVANCED(GIT)
-
- # !!! FIXME: this didn't actually use the GIT variable...
-
- # See if we are in a git repository.
- EXECUTE_PROCESS(
- COMMAND git rev-parse --show-toplevel
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
- OUTPUT_VARIABLE MOJOSHADER_GIT_TOPLEVEL_DIR
- RESULT_VARIABLE GITVERSION_RC
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- IF(NOT GITVERSION_RC EQUAL 0)
- MESSAGE(STATUS "Git repository not found. You can go on, but version info will be wrong.")
- SET(MOJOSHADER_CHANGESET "???")
- ELSE(NOT GITVERSION_RC EQUAL 0)
- # Query the changeset.
- EXECUTE_PROCESS(
- COMMAND git rev-list HEAD~..
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
- RESULT_VARIABLE GITVERSION_RC
- OUTPUT_VARIABLE MOJOSHADER_GIT_CHANGESET
- ERROR_QUIET
- OUTPUT_STRIP_TRAILING_WHITESPACE
- )
- IF(NOT GITVERSION_RC EQUAL 0)
- SET(MOJOSHADER_CHANGESET "???")
- ELSE(NOT GITVERSION_RC EQUAL 0)
- SET(MOJOSHADER_CHANGESET "git-${MOJOSHADER_GIT_CHANGESET}")
- ENDIF(NOT GITVERSION_RC EQUAL 0)
- ENDIF(NOT GITVERSION_RC EQUAL 0)
-ENDIF(NOT GIT)
+SET(MOJOSHADER_CHANGESET "???")
WRITE_FILE(
"${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_version.h"
@@ -139,7 +102,7 @@ ENDIF(NOT PROFILE_ARB1_NV)
IF(NOT PROFILE_METAL)
ADD_DEFINITIONS(-DSUPPORT_PROFILE_METAL=0)
ELSE(NOT PROFILE_METAL)
- SET(LOBJC -lobjc)
+ SET(LOBJC )
ENDIF(NOT PROFILE_METAL)
IF(NOT PROFILE_SPIRV)
ADD_DEFINITIONS(-DSUPPORT_PROFILE_SPIRV=0)
@@ -167,7 +130,7 @@ IF(XNA4_VERTEXTEXTURE)
ADD_DEFINITIONS(-DMOJOSHADER_XNA4_VERTEX_TEXTURES)
ENDIF(XNA4_VERTEXTEXTURE)
-ADD_LIBRARY(mojoshader
+ADD_LIBRARY(mojoshader OBJECT
mojoshader.c
mojoshader_common.c
mojoshader_opengl.c
@@ -182,6 +145,8 @@ ADD_LIBRARY(mojoshader
profiles/mojoshader_profile_spirv.c
profiles/mojoshader_profile_common.c
)
+SET_TARGET_PROPERTIES(mojoshader PROPERTIES POSITION_INDEPENDENT_CODE ON C_VISIBILITY_PRESET hidden)
+TARGET_COMPILE_DEFINITIONS(mojoshader PRIVATE "DECLSPEC=__attribute__((visibility(\"default\")))")
IF(EFFECT_SUPPORT)
TARGET_SOURCES(mojoshader PRIVATE
mojoshader_effects.c
@@ -269,6 +234,30 @@ IF(COMPILER_SUPPORT)
TARGET_LINK_LIBRARIES(mojoshader-compiler mojoshader ${LIBM} ${LOBJC} ${CARBON_FRAMEWORK})
ENDIF(COMPILER_SUPPORT)
+ADD_LIBRARY(mojoshader-static STATIC $<TARGET_OBJECTS:mojoshader>)
+SET_TARGET_PROPERTIES(mojoshader-static PROPERTIES OUTPUT_NAME mojoshader)
+
+ADD_LIBRARY(mojoshader-shared SHARED $<TARGET_OBJECTS:mojoshader>)
+SET_TARGET_PROPERTIES(mojoshader-shared PROPERTIES OUTPUT_NAME mojoshader)
+SET_TARGET_PROPERTIES(mojoshader-shared PROPERTIES VERSION "${MOJOSHADER_VERSION}" SOVERSION 0)
+TARGET_LINK_LIBRARIES(mojoshader-shared ${LIBM})
+
+INCLUDE(GNUInstallDirs)
+INSTALL(
+ TARGETS mojoshader-static mojoshader-shared
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
+ LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
+)
+INSTALL(
+ FILES mojoshader.h mojoshader_effects.h mojoshader_version.h
+ DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/mojoshader"
+)
+CONFIGURE_FILE("debian/mojoshader.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/mojoshader.pc" @ONLY)
+INSTALL(
+ FILES "${CMAKE_CURRENT_BINARY_DIR}/mojoshader.pc"
+ DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig"
+)
+
# Unit tests...
IF(COMPILER_SUPPORT)
ADD_CUSTOM_TARGET(
|