OSDN Git Service

[BUILD] FMGEN must be linked due to separate devices to DLL.
[csp-qt/common_source_project-fm7.git] / source / build-cmake / cmake / config_commonsource.cmake
1 # Set configuration for building XM7/SDL.
2 # (C) 2014 K.Ohta <whatisthis.sowhat@gmail.com>
3 # This is part of XM7/SDL, but license is apache 2.2,
4 # this part was written only me.
5
6 include(CheckFunctionExists)
7
8 if(DEFINED QT5_ROOT_PATH)
9   SET(CMAKE_FIND_ROOT_PATH  ${QT5_ROOT_PATH} ${CMAKE_FIND_ROOT_PATH})
10 endif()
11
12 # Use cmake if enabled.
13   find_program(USE_CCACHE ccache)
14   if(USE_CCACHE)
15    SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
16    SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
17   endif()
18   FIND_PACKAGE(Qt5Widgets REQUIRED)
19   FIND_PACKAGE(Qt5Core REQUIRED)
20   FIND_PACKAGE(Qt5Gui REQUIRED)
21   FIND_PACKAGE(Qt5OpenGL REQUIRED)
22   include_directories(${Qt5Widgets_INCLUDE_DIRS})
23   include_directories(${Qt5Core_INCLUDE_DIRS})
24   include_directories(${Qt5Gui_INCLUDE_DIRS})
25   include_directories(${Qt5OpenGL_INCLUDE_DIRS})
26   add_definitions(-D_USE_OPENGL -DUSE_OPENGL)
27 if(USE_SOCKET)
28   FIND_PACKAGE(Qt5Network REQUIRED)
29   include_directories(${Qt5Network_INCLUDE_DIRS})
30 endif()
31 SET(USE_QT_5 ON)
32 set(USE_QT5_4_APIS OFF CACHE BOOL "Build with Qt5.4 (or later) APIs if you can.")
33 set(USE_GCC_OLD_ABI ON CACHE BOOL "Build with older GCC ABIs if you can.")
34 set(USE_SDL2 ON CACHE BOOL "Build with libSDL2. DIsable is building with libSDL1.")
35 set(USE_MOVIE_SAVER OFF CACHE BOOL "Save screen/audio as MP4 MOVIE. Needs libav .")
36 set(USE_MOVIE_LOADER OFF CACHE BOOL "Load movie from screen for some VMs. Needs libav .")
37 set(USE_LTO ON CACHE BOOL "Use link-time-optimization to build.")
38 if(USE_LTO)
39   # set_property(DIRECTORY PROPERTY INTERPROCEDURAL_OPTIMIZATION true)
40 else()
41   # set_property(DIRECTORY PROPERTY INTERPROCEDURAL_OPTIMIZATION false)
42 endif()
43
44 add_definitions(-D_USE_QT5)
45
46 if(USE_QT5_4_APIS)
47   add_definitions(-D_USE_QT_5_4)
48 else()
49   #add_definitions(-DQT_NO_VERSION_TAGGING)
50 endif()
51
52 if(USE_GCC_OLD_ABI)
53   add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
54 else()
55   add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
56 endif()
57
58 SET(CMAKE_AUTOMOC OFF)
59 SET(CMAKE_AUTORCC ON)
60 SET(CMAKE_INCLUDE_CURRENT_DIR ON)
61
62
63 add_definitions(-D_USE_QT)
64 add_definitions(-DUSE_QT)
65 add_definitions(-DQT_MAJOR_VERSION=${Qt5Widgets_VERSION_MAJOR})
66 add_definitions(-DQT_MINOR_VERSION=${Qt5Widgets_VERSION_MINOR})
67
68 if(USE_OPENMP)
69   find_package(OpenMP)
70   include_directories(${OPENMP_INCLUDE_PATH})
71 endif()
72
73 find_package(Threads)
74 include_directories(${THREADS_INCLUDE_PATH})
75
76 include(FindPkgConfig)
77
78 include(FindLibAV)
79     if(LIBAV_FOUND)
80       add_definitions(-DUSE_LIBAV)
81       if(USE_MOVIE_SAVER)
82         add_definitions(-DUSE_MOVIE_SAVER)
83       endif()
84       if(USE_MOVIE_LOADER)
85         add_definitions(-DUSE_MOVIE_LOADER)
86       endif()
87       add_definitions(-D__STDC_CONSTANT_MACROS)
88       add_definitions(-D__STDC_FORMAT_MACROS)
89     else()
90       set(USE_MOVIE_SAVER OFF)
91       set(USE_MOVIE_LOADER OFF)
92       set(LIBAV_LIBRARIES "")
93     endif()
94     
95 if(USE_SDL2)
96    if(CMAKE_CROSSCOMPILING)
97       include_directories(${SDL2_INCLUDE_DIRS})
98    else()
99       pkg_search_module(SDL2 REQUIRED  sdl2)
100       include_directories(${SDL2_INCLUDE_DIRS})
101    endif()
102    set(SDL_LIBS ${SDL2_LIBRARIES})
103    add_definitions(-DUSE_SDL2)
104 else()
105    if(CMAKE_CROSSCOMPILING)
106       include_directories(${SDL_INCLUDE_DIRS})
107       set(SDL_LIBS ${SDL_LIBRARIES})
108    else()
109       include(FindSDL)
110       #pkg_search_module(SDL REQUIRED sdl)
111       #include_directories(${SDL_INCLUDE_DIRS})
112       include_directories(${SDL_INCLUDE_DIR})
113       set(SDL_LIBS ${SDL_LIBRARY})
114    endif()
115 endif()
116
117 # GCC Only?
118 if(CMAKE_COMPILER_IS_GNUCC) 
119   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flax-vector-conversions")
120 endif()
121
122 if(CMAKE_COMPILER_IS_GNUCXX) 
123  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -flax-vector-conversions")
124 endif()
125
126
127 check_function_exists("nanosleep" HAVE_NANOSLEEP)
128 if(NOT HAVE_NANOSLEEP)
129   check_library_exists("rt" "nanosleep" "" LIB_RT_HAS_NANOSLEEP)
130 endif(NOT HAVE_NANOSLEEP)
131
132 if(LIB_RT_HAS_NANOSLEEP)
133   add_target_library(${EXEC_TARGET} rt)
134 endif(LIB_RT_HAS_NANOSLEEP)
135
136 if(HAVE_NANOSLEEP OR LIB_RT_HAS_NANOSLEEP)
137   add_definitions(-DHAVE_NANOSLEEP)
138 endif(HAVE_NANOSLEEP OR LIB_RT_HAS_NANOSLEEP)
139
140
141 set(SRC_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../src)
142
143 if(USE_QT_5)
144   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
145   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
146 endif()
147
148 if(DEFINED VM_NAME)
149 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/vm/${VM_NAME})
150 #  if(USE_FMGEN)
151     include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/vm/fmgen)
152 #    if(WIN32)
153 #      set(FMGEN_LIB vm_fmgen)
154 #         set(FMGEN_LIB "-lCSPfmgen")
155 #       endif()
156 #  endif()
157 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/machines/${VM_NAME})
158 endif()
159
160 if(LIBAV_FOUND)
161    include_directories(${LIBAV_INCLUDE_DIRS})
162 endif()
163 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src)
164 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/vm)
165 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/common)
166 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/gui)
167 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt)
168 if(WIN32)
169 #  add_subdirectory(../../src/qt/gui qt/gui)
170 endif()  
171 #add_subdirectory(../../src/qt qt/osd)
172 add_subdirectory(../../src common)
173 add_subdirectory(../../src/vm vm/)
174
175 if(DEFINED VM_NAME)
176 # if(WITH_DEBUGGER)
177    set(DEBUG_LIBS qt_debugger)
178    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/debugger)
179    add_subdirectory(../../src/qt/debugger qt/debugger)
180 # else()
181 #   set(DEBUG_LIBS)
182 # endif()
183
184 if(WIN32)
185            set(LOCAL_LIBS 
186                    common_emu
187            qt_${VM_NAME}
188                    vm_${VM_NAME}
189                    ${VM_APPEND_LIBS}
190                    ${FMGEN_LIB}
191                    vm_vm
192                    ${DEBUG_LIBS}
193                    common_common
194                    )
195 else()
196            set(LOCAL_LIBS     
197                    common_emu
198            qt_${VM_NAME}
199                    vm_${VM_NAME}
200                    vm_vm
201                    ${VM_APPEND_LIBS}
202                    ${DEBUG_LIBS}
203                    common_common
204                    )
205            endif()
206 endif()
207
208 include(simd-x86)
209
210 if(WIN32)
211    set(BUNDLE_LIBS 
212        ${OPENGL_LIBRARY}
213        ${OPENCL_LIBRARY}
214        ${GETTEXT_LIBRARY}
215        ${OPENMP_LIBRARY}
216        ${LIBAV_LIBRARIES}
217        ${SDL_LIBS}
218        ${LIBAV_LIBRARIES}
219        ${ADDITIONAL_LIBRARIES}
220        )
221        #SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qcs <TARGET>  <LINK_FLAGS> <OBJECTS>")
222        #SET(CMAKE_C_ARCHIVE_FINISH   true)
223        #SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qcs <TARGET> <LINK_FLAGS> <OBJECTS>")
224        #SET(CMAKE_CXX_ARCHIVE_FINISH   true)
225 else()
226    set(BUNDLE_LIBS 
227 #       ${OPENGL_LIBRARY}
228        ${OPENCL_LIBRARY}
229 #       ${GETTEXT_LIBRARY}
230        ${OPENMP_LIBRARY}
231        ${SDL_LIBS}
232 #       ${LIBAV_LIBRARIES}
233        ${ADDITIONAL_LIBRARIES}
234        )
235        set(BUNDLE_LIBS ${BUNDLE_LIBS} -lCSPosd -lCSPfmgen -lCSPcommon_vm -lCSPgui -lCSPemu_utils -lCSPavio)
236 endif()
237
238 if(USE_QT_5)
239   set(BUNDLE_LIBS ${BUNDLE_LIBS} ${QT_LIBRARIES})
240 endif()
241
242 set(BUNDLE_LIBS ${BUNDLE_LIBS} ${THREADS_LIBRARY})
243
244 if(DEFINED VM_NAME)
245         add_subdirectory(../../src/vm/${VM_NAME} vm/${VM_NAME})
246 #  if(USE_FMGEN)
247 #       add_subdirectory(../../src/vm/fmgen vm/fmgen)
248 #  endif()      
249         add_subdirectory(../../src/qt/machines/${VM_NAME} qt/${VM_NAME})
250         add_subdirectory(../../src/qt/common qt/common)
251 endif()