mirror of
https://github.com/autc04/Retro68.git
synced 2025-02-18 18:31:07 +00:00
reorganize CMake toolchain file, add standalone example
This commit is contained in:
parent
0561012bb6
commit
140fe2caef
@ -18,44 +18,6 @@
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
project(Retro)
|
||||
|
||||
include(CMakeParseArguments)
|
||||
|
||||
function(add_application name)
|
||||
set(options DEBUGBREAK CONSOLE)
|
||||
set(oneValueArgs TYPE CREATOR)
|
||||
set(multiValueArgs FILES MAKEAPPL_ARGS)
|
||||
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
||||
|
||||
list(APPEND ARGS_FILES ${ARGS_UNPARSED_ARGUMENTS})
|
||||
|
||||
set(files)
|
||||
foreach(f ${ARGS_FILES})
|
||||
list(APPEND files "${CMAKE_CURRENT_SOURCE_DIR}/${f}")
|
||||
endforeach()
|
||||
|
||||
add_executable(${name} ${files})
|
||||
|
||||
if(${ARGS_DEBUGBREAK})
|
||||
list(APPEND ARGS_MAKEAPPL_ARGS -b)
|
||||
endif()
|
||||
if(${ARGS_CONSOLE})
|
||||
target_link_libraries(${name} RetroConsole)
|
||||
endif()
|
||||
|
||||
|
||||
if(TARGET libretro)
|
||||
set_target_properties(${name} PROPERTIES LINK_DEPENDS libretro)
|
||||
endif(TARGET libretro)
|
||||
|
||||
set_target_properties(${name} PROPERTIES OUTPUT_NAME ${name}.flt)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${name}.bin ${name} ${name}.dsk
|
||||
COMMAND ${MAKE_APPL} ${ARGS_MAKEAPPL_ARGS} -c "${name}.flt" -o "${name}"
|
||||
DEPENDS ${name})
|
||||
add_custom_target(${name}_APPL ALL DEPENDS ${name}.bin)
|
||||
endfunction()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES Retro68)
|
||||
add_subdirectory(libretro)
|
||||
|
||||
@ -67,6 +29,12 @@ add_subdirectory(TestApps)
|
||||
add_subdirectory(Raytracer)
|
||||
add_subdirectory(Launcher)
|
||||
else()
|
||||
|
||||
configure_file(cmake/retro68.toolchain.cmake.in cmake/retro68.toolchain.cmake @ONLY)
|
||||
|
||||
install(DIRECTORY cmake/ DESTINATION cmake FILES_MATCHING PATTERN "*.cmake")
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cmake/retro68.toolchain.cmake DESTINATION cmake)
|
||||
|
||||
add_subdirectory(ResourceFiles)
|
||||
add_subdirectory(MakeAPPL)
|
||||
add_subdirectory(ASFilter)
|
||||
|
11
HelloWorld/CMakeLists.txt
Normal file
11
HelloWorld/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
# cmake \
|
||||
# -DCMAKE_TOOLCHAIN_FILE=$SRC/retro68.toolchain.cmake \
|
||||
# -DRETRO68_ROOT=$PREFIX \
|
||||
# -DCMAKE_BUILD_TYPE=Release
|
||||
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
add_application(HelloWorld
|
||||
hello.c
|
||||
CONSOLE
|
||||
)
|
15
HelloWorld/Makefile
Normal file
15
HelloWorld/Makefile
Normal file
@ -0,0 +1,15 @@
|
||||
# path to RETRO68
|
||||
RETRO68=../../Retro68-build/toolchain
|
||||
|
||||
PREFIX=$(RETRO68)/m68k-unknown-elf
|
||||
CC=$(RETRO68)/bin/m68k-unknown-elf-gcc
|
||||
CXX=$(RETRO68)/bin/m68k-unknown-elf-g++
|
||||
MAKEAPPL=$(RETRO68)/bin/MakeAPPL
|
||||
|
||||
LDFLAGS=-lRetroConsole
|
||||
|
||||
HelloWorld.bin HelloWorld.APPL HelloWorld.dsk: HelloWorld.flt
|
||||
$(MAKEAPPL) -c HelloWorld.flt -o HelloWorld
|
||||
|
||||
HelloWorld.flt: hello.o
|
||||
$(CXX) $< -o $@ $(LDFLAGS) # C++ used for linking because RetroConsole needs it
|
28
HelloWorld/hello.c
Normal file
28
HelloWorld/hello.c
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
Copyright 2014 Wolfgang Thaller.
|
||||
|
||||
This file is part of Retro68.
|
||||
|
||||
Retro68 is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Retro68 is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Retro68. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
printf("Hello, world.\n");
|
||||
printf("\n(Press Return)\n");
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
@ -66,19 +66,18 @@ cd build-host
|
||||
cmake ${SRC} -DCMAKE_INSTALL_PREFIX=$PREFIX
|
||||
cd ..
|
||||
|
||||
make -C build-host install
|
||||
|
||||
# create an empty libretrocrt.a so that cmake's compiler test doesn't fail
|
||||
$PREFIX/bin/m68k-unknown-elf-ar cqs $PREFIX/m68k-unknown-elf/lib/libretrocrt.a
|
||||
# the real libretrocrt.a is built and installed by `make -C build-target install` later
|
||||
|
||||
mkdir -p build-target
|
||||
cd build-target
|
||||
cmake ${SRC} -DCMAKE_INSTALL_PREFIX=$PREFIX/m68k-unknown-elf \
|
||||
-DCMAKE_TOOLCHAIN_FILE=$SRC/retro68.toolchain.cmake \
|
||||
-DRETRO68_ROOT=$PREFIX \
|
||||
cmake ${SRC} -DCMAKE_TOOLCHAIN_FILE=$PREFIX/cmake/retro68.toolchain.cmake \
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
cd ..
|
||||
|
||||
make -C build-host install
|
||||
|
||||
if test ! -e $PREFIX/bin/m68k-unknown-elf-as.real; then
|
||||
mv $PREFIX/bin/m68k-unknown-elf-as $PREFIX/bin/m68k-unknown-elf-as.real
|
||||
|
46
cmake/add_application.cmake
Normal file
46
cmake/add_application.cmake
Normal file
@ -0,0 +1,46 @@
|
||||
include(CMakeParseArguments)
|
||||
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0012 NEW)
|
||||
|
||||
function(add_application name)
|
||||
|
||||
set(options DEBUGBREAK CONSOLE)
|
||||
set(oneValueArgs TYPE CREATOR)
|
||||
set(multiValueArgs FILES MAKEAPPL_ARGS)
|
||||
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
||||
|
||||
list(APPEND ARGS_FILES ${ARGS_UNPARSED_ARGUMENTS})
|
||||
|
||||
set(files)
|
||||
foreach(f ${ARGS_FILES})
|
||||
list(APPEND files "${CMAKE_CURRENT_SOURCE_DIR}/${f}")
|
||||
endforeach()
|
||||
|
||||
add_executable(${name} ${files})
|
||||
|
||||
if(${ARGS_DEBUGBREAK})
|
||||
list(APPEND ARGS_MAKEAPPL_ARGS -b)
|
||||
endif()
|
||||
if(${ARGS_CONSOLE})
|
||||
target_link_libraries(${name} RetroConsole)
|
||||
|
||||
# RetroConsole library uses C++:
|
||||
set_target_properties(${name} PROPERTIES LINKER_LANGUAGE CXX)
|
||||
endif()
|
||||
|
||||
|
||||
if(TARGET libretro)
|
||||
set_target_properties(${name} PROPERTIES LINK_DEPENDS libretro)
|
||||
endif(TARGET libretro)
|
||||
|
||||
set_target_properties(${name} PROPERTIES OUTPUT_NAME ${name}.flt)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${name}.bin ${name} ${name}.dsk
|
||||
COMMAND ${MAKE_APPL} ${ARGS_MAKEAPPL_ARGS} -c "${name}.flt" -o "${name}"
|
||||
DEPENDS ${name})
|
||||
add_custom_target(${name}_APPL ALL DEPENDS ${name}.bin)
|
||||
endfunction()
|
||||
|
||||
cmake_policy(POP)
|
@ -18,7 +18,7 @@
|
||||
set( CMAKE_SYSTEM_NAME Retro68 )
|
||||
set( CMAKE_SYSTEM_VERSION 1)
|
||||
|
||||
set( RETRO68_ROOT "" CACHE PATH "path to root of Retro68 Toolchain" )
|
||||
set( RETRO68_ROOT "@CMAKE_INSTALL_PREFIX@" CACHE PATH "path to root of Retro68 Toolchain" )
|
||||
set( CMAKE_INSTALL_PREFIX "${RETRO68_ROOT}/m68k-unknown-elf/" CACHE PATH "installation prefix" )
|
||||
|
||||
set( MAKE_APPL "${RETRO68_ROOT}/bin/MakeAPPL" )
|
||||
@ -27,3 +27,5 @@ set( REZ "${RETRO68_ROOT}/bin/Rez" )
|
||||
set( CMAKE_C_COMPILER "${RETRO68_ROOT}/bin/m68k-unknown-elf-gcc" )
|
||||
set( CMAKE_CXX_COMPILER "${RETRO68_ROOT}/bin/m68k-unknown-elf-g++" )
|
||||
|
||||
list( APPEND CMAKE_MODULE_PATH "${RETRO68_ROOT}/cmake" )
|
||||
include(add_application)
|
Loading…
x
Reference in New Issue
Block a user