diff --git a/Sources/CMakeLists.txt b/Sources/CMakeLists.txt index 6947016..558a2c1 100755 --- a/Sources/CMakeLists.txt +++ b/Sources/CMakeLists.txt @@ -20,8 +20,9 @@ if(NOT COMMAND add_compile_options) endfunction() endif() -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") include(CheckCXXCompilerFlag) +include(ParserAndScanner) # ssam expects the libs to be in Debug/ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Debug) @@ -312,40 +313,16 @@ else() include_directories(External/libvorbis/include) endif() -# We build ECC, then use it to generate C++ code for the game entities... -macro(add_parser_and_scanner _PARSER _SCANNER) - add_custom_command( - OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_SCANNER}.cpp" - MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${_SCANNER}.l" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMAND flex - ARGS -o${_SCANNER}.cpp ${_SCANNER}.l - ) - - add_custom_command( - OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.hpp" - MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.y" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMAND bison - ARGS -o${_PARSER}.cpp ${_PARSER}.y -d - ) - - add_custom_command( - OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.h" - MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.hpp" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMAND ${CMAKE_COMMAND} - ARGS -E copy ${_PARSER}.hpp ${_PARSER}.h - ) -endmacro() - # Build ECC from source if there wasn't a prebuilt-one specified on the command line. # Normally we build it here, but we might need a prebuilt, native binary if # we're cross-compiling the rest of the game. -if(NOT ECC) - add_parser_and_scanner("Ecc/Parser" "Ecc/Scanner") - add_executable(ecc Ecc/Main.cpp Ecc/Parser.cpp Ecc/Parser.h Ecc/Scanner.cpp) - set(ECC "ecc") +if(ECC) + # Use given ecc. +elseif(CMAKE_CROSSCOMPILING) + message(FATAL_ERROR "ECC variable must point to native ecc binary when cross-compiling.") +else() + add_subdirectory(Ecc) + set(ECC ecc) endif() macro(entity _NAME) diff --git a/Sources/Ecc/CMakeLists.txt b/Sources/Ecc/CMakeLists.txt new file mode 100644 index 0000000..8113cf6 --- /dev/null +++ b/Sources/Ecc/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 2.8.7) +project(Ecc) + +if(MSVC) + add_compile_options(/W4) +else() + add_compile_options(-Wall) +endif() + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake") +include(ParserAndScanner) + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_parser_and_scanner("Parser" "Scanner") +add_executable(ecc Main.cpp Parser.cpp Parser.h Scanner.cpp) diff --git a/Sources/Ecc/Parser.y b/Sources/Ecc/Parser.y index 2286d21..5f3000e 100644 --- a/Sources/Ecc/Parser.y +++ b/Sources/Ecc/Parser.y @@ -1,7 +1,7 @@ %{ // rcg10042001 Changed to specify Ecc directory... -#include "Ecc/StdH.h" -#include "Ecc/Main.h" +#include "StdH.h" +#include "Main.h" // turn off over-helpful bit of bison... --ryan. #ifdef __GNUC__ diff --git a/Sources/Ecc/Scanner.l b/Sources/Ecc/Scanner.l index 554b7e6..795f27e 100644 --- a/Sources/Ecc/Scanner.l +++ b/Sources/Ecc/Scanner.l @@ -1,8 +1,7 @@ %{ -// rcg10042001 Changed to specify Ecc directory... -#include "Ecc/StdH.h" -#include "Ecc/Main.h" -#include "Ecc/Parser.h" +#include "StdH.h" +#include "Main.h" +#include "Parser.h" #define YY_NEVER_INTERACTIVE 1 diff --git a/Sources/cmake/ParserAndScanner.cmake b/Sources/cmake/ParserAndScanner.cmake new file mode 100644 index 0000000..a2051ed --- /dev/null +++ b/Sources/cmake/ParserAndScanner.cmake @@ -0,0 +1,25 @@ +macro(add_parser_and_scanner _PARSER _SCANNER) + add_custom_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_SCANNER}.cpp" + MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${_SCANNER}.l" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND flex + ARGS -o${_SCANNER}.cpp ${_SCANNER}.l + ) + + add_custom_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.hpp" + MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.y" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND bison + ARGS -o${_PARSER}.cpp ${_PARSER}.y -d + ) + + add_custom_command( + OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.h" + MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${_PARSER}.hpp" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMAND ${CMAKE_COMMAND} + ARGS -E copy ${_PARSER}.hpp ${_PARSER}.h + ) +endmacro()