OSDN Git Service

[BUILD][CMAKE] Adjust default values.
[csp-qt/common_source_project-fm7.git] / source / build-cmake / cmake / single-build / config.cmake
1
2
3 include(CheckFunctionExists)
4
5 # Still not as one shared lib with win32
6 if(WIN32)
7         set(USE_DEVICES_SHARED_LIB OFF)
8 endif()
9
10 if(USE_DEVICES_SHARED_LIB)
11   add_definitions(-DUSE_SHARED_DLL)
12   add_definitions(-DUSE_SHARED_UI_DLL)
13   add_definitions(-DUSE_SHARED_DEVICES_DLL)
14 endif()
15
16
17 #ccache
18 find_program(USE_CCACHE ccache)
19 if(USE_CCACHE)
20    SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
21 endif()
22
23 if(WIN32)
24   FIND_PACKAGE(Qt5Core REQUIRED)
25 else()
26   FIND_PACKAGE(Qt5Widgets REQUIRED)
27 endif()
28   FIND_PACKAGE(Qt5Gui REQUIRED)
29   FIND_PACKAGE(Qt5OpenGL REQUIRED)
30   include_directories(${Qt5Widgets_INCLUDE_DIRS})
31   include_directories(${Qt5Core_INCLUDE_DIRS})
32   include_directories(${Qt5Gui_INCLUDE_DIRS})
33   include_directories(${Qt5OpenGL_INCLUDE_DIRS})
34   add_definitions(-D_USE_OPENGL -DUSE_OPENGL)
35 if(DEFINED QT5_ROOT_PATH)
36   SET(CMAKE_FIND_ROOT_PATH  ${QT5_ROOT_PATH} ${CMAKE_FIND_ROOT_PATH})
37 endif()
38
39 #socket
40 function(APPEND_SOCKET_FEATURE)
41   if(USE_SOCKET)
42      FIND_PACKAGE(Qt5Network REQUIRED)
43      include_directories(${Qt5Network_INCLUDE_DIRS})
44    endif()
45 endfunction(APPEND_SOCKET_FEATURE)
46
47 SET(USE_QT_5 ON)
48 set(USE_QT5_4_APIS ON CACHE BOOL "Build with Qt5.4 (or later) APIs if you can.")
49 set(USE_GCC_OLD_ABI ON CACHE BOOL "Build with older GCC ABIs if you can.")
50 set(USE_SDL2 ON CACHE BOOL "Build with libSDL2. DIsable is building with libSDL1.")
51 set(USE_MOVIE_SAVER ON CACHE BOOL "Save screen/audio as MP4 MOVIE. Needs libav .")
52 set(USE_MOVIE_LOADER ON CACHE BOOL "Load movie from screen for some VMs. Needs libav .")
53 set(USE_LTO ON CACHE BOOL "Use link-time-optimization to build.")
54 set(USE_OPENMP OFF CACHE BOOL "Build using OpenMP")
55 set(USE_OPENGL ON CACHE BOOL "Build using OpenGL")
56
57 if(USE_LTO)
58    set_property(TARGET PROPERTY INTERPROCEDURAL_OPTIMIZATION ON)
59 else()
60    set_property(TARGET PROPERTY INTERPROCEDURAL_OPTIMIZATION OFF)
61 endif()
62
63 add_definitions(-D_USE_QT5)
64
65 if(USE_QT5_4_APIS)
66   add_definitions(-D_USE_QT_5_4)
67 else()
68   #add_definitions(-DQT_NO_VERSION_TAGGING)
69 endif()
70
71 if(USE_GCC_OLD_ABI)
72   add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
73 else()
74   add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
75 endif()
76
77 SET(CMAKE_AUTOMOC OFF)
78 SET(CMAKE_AUTORCC ON)
79 SET(CMAKE_INCLUDE_CURRENT_DIR ON)
80
81 add_definitions(-D_USE_QT)
82 add_definitions(-DUSE_QT)
83 add_definitions(-DQT_MAJOR_VERSION=${Qt5Widgets_VERSION_MAJOR})
84 add_definitions(-DQT_MINOR_VERSION=${Qt5Widgets_VERSION_MINOR})
85
86 if(USE_OPENMP)
87   find_package(OpenMP)
88   include_directories(${OPENMP_INCLUDE_PATH})
89   if(OPENMP_FOUND)
90     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
91     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
92   endif()
93 endif()
94
95 find_package(Threads)
96 include_directories(${THREADS_INCLUDE_PATH})
97
98 include(FindPkgConfig)
99
100 find_package(Git)
101 if(GIT_FOUND)
102         execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD OUTPUT_VARIABLE __tstr)
103         string(FIND ${__tstr} "fatal" __notfound)
104         string(REPLACE "\n" "" __tstr2 ${__tstr})
105         if(${__notfound} EQUAL -1)
106                    add_definitions(-D__GIT_REPO_VERSION=\"${__tstr2}\")
107         else()
108                    add_definitions(-U__GIT_REPO_VERSION)
109         endif()
110 endif()
111
112 string(TIMESTAMP __build_date "%b %d,%Y %H:%M:%S UTC" UTC)
113 add_definitions(-D__BUILD_DATE=\"${__build_date}\")
114
115 include(FindLibAV)
116     if(LIBAV_FOUND)
117       add_definitions(-DUSE_LIBAV)
118       if(USE_MOVIE_SAVER)
119         add_definitions(-DUSE_MOVIE_SAVER)
120       endif()
121       if(USE_MOVIE_LOADER)
122         add_definitions(-DUSE_MOVIE_LOADER)
123       endif()
124       add_definitions(-D__STDC_CONSTANT_MACROS)
125       add_definitions(-D__STDC_FORMAT_MACROS)
126     else()
127       set(USE_MOVIE_SAVER OFF)
128       set(USE_MOVIE_LOADER OFF)
129       set(LIBAV_LIBRARIES "")
130     endif()
131     
132 if(USE_SDL2)
133    if(CMAKE_CROSSCOMPILING)
134       include_directories(${SDL2_INCLUDE_DIRS})
135    else()
136       pkg_search_module(SDL2 REQUIRED  sdl2)
137       include_directories(${SDL2_INCLUDE_DIRS})
138    endif()
139    set(SDL_LIBS ${SDL2_LIBRARIES})
140    add_definitions(-DUSE_SDL2)
141 else()
142    if(CMAKE_CROSSCOMPILING)
143       include_directories(${SDL_INCLUDE_DIRS})
144       set(SDL_LIBS ${SDL_LIBRARIES})
145    else()
146       include(FindSDL)
147       #pkg_search_module(SDL REQUIRED sdl)
148       #include_directories(${SDL_INCLUDE_DIRS})
149       include_directories(${SDL_INCLUDE_DIR})
150       set(SDL_LIBS ${SDL_LIBRARY})
151    endif()
152 endif()
153
154 include(FindZLIB)
155 if(ZLIB_FOUND)
156   add_definitions(-DUSE_ZLIB)
157    include_directories(${ZLIB_INCLUDE_DIRS})
158 endif()
159
160 # GCC Only?
161 if(CMAKE_COMPILER_IS_GNUCC) 
162   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flax-vector-conversions")
163 endif()
164
165 if(CMAKE_COMPILER_IS_GNUCXX) 
166  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -flax-vector-conversions")
167 endif()
168
169
170 check_function_exists("nanosleep" HAVE_NANOSLEEP)
171 if(NOT HAVE_NANOSLEEP)
172   check_library_exists("rt" "nanosleep" "" LIB_RT_HAS_NANOSLEEP)
173 endif(NOT HAVE_NANOSLEEP)
174
175 if(LIB_RT_HAS_NANOSLEEP)
176   add_target_library(${EXEC_TARGET} rt)
177 endif(LIB_RT_HAS_NANOSLEEP)
178
179 if(HAVE_NANOSLEEP OR LIB_RT_HAS_NANOSLEEP)
180   add_definitions(-DHAVE_NANOSLEEP)
181 endif(HAVE_NANOSLEEP OR LIB_RT_HAS_NANOSLEEP)
182
183
184 set(SRC_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../src)
185
186 if(USE_QT_5)
187         if(NOT WIN32)
188                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
189                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
190         endif()
191 endif()
192
193 #include(simd-x86)
194
195 if(LIBAV_FOUND)
196         include_directories(${LIBAV_INCLUDE_DIRS})
197 endif()
198
199 # Now make DLLs
200 include_directories(
201                                 "${PROJECT_SOURCE_DIR}/src"
202                                 "${PROJECT_SOURCE_DIR}/src/vm"
203                                 "${PROJECT_SOURCE_DIR}/src/qt/common"
204                                 "${PROJECT_SOURCE_DIR}/src/qt/gui"
205                                 "${PROJECT_SOURCE_DIR}/src/qt/debugger"
206                                 "${PROJECT_SOURCE_DIR}/src/qt"
207 )
208
209 #find_library(AVCODEC_LIBRARY avcodec)
210 add_subdirectory("${PROJECT_SOURCE_DIR}/src/qt" osd)
211 add_subdirectory("${PROJECT_SOURCE_DIR}/src/qt/avio" qt/avio)
212 add_subdirectory("${PROJECT_SOURCE_DIR}/src/qt/gui" qt/gui)
213 add_subdirectory("${PROJECT_SOURCE_DIR}/src/qt/emuutils" emu_utils)
214 if(USE_DEVICES_SHARED_LIB)
215         add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/common_vm" vm/)
216         add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/fmgen" vm/fmgen)
217 else()
218         add_subdirectory("${PROJECT_SOURCE_DIR}/src" common)
219         add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm" vm)
220 endif()
221
222 function(ADD_VM VM_NAME EXE_NAME VMDEF)
223         set(COMMON_DIRECTORY ${PROJECT_SOURCE_DIR}/src/qt/common)
224         set(s_qt_common_headers
225                 ${COMMON_DIRECTORY}/emu_thread.h
226                 ${COMMON_DIRECTORY}/mainwidget.h
227                 ${COMMON_DIRECTORY}/../osd.h
228         )
229         if(USE_SOCKET)
230                 set(s_qt_common_headers ${s_qt_common_headers} ${COMMON_DIRECTORY}/../osd_socket.h)
231         endif()
232         QT5_WRAP_CPP(s_qt_common_headers_MOC ${s_qt_common_headers})
233         set(QT_COMMON_BASE
234                 ${COMMON_DIRECTORY}/main.cpp
235                 ${COMMON_DIRECTORY}/qt_utils.cpp
236                 ${COMMON_DIRECTORY}/menu_flags.cpp
237                 ${COMMON_DIRECTORY}/emu_thread.cpp
238                 ${COMMON_DIRECTORY}/emu_thread_slots.cpp
239                 ${COMMON_DIRECTORY}/util_bubble2.cpp
240                 ${COMMON_DIRECTORY}/util_main.cpp
241                 ${COMMON_DIRECTORY}/../osd.cpp
242                 ${COMMON_DIRECTORY}/../osd_wrapper.cpp
243         )
244
245         if(WIN32)
246                 add_executable(${EXE_NAME} WIN32
247                         ${PROJECT_SOURCE_DIR}/src/vm/event.cpp
248                         ${VMFILES}
249                         ${PROJECT_SOURCE_DIR}/src/emu.cpp
250                         ${COMMON_DIRECTORY}/../gui/qt_main.cpp
251                         ${QT_COMMON_BASE}
252                         ${s_qt_common_headers_MOC}
253                 )
254         else()
255                 add_executable(${EXE_NAME} 
256                         ${PROJECT_SOURCE_DIR}/src/vm/event.cpp
257                         ${VMFILES}
258                         ${PROJECT_SOURCE_DIR}/src/emu.cpp
259                         ${QT_COMMON_BASE}
260                         ${s_qt_common_headers_MOC}
261                 )
262     endif()
263         if(USE_SOCKET)
264                 QT5_USE_MODULES(${EXE_NAME} Widgets Core Gui OpenGL Network)
265         else()
266                 QT5_USE_MODULES(${EXE_NAME} Widgets Core Gui OpenGL)
267         endif()
268         target_include_directories(${EXE_NAME} 
269                 PRIVATE "${PROJECT_SOURCE_DIR}/src/qt/machines/${VM_NAME}"
270                 PRIVATE "${PROJECT_SOURCE_DIR}/src/vm/${VM_NAME}"
271         )
272    if(LIBAV_FOUND)
273                 target_include_directories(${EXE_NAME} PUBLIC
274                                         "${PROJECT_SOURCE_DIR}/src/qt/avio"
275                 )
276         endif()
277 #       if(WITH_DEBUGGER)
278                 set(DEBUG_LIBS qt_debugger_${EXE_NAME})
279 #               target_include_directories(${EXE_NAME} PUBLIC
280 #                                       PUBLIC "${PROJECT_SOURCE_DIR}/src/qt/debugger"
281 #               )
282 #       else()
283 #               set(DEBUG_LIBS)
284 #       endif()
285         if(NOT USE_DEVICES_SHARED_LIB)
286                 if(USE_FMGEN)
287                         set(VM_APPEND_LIBS fmgen)
288                 else()
289                         set(VM_APPEND_LIBS)
290                 endif()
291         endif()
292         if(WIN32)
293                 set(LOCAL_LIBS     
294                         common_emu
295                         qt_${EXE_NAME}
296                         vm_${EXE_NAME}
297                         vm_vm
298                         ${VM_APPEND_LIBS}
299                         ${DEBUG_LIBS}
300                         common_${EXE_NAME}
301                 )
302         else()
303                 set(LOCAL_LIBS
304                         qt_${EXE_NAME}
305                         vm_${EXE_NAME}
306                         vm_vm
307                         ${VM_APPEND_LIBS}
308                         ${DEBUG_LIBS}
309                         common_${EXE_NAME}
310                 )
311         endif()
312         if(WIN32)
313                 set(BUNDLE_LIBS
314                         ${OPENGL_LIBRARY}
315                         ${OPENCL_LIBRARY}
316                         ${GETTEXT_LIBRARY}
317                         ${OPENMP_LIBRARY}
318                         ${LIBAV_LIBRARIES}
319                         ${SDL_LIBS}
320                         ${LIBAV_LIBRARIES}
321                         ${ADDITIONAL_LIBRARIES}
322                         ${ZLIB_LIBRARIES}
323                 )
324         else()          
325                 add_definitions(-D_UNICODE)
326                 set(BUNDLE_LIBS 
327                         ${OPENMP_LIBRARY}
328                         ${SDL_LIBS}
329                         ${ADDITIONAL_LIBRARIES}
330                         ${BUNDLE_LIBS}
331                         ${QT_LIBRARIES}
332                         ${ZLIB_LIBRARIES}
333                         ${THREADS_LIBRARY}
334        )
335         endif()
336         if(WIN32)
337            set(LOCAL_LIBS     
338            qt_${EXE_NAME}
339                    vm_${EXE_NAME}
340                    vm_vm
341                    ${VM_APPEND_LIBS}
342                    ${DEBUG_LIBS}
343                    common_${EXE_NAME}
344                    )
345         else()
346            set(LOCAL_LIBS     
347            qt_${EXE_NAME}
348                    vm_${EXE_NAME}
349                    ${VM_APPEND_LIBS}
350                    ${DEBUG_LIBS}
351                    common_${EXE_NAME}
352                    )
353         endif()
354         if(USE_DEVICES_SHARED_LIB)
355                 set(BUNDLE_LIBS
356                         ${BUNDLE_LIBS}
357                         -lCSPosd
358                         -lCSPcommon_vm
359                         -lCSPfmgen
360                         -lCSPgui
361                         -lCSPemu_utils
362                         -lCSPavio)
363         else()
364                 set(BUNDLE_LIBS
365                         ${BUNDLE_LIBS}
366                         -lCSPosd
367                         -lCSPgui
368                         -lCSPavio)
369         endif()
370
371         # Subdirectories
372         add_subdirectory("${PROJECT_SOURCE_DIR}/src" common/${EXE_NAME} EXCLUDE_FROM_ALL)
373         add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/${VM_NAME}" vm/${EXE_NAME} EXCLUDE_FROM_ALL)
374         if(NOT USE_DEVICES_SHARED_LIB)
375                 if(USE_FMGEN)
376                         add_subdirectory("${PROJECT_SOURCE_DIR}/src/vm/fmgen" vm/fmgen_${EXE_NAME}  EXCLUDE_FROM_ALL)
377                 endif()
378         endif()
379         add_subdirectory("${PROJECT_SOURCE_DIR}/src/qt/machines/${VM_NAME}" qt/${EXE_NAME}  EXCLUDE_FROM_ALL)
380 #       if(WITH_DEBUGGER)
381                 add_subdirectory("${PROJECT_SOURCE_DIR}/src/qt/debugger" qt/debugger_${EXE_NAME} EXCLUDE_FROM_ALL)
382 #       endif()
383 #       add_subdirectory("${PROJECT_SOURCE_DIR}/src/qt/common" qt/common EXCLUDE_FROM_ALL)
384         add_dependencies(${EXE_NAME}
385                 CSPosd
386                 CSPcommon_vm
387                 CSPfmgen
388                 common_${EXE_NAME}
389                 CSPemu_utils
390                 CSPgui
391                 CSPavio
392                 qt_debugger_${EXE_NAME}
393                 qt_${EXE_NAME}
394         )
395         target_compile_definitions(${EXE_NAME}
396                 PRIVATE  ${VMDEF}
397         )
398         target_compile_definitions(vm_${EXE_NAME}
399                 PRIVATE  ${VMDEF}
400         )
401         target_compile_definitions(qt_${EXE_NAME}
402                 PUBLIC ${VMDEF}
403         )
404         target_compile_definitions(qt_debugger_${EXE_NAME}
405                 PRIVATE  ${VMDEF}
406         )
407         target_compile_definitions(common_${EXE_NAME}
408                 PRIVATE  ${VMDEF}
409         )
410
411         if(WIN32)
412                 target_link_libraries(${EXE_NAME}
413                         ${LOCAL_LIBS}
414                         ${BUNDLE_LIBS}
415                         -lpthread
416                 )
417         else()  
418                 target_link_libraries(${EXE_NAME}
419                         ${LOCAL_LIBS}
420                         ${BUNDLE_LIBS}
421                         -lpthread)
422         endif()
423         install(TARGETS ${EXE_NAME} DESTINATION bin)
424 endfunction()
425
426