| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- cmake_minimum_required(VERSION 2.6)
- project(SUDM)
- # Set to true when using SUDM as a submodule of another project such that only the lib is compiled
- option(SUDM_AS_LIB "Build only lib" FALSE)
- # For now, you'll need to place said files in the appropriate test dir
- # TODO: move this elsewhere?
- option(TEST_COPYRIGHTED_FILES "Enable tests against copyrighted files" FALSE)
- if (NOT SUDM_AS_LIB)
- enable_testing()
- endif()
- # The version number
- set(VERSION_MAJOR 0)
- set(VERSION_MINOR 1)
- if (CMAKE_BUILD_TYPE STREQUAL "")
- # CMake defaults to leaving CMAKE_BUILD_TYPE empty. This screws up
- # differentiation between debug and release builds.
- set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None (CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
- endif ()
- if (NOT SUDM_AS_LIB)
- # On Linux gtest needs pthreads
- if (UNIX)
- find_package (Threads)
- endif()
- include_directories(
- ${CMAKE_CURRENT_SOURCE_DIR}/googlemock
- ${CMAKE_CURRENT_SOURCE_DIR}/googlemock/include
- ${CMAKE_CURRENT_SOURCE_DIR}/googlemock/gtest/include
- ${CMAKE_CURRENT_SOURCE_DIR}/googlemock/gtest
- )
- SET(gmock_src
- ${CMAKE_CURRENT_SOURCE_DIR}/googlemock/src/gmock-all.cc
- ${CMAKE_CURRENT_SOURCE_DIR}/googlemock/gtest/src/gtest-all.cc)
-
- add_library(gmock STATIC ${gmock_src})
- endif()
- if (MSVC)
- # Build cpp files on all cores
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /W4")
-
- # can't use the "secure" versions as they're Windows specific
- add_definitions("/D\"_CRT_SECURE_NO_WARNINGS\"")
- add_definitions("/D\"_SCL_SECURE_NO_WARNINGS\"")
- add_definitions("/wd4290")
- else()
- # Enable C++11, you may need to use -std=c++0x if using an older gcc compiler
- if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
- else()
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-unused-parameter -fPIC -Wall -Weffc++ -pedantic")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-unused-parameter -fPIC -Wall")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -Wcast-align")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual -Wchar-subscripts -Wcomment -Wconversion")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdisabled-optimization")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wfloat-equal -Wformat -Wformat=2")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-nonliteral -Wformat-security")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-y2k")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wimport -Winit-self")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Winvalid-pch")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunsafe-loop-optimizations -Wmissing-braces")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-field-initializers -Wmissing-format-attribute")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-include-dirs -Wmissing-noreturn")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpacked -Wparentheses -Wpointer-arith")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wredundant-decls -Wreturn-type")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsequence-point -Wshadow -Wsign-compare -Wstack-protector")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wswitch-enum -Wtrigraphs -Wuninitialized")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wtrigraphs -Wuninitialized")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunknown-pragmas -Wunreachable-code -Wunused")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-function -Wunused-label -Wunused-parameter")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-value -Wunused-variable -Wvariadic-macros")
- #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wvolatile-register-var -Wwrite-strings")
-
- if (UNIX AND $ENV{COVERAGE}==1)
- message("Setting coverage compiler options")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0") # debug, no optimisation
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") # enabling coverage
- endif()
-
- # we dont want high warning levels on 3rd party things since we won't be fixing those warnings
- set_source_files_properties(${gmock_src} PROPERTIES COMPILE_FLAGS -Wno-effc++)
- endif()
- endif()
- SET(source
- decompiler/sudm.cpp
- decompiler/sudm.h
- decompiler/decompiler_codegen.cpp
- decompiler/decompiler_codegen.h
- decompiler/control_flow.cpp
- decompiler/control_flow.h
- decompiler/decompiler_disassembler.cpp
- decompiler/decompiler_disassembler.h
- decompiler/decompiler_engine.h
- decompiler/graph.cpp
- decompiler/graph.h
- decompiler/instruction.cpp
- decompiler/instruction.h
- decompiler/objectFactory.h
- decompiler/refcounted.h
- decompiler/simple_disassembler.cpp
- decompiler/simple_disassembler.h
- decompiler/stack.h
- decompiler/unknown_opcode_exception.cpp
- decompiler/unknown_opcode_exception.h
- decompiler/value.cpp
- decompiler/value.h
- decompiler/wrongtype.h
- decompiler/scummv6/codegen.cpp
- decompiler/scummv6/codegen.h
- decompiler/scummv6/disassembler.cpp
- decompiler/scummv6/disassembler.h
- decompiler/scummv6/engine.cpp
- decompiler/scummv6/engine.h
- decompiler/ff7_field/ff7_field_disassembler.cpp
- decompiler/ff7_field/ff7_field_disassembler.h
- decompiler/ff7_field/ff7_field_engine.cpp
- decompiler/ff7_field/ff7_field_engine.h
- decompiler/ff7_field/ff7_field_codegen.cpp
- decompiler/ff7_field/ff7_field_codegen.h
- #decompiler/ff7_world/ff7_world_disassembler.cpp
- #decompiler/ff7_world/ff7_world_disassembler.h
- #decompiler/ff7_world/ff7_world_engine.cpp
- #decompiler/ff7_world/ff7_world_engine.h
- #decompiler/ff7_world/ff7_world_codegen.cpp
- #decompiler/ff7_world/ff7_world_codegen.h
- common/algorithm.h
- common/noncopyable.h
- common/scummsys.h
- common/str.cpp
- common/str.h
- common/util.h
- common/binaryreader.h
- common/lzs.h
- common/make_unique.h
- )
- find_package(Boost COMPONENTS program_options filesystem thread date_time system chrono REQUIRED)
- include_directories(
- ${Boost_INCLUDE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/common
- ${CMAKE_CURRENT_SOURCE_DIR}/decompiler
- )
- add_definitions(-DBOOST_ALL_NO_LIB)
- add_definitions(-DBOOST_ALL_DYN_LINK)
- if (UNIX)
- add_definitions(-DPOSIX)
- endif()
- ADD_LIBRARY(Sudm_Lib STATIC ${source})
- if (NOT SUDM_AS_LIB)
- add_executable(Sudm
- decompiler/decompiler.cpp
- )
- target_link_libraries(Sudm Sudm_Lib ${Boost_LIBRARIES})
- set(safe_test_source
- decompiler/test/cfg_test.cpp
- decompiler/test/codegen.cpp
- decompiler/test/disassembler_test.cpp
- decompiler/test/disassembler/pasc.cpp
- decompiler/test/disassembler/pasc.h
- decompiler/test/disassembler/subopcode.cpp
- decompiler/test/disassembler/subopcode.h
- decompiler/test/main.cpp
- decompiler/test/ff7_field_disasm_all_opcodes_by_category_test.cpp
- decompiler/test/ff7_field_control_flow_test.cpp
- decompiler/test/ff7_field_dummy_formatter.h
- )
-
- set(unsafe_test_source
- )
- if (TEST_COPYRIGHTED_FILES)
- add_executable(Sudm_Test ${safe_test_source} ${unsafe_test_source})
- else()
- add_executable(Sudm_Test ${safe_test_source})
- endif()
-
- target_link_libraries(Sudm_Test Sudm_Lib gmock ${Boost_LIBRARIES})
- add_test(NAME Sudm_Test COMMAND Sudm_Test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
- endif()
|