/
CMakeLists.txt
130 lines (114 loc) · 4.19 KB
1
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
2
PROJECT(MojoShader)
3
4
5
INCLUDE_DIRECTORIES(.)
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
FIND_PROGRAM(HG hg DOC "Path to hg command line app: http://www.selenic.com/mercurial/")
IF(NOT HG)
MESSAGE(STATUS "Mercurial (hg) not found. You can go on, but version info will be wrong.")
SET(MOJOSHADER_VERSION -1)
SET(MOJOSHADER_CHANGESET "???")
ELSE(NOT HG)
MARK_AS_ADVANCED(HG)
EXECUTE_PROCESS(
COMMAND hg tip --template {rev}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE HGVERSION_RC
OUTPUT_VARIABLE MOJOSHADER_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
EXECUTE_PROCESS(
COMMAND hg tip --template hg-{rev}:{node|short}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE HGVERSION_RC
OUTPUT_VARIABLE MOJOSHADER_CHANGESET
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
ENDIF(NOT HG)
30
31
32
33
34
35
36
37
38
39
40
WRITE_FILE(
"${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_version.h"
"/* This file was autogenerated. Do not edit! */\n"
"#ifndef _INCL_MOJOSHADER_VERSION_H_\n"
"#define _INCL_MOJOSHADER_VERSION_H_\n"
"#define MOJOSHADER_VERSION ${MOJOSHADER_VERSION}\n"
"#define MOJOSHADER_CHANGESET \"${MOJOSHADER_CHANGESET}\"\n"
"#endif\n"
)
41
42
43
44
IF(CMAKE_COMPILER_IS_GNUCC)
ADD_DEFINITIONS(-Wall -ggdb3)
ENDIF(CMAKE_COMPILER_IS_GNUCC)
45
46
# testparse uses this when I'm looking at memory usage patterns.
#ADD_DEFINITIONS(-DMOJOSHADER_DEBUG_MALLOC=1)
47
48
49
50
51
52
IF(MSVC)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS=1)
ADD_DEFINITIONS(-TP) # force .c files to compile as C++.
ENDIF(MSVC)
53
54
55
56
# We build lemon, then use it to generate parser C code.
ADD_EXECUTABLE(lemon "misc/lemon.c")
GET_TARGET_PROPERTY(LEMON lemon LOCATION)
ADD_CUSTOM_COMMAND(
57
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_parser_hlsl.h"
58
59
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_parser_hlsl.lemon"
DEPENDS lemon "${CMAKE_CURRENT_SOURCE_DIR}/misc/lempar.c"
60
COMMAND "${LEMON}"
61
ARGS -q "-T${CMAKE_CURRENT_SOURCE_DIR}/misc/lempar.c" "${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_parser_hlsl.lemon"
62
63
)
64
65
ADD_LIBRARY(mojoshader STATIC
mojoshader.c
66
mojoshader_common.c
67
mojoshader_compiler.c
68
69
mojoshader_preprocessor.c
mojoshader_lexer.c
70
71
72
mojoshader_assembler.c
mojoshader_opengl.c
)
73
74
75
SET_SOURCE_FILES_PROPERTIES(
mojoshader_compiler.c
76
PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_parser_hlsl.h"
77
78
)
79
80
81
82
83
84
FIND_PROGRAM(RE2C re2c DOC "Path to re2c command line app: http://re2c.org/")
IF(NOT RE2C)
MESSAGE(STATUS "re2c missing. You can go on, but can't rebuild the lexer.")
ELSE(NOT RE2C)
MARK_AS_ADVANCED(RE2C)
ADD_CUSTOM_COMMAND(
85
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_lexer.c"
86
DEPENDS mojoshader_lexer.re
87
88
COMMAND "${RE2C}"
ARGS -is --no-generation-date -o "${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_lexer.c" "${CMAKE_CURRENT_SOURCE_DIR}/mojoshader_lexer.re"
89
90
)
ENDIF(NOT RE2C)
91
92
FIND_PACKAGE(SDL)
93
94
IF(SDL_FOUND)
INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR})
95
ADD_EXECUTABLE(glcaps utils/glcaps.c)
96
TARGET_LINK_LIBRARIES(glcaps ${SDL_LIBRARY})
97
ADD_EXECUTABLE(bestprofile utils/bestprofile.c)
98
TARGET_LINK_LIBRARIES(bestprofile mojoshader ${SDL_LIBRARY})
99
ADD_EXECUTABLE(availableprofiles utils/availableprofiles.c)
100
TARGET_LINK_LIBRARIES(availableprofiles mojoshader ${SDL_LIBRARY})
101
102
ENDIF(SDL_FOUND)
103
104
105
106
107
108
109
110
111
ADD_EXECUTABLE(finderrors utils/finderrors.c)
TARGET_LINK_LIBRARIES(finderrors mojoshader ${SDL_LIBRARY})
IF(SDL_FOUND)
SET_SOURCE_FILES_PROPERTIES(
utils/finderrors.c
PROPERTIES COMPILE_FLAGS "-DFINDERRORS_COMPILE_SHADERS=1"
)
ENDIF(SDL_FOUND)
112
ADD_EXECUTABLE(testparse utils/testparse.c)
113
TARGET_LINK_LIBRARIES(testparse mojoshader)
114
ADD_EXECUTABLE(testoutput utils/testoutput.c)
115
TARGET_LINK_LIBRARIES(testoutput mojoshader)
116
117
ADD_EXECUTABLE(mojoshader-compiler utils/mojoshader-compiler.c)
TARGET_LINK_LIBRARIES(mojoshader-compiler mojoshader)
118
119
120
121
122
123
# Unit tests...
ADD_CUSTOM_TARGET(
test
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/unit_tests/run_tests.pl"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
124
DEPENDS mojoshader-compiler
125
COMMENT "Running unit tests..."
126
VERBATIM
127
128
)
129
# End of CMakeLists.txt ...